将sqlite3数据库关联到iPhone应用程序

3

我正在尝试将一个SQLite3数据库文件与我们的应用程序关联起来,以便从电子邮件中轻松打开备份的数据库。然而,以下内容似乎不起作用,因为Mail仍然无法识别该文件(在iPad和iPhone 4上):

<key>UTExportedTypeDeclarations</key>
<array>
    <dict>
        <key>UTTypeConformsTo</key>
        <array>
            <string>public.database</string>
            <string>public.data</string>                    
        </array>
        <key>UTTypeDescription</key>
        <string>App Database File</string>
        <key>UTTypeIdentifier</key>
        <string>com.company.App.db</string>
        <key>UTTypeTagSpecification</key>
        <dict>
            <key>public.filename-extension</key>
            <string>db</string>
            <key>public.mime-type</key>
            <string>application/x-sqlite3</string>            
        </dict>
    </dict>
</array>

 <key>CFBundleDocumentTypes</key>
 <dict>
  <key>CFBundleTypeName</key>
  <string>App Database</string>
  <key>CFBundleTypeIconFiles</key>
  <array>
   <string>Icon-Small.png</string>
   <string>Icon.png</string>
  </array>
    <key>CFBundleTypeRole</key>
        <string>Editor</string>

  <key>LSItemContentTypes</key>
  <array>
   <string>com.company.App.db</string>
  </array>
  <key>LSHandlerRank</key>
  <string>Alternate</string>
 </dict>
</dict>

有任何想法我做错了什么吗?
3个回答

9

为了完整性和可能日后自己的参考,以下是一些让我成功运行的进一步细节:

声明应用程序支持的文档类型 (例如sqlite3数据库)

<key>UTExportedTypeDeclarations</key>
    <array>
        <dict>
            <key>UTTypeIdentifier</key>
            <string>com.company.sqlite3.database</string>
            <key>UTTypeReferenceURL</key>
            <string>http://www.company.com/</string>
            <key>UTTypeDescription</key>
            <string>MyCompany SQLite Database</string>
            <key>UTTypeIconFile</key>
            <array>
                <string>Icon-Small.png</string>
                <string>Icon.png</string>
            </array>
            <key>UTTypeConformsTo</key>
            <array>
                <string>public.database</string>
                <string>public.data</string>
            </array>
            <key>UTTypeTagSpecification</key>
            <dict>
                <key>public.filename-extension</key>
                <array>
                    <string>sqlite</string>
                </array>
                <key>public.mime-type</key>
                <array>
                    <string>application/x-sqlite3</string>
                    <string>application/octet-stream</string>
                </array>

            </dict>
        </dict>
    </array>
<key>CFBundleDocumentTypes</key>
<array>
    <dict>
        <key>CFBundleTypeName</key>
        <string>MyCompany SQLite Database</string>
        <key>CFBundleTypeIconFiles</key>
        <array>
            <string>Icon-Small.png</string>
            <string>Icon.png</string>
        </array>

        <key>CFBundleTypeExtensions</key>
        <array>
            <string>sqlite</string>
        </array>

        <key>CFBundleTypeMIMETypes</key>
        <array>
            <string>application/x-sqlite3</string>
            <string>application/octet-stream</string>
        </array>

        <key>LSHandlerRank</key>
        <string>Alternate</string>

        <key>LSItemContentTypes</key>
        <array>
            <string>com.company.sqlite3.database</string>
        </array>

        <key>NSPersistentStoreTypeKey</key>
        <string>SQLite</string>

    </dict>
</array>

请将上述XML复制并粘贴到您的Info.plist文件中。
将“存储类型”设置为“SQLite”对我来说并不是解决问题的关键。
我之前在这里发布的帖子提到了一种获取它正常工作的错误方法,该方法接受所有文件并未正确导出类型。
此外,如果您的应用程序通过电子邮件将这些文件作为附件发送,请确保与您设置的MIME类型匹配。 application/octet-stream并不重要,只是我们的旧版应用程序正在使用该MIME类型发送数据库。
例如,
[controller addAttachmentData:[NSData dataWithContentsOfFile:dbPath] mimeType:@"application/x-sqlite3" fileName:filename];

我希望任何试图了解如何让他们的应用程序支持打开sqlite3数据库备份的人都会发现这篇文章有所帮助。


0
根据苹果文档,CFBundleDocumentTypes是一个数组,而不是字典。
你有:
<key>CFBundleDocumentTypes</key>
<dict>

所以 <dict> 需要在一个 <array> 元素中,像这样:

<key>CFBundleDocumentTypes</key>
<array>
    <dict>
        <key>CFBundleTypeName</key>
        <string>App Database</string>
        <!-- ... -->
    </dict>
</array>

0

好的,我已经解决了这个问题。如果你使用“目标信息”面板并在那里添加你的文档类型(然后选择“SQLite”作为类型),它就可以正常工作了。显然,前提是你已经按照上述方式导出了该类型。


谢谢!当您在填写目标信息面板时,您会在OS类型、类和UTI上放置什么? - Duck

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接