i have managed to get my app to email a copy of its database to my self, but now when i try and re open it, it says "open in my app" but does nothing. This is what i have in my info.plist
<key>UTExportedTypeDeclarations</key>
<array>
<dict>
<key>UTTypeIdentifier</key>
<string>com.darcapps.myapp.lb</string>
<key>UTTypeDescription</key>
<string>myapp backup</string>
<key>UTTypeTagSpecification</key>
<dict>
<key>public.filename-extension</key>
<string>lb</string>
<key>public.mime-type</key>
<string>application/myapp</string>
</dict>
<key>UTTypeConformsTo</key>
<array>
<string>public.data</string>
</array>
</dict>
</array>
<key>CFBundleDocumentTypes</key>
<array>
<dict>
<key>CFBundleTypeName</key>
<string>myapp backup</string>
<key>LSHandlerRank</key>
<string>Owner</string>
<key>CFBundleTypeRole</key>
<string>Editor</string>
<key>LSItemContentTypes</key>
<array>
<string>com.darcapps.myapp.lb</string>
</array>
</dict>
</array>
The other thing i wasnt sure about was <string>com.mycompany.myapp.extName</string>
Do i have to set these anywhere? eg do i have to set a setting anywhere to tell it what my app is called and what my company is?
thanks
Swapped over to xcode 4 and it made the whole process easier
Related
I want to read .ppt files from the iPhone mail app. I have already done read the PDF file using this SO question. It's working fine, and they used this code for generating the menu in the mail app:
<key>CFBundleDocumentTypes</key>
<array>
<dict>
<key>CFBundleTypeName</key>
<string>PDF Document</string>
<key>LSHandlerRank</key>
<string>Alternate</string>
<key>CFBundleTypeRole</key>
<string>Viewer</string>
<key>LSItemContentTypes</key>
<array>
<string>com.adobe.pdf</string>
</array>
</dict>
</array>
<key>UIFileSharingEnabled</key>
<true/>
<key>CFBundleDocumentTypes</key>
<array>
<dict>
<key>CFBundleTypeName</key>
<string>Powerpoint</string>
<key>LSHandlerRank</key>
<string>Alternate</string>
<key>CFBundleTypeRole</key>
<string>Viewer</string>
<key>LSItemContentTypes</key>
<array>
<string>com.microsoft.powerpoint.ppt</string>
</array>
</dict>
</array>
It's working fine. I googled the problem, but if someone could guide me how to detect .ppt files from mail attachments, that'd be helpful.
In order to use PPT files, you must declare your intent to conform to its UTI, which means simply changing the bit about com.adobe.pdf to com.microsoft.powerpoint.ppt. Easy.
For all intents and purposes, also change CFBundleTypeName to Powerpoint.
The issue here is that you shouldn't have duplicated the entire CFBundleDocumentTypes entry like you have for pdfs and ppts.
Rather, you only need one of these such blocks, and you simply want to add another CFBundleTypeName to the .
So, your plist should look like this:
<key>CFBundleDocumentTypes</key>
<array>
<dict>
<key>CFBundleTypeName</key>
<string>PDF Document</string>
<key>LSHandlerRank</key>
<string>Alternate</string>
<key>CFBundleTypeRole</key>
<string>Viewer</string>
<key>LSItemContentTypes</key>
<array>
<string>com.adobe.pdf</string>
</array>
</dict>
<dict>
<key>CFBundleTypeName</key>
<string>Powerpoint</string>
<key>LSHandlerRank</key>
<string>Alternate</string>
<key>CFBundleTypeRole</key>
<string>Viewer</string>
<key>LSItemContentTypes</key>
<array>
<string>com.microsoft.powerpoint.ppt</string>
</array>
</dict>
</array>
<key>UIFileSharingEnabled</key>
<true/>
Notice that I didn't end the CFBundleDocumentTypes array until I had added both entries.
I would like users to be able to click links in Safari that are GPX files, and import them into my app.
I have this sort of working - there are some websites I can go to, click a GPX file, and it will give me the option to open in my app.
However, some GPX files, including a simple GPX file that I am hosting on my local machine, won't open in this way. What might I have done wrong in registering for the GPX file type?
Here is my plist code:
<key>CFBundleDocumentTypes</key>
<array>
<dict>
<key>CFBundleTypeName</key>
<string>GPSXML File</string>
<key>LSHandlerRank</key>
<string>Owner</string>
<key>CFBundleTypeIconFile</key>
<string>gaia-icon.png</string>
<key>CFBundleTypeRole</key>
<string>Viewer</string>
<key>LSItemContentTypes</key>
<array>
<string>public.utf8-plain-text</string>
<string>com.apple.dt.document.gpx</string>
<string>com.trailbehind.gpx</string>
</array>
</dict>
</array>
<key>UTExportedTypeDeclarations</key>
<array>
<dict>
<key>UTTypeIdentifier</key>
<string>com.trailbehind.gpx</string>
<key>UTTypeTagSpecification</key>
<dict>
<key>public.mime-type</key>
<string>text/plain; charset=UTF-8</string>
<key>public.filename-extension</key>
<string>gpx</string>
</dict>
<key>UTTypeConformsTo</key>
<array>
<string>public.content</string>
<string>public.item</string>
<string>public.data</string>
<string>public.xml</string>
<string>public.text</string>
</array>
<key>UTTypeDescription</key>
<string>GPSXML</string>
</dict>
</array>
<key>UIFileSharingEnabled</key>
<true/>
One thing that definitely needs update is:
<key>public.filename-extension</key>
<string>gpx</string>
should be
<key>public.filename-extension</key>
<array>
<string>gpx</string>
</array>
according to the Troubleshooting Tips from https://developer.apple.com/library/prerelease/ios/qa/qa1587/_index.html
I created my own file type called foo. It is text file.
What I want to do is when user touches file name with extension .foo in Safari, my app is executed.
But, because it is text file, some sites show that file in text viewer.
How can I prevent that? It works fine in other sites.
This is what I wrote in my info.plist.
<key>CFBundleDocumentTypes</key>
<array>
<dict>
<key>CFBundleTypeIconFiles</key>
<array>
<string>myicon.png</string>
</array>
<key>CFBundleTypeName</key>
<string>my file</string>
<key>CFBundleTypeRole</key>
<string>Viewer</string>
<key>LSHandlerRank</key>
<string>Owner</string>
<key>LSItemContentTypes</key>
<array>
<string>com.mycompany.foo</string>
</array>
</dict>
</array>
<key>UTExportedTypeDeclarations</key>
<array>
<dict>
<key>UTTypeDescription</key>
<string>my file</string>
<key>UTTypeIdentifier</key>
<string>com.mycompany.foo</string>
<key>UTTypeTagSpecification</key>
<dict>
<key>public.filename-extension</key>
<string>foo</string>
</dict>
</dict>
</array>
It would be to do with the MIME types on the web servers serving the content. There is not much you can do about this unless of course you run the webserver in question.
Hope that helps.
I've read this post which is really helpful. However I'm trying to open attachments in flex application. Is it possible? Any experience about that?
<iPhone>
<InfoAdditions><![CDATA[
<key>UIApplicationExitsOnSuspend</key>
<true/>
<key>UIDeviceFamily</key>
<array>
<string>1</string>
<string>2</string>
</array>
<key>CFBundleDocumentTypes</key>
<array>
<dict>
<key>CFBundleTypeIconFiles</key>
<array>
<string>iconsMobile/app32.png</string>
<string>iconsMobile/app128.png</string>
</array>
<key>CFBundleTypeName</key>
<string>File Type Name</string>
<key>CFBundleTypeRole</key>
<string>Viewer</string>
<key>LSHandlerRank</key>
<string>Owner</string>
<key>LSItemContentTypes</key>
<array>
<string>com.filename.ext</string>
<string>com.filename.ext2</string>
<string>org.gnu.gnu-zip-archive</string>
</array>
</dict>
</array>
<key>UTExportedTypeDeclarations</key>
<array>
<dict>
<key>UTTypeConformsTo</key>
<array>
<string>public.data</string>
</array>
<key>UTTypeDescription</key>
<string>File Type Name</string>
<key>UTTypeIdentifier</key>
<string>com.instacoll.mockups.lmp</string>
<key>UTTypeTagSpecification</key>
<dict>
<key>public.filename-extension</key>
<array>
<string>ext</string>
<string>ext1</string>
</array>
<key>public.mime-type</key>
<string>application/octet-stream</string>
</dict>
</dict>
</array>
]]></InfoAdditions>
<requestedDisplayResolution>high</requestedDisplayResolution>
</iPhone>
Add this to application xml and replace the ext to your extension it will work..
i add this with multiple extension support if want use ext1 also else remove that entry.
I don't think you can install an app from an email attachment and Flash isn't installed on the iPhone. So essentially, no, you can't open a Flex app from an email attachment.
Thanks, but I've found what I was looking for here:
http://help.adobe.com/en_US/air/build/WSfffb011ac560372f-5d0f4f25128cc9cd0cb-7ffe.html#WS901d38e593cd1bac6c9d409a12e26b451be-8000
I had to prepare the proper file descriptor. Works fine.
I'm trying to associate an SQLite3 database file with our app so that it's easy to open backed up database from an email. The following however does not seem to work as Mail still doesn't recognizes the file (on an iPad and 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>
Any idea what I'm doing wrong?
For completeness and possibly my own reference later here is a bit of the further details that got it working for me:
Declaring Document Types your app supports
(eg sqlite3 databases)
<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>
Copy paste the above XML into your Info.plist file.
Setting the 'Store Type' to 'SQLite' didn't wasn't the killer fix for me.
My previous post here mentioned a rather incorrect way of getting it to work which accepts all files and didn't properly export the type.
Also if your app is emailing off these files as attachments make sure it matches the MIME type you set it to capture. The application/octet-stream is not important it is just that older versions of our app are emailing out the databases with that MIME type.
eg,
[controller addAttachmentData:[NSData dataWithContentsOfFile:dbPath] mimeType:#"application/x-sqlite3" fileName:filename];
I sure hope anyone else that tries to find out how to get their app to support opening sqlite3 database backups finds this helpful.
Okay I've sorted this out. If you instead use 'target's info' panel and add your document type there (and then select 'SQLite' as the type') it just works. Obviously provided you've exported the type as above.
As per Apple's documentation, CFBundleDocumentTypes is an array, not a dict.
You have:
<key>CFBundleDocumentTypes</key>
<dict>
so the <dict> needs to be in an <array> element, like so:
<key>CFBundleDocumentTypes</key>
<array>
<dict>
<key>CFBundleTypeName</key>
<string>App Database</string>
<!-- ... -->
</dict>
</array>