I am trying to associate a custom file that my app creates (it’s XML) so that users can email the files to each other. I have followed the excellent tutorial here:
How do I associate file types with an iPhone application?
The file is named XXX.checklist
But it’s not associating. I believe my problem is with the public.mime-type key as I have no idea what I am supposed to put there. Below is the associated info-plist entries
<key>CFBundleDocumentTypes</key>
<array>
<array>
<dict>
<key>CFBundleTypeIconFiles</key>
<array>
<string>docIcon64.png</string>
<string>docIcon320.png</string>
</array>
<key>CFBundleTypeName</key>
<string>My App Checklist</string>
<key>CFBundleTypeRole</key>
<string>Viewer</string>
<key>LSHandlerRank</key>
<string>Owner</string>
<key>LSItemContentTypes</key>
<array>
<string>com.mycompany.appid.checklist</string>
</array>
</dict>
</array>
</array>
<key>UTExportedTypeDeclarations</key>
<array>
<dict>
<key>UTTypeConformsTo</key>
<array>
<string>public.content</string>/// i tried public.text but it allowed the file to be opened by the devices default text viewer which I would not like.
</array>
<key>UTTypeDescription</key>
<string>My App Checklist</string>
<key>UTTypeIdentifier</key>
<string>com.mycompany.appid.checklist</string>
<key>UTTypeTagSpecification</key>
<dict>
<key>public.filename-extension</key> // fixed this key
<string>checklist</string>
<key>public.mime-type</key>
<string>text/xml</string> /// changed to this, still doest work though
</dict>
</dict>
</array>
If your UTI is declared as
public.dataI assume that your checklist file is a custom binary data.You should then simply use
application/octet-streamas a mime-type.UPDATE:
Got it, your problem is more trivial than anyone would expect. One more thing for starters –
public.datais okay for all its descendants (includingpublic.xml), so for an XML file you can set any of these:public.itempublic.datapublic.contentpublic.textpublic.xmlThe list of applications offered to open your file type is build based on known apps in system that can handle given UTI plus yours. Since the default text editor opens
public.textandpublic.xmlit will be the default action for your kind of files (your application will show up on the list invoked by a long press on a mail attachment).There is (apparently) no applications that handle
public.data(the same forpublic.content), so when you use this UTI, the default action for an attachment would be to open it in your app.Now to the point… your
CFBundleDocumentTypeshas one extra<array>level:And it’s gonna work. The
UTExportedTypeDeclarationspart is already fine.