我正在尝试将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>
知道我做错了吗?
答案 0 :(得分:7)
为了完整性,以后可能我自己参考这里有一些让我有用的进一步细节:
声明您的应用支持的文档类型 (例如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类型相匹配。应用程序/八位字节流并不重要,只是旧版本的应用程序通过电子邮件发送具有该MIME类型的数据库。
例如
[controller addAttachmentData:[NSData dataWithContentsOfFile:dbPath] mimeType:@"application/x-sqlite3" fileName:filename];
我确定希望其他任何试图了解如何让他们的应用程序支持打开sqlite3数据库备份的人发现这有用。
答案 1 :(得分:0)
好的,我把它排除了。如果您改为使用“目标信息”面板并在那里添加文档类型(然后选择“SQLite”作为类型'),它就可以正常工作。显然,如果你已经导出了上面的类型。
答案 2 :(得分:0)
根据Apple's documentation,CFBundleDocumentTypes是一个数组,而不是一个dict。
你有:
<key>CFBundleDocumentTypes</key>
<dict>
所以&lt; dict&gt;需要在&lt; array&gt;中元素,如:
<key>CFBundleDocumentTypes</key>
<array>
<dict>
<key>CFBundleTypeName</key>
<string>App Database</string>
<!-- ... -->
</dict>
</array>