I’m assuming you’ve seen the docs on adding this feature: Technical Q&A QA1587: How do I get my application to show up in the Open in... menu. in which Apple walks you through how to get a UTI ()
If you wanna play with my thoughts, here they are:
I’ll only cover iOS as I’ve only ever done this on native iOS.
You mostly need access to the info.plist - supported
Then add support for your favorite file types!
info.plist
<key>CFBundleDocumentTypes</key>
<array>
<dict>
<key>CFBundleTypeIconFiles</key>
<array>
<string>Document-molecules-320.png</string>
<string>Document-molecules-64.png</string>
</array>
<key>CFBundleTypeName</key>
<string>Molecules Structure File</string>
<key>CFBundleTypeRole</key>
<string>Viewer</string>
<key>LSHandlerRank</key>
<string>Owner</string>
<key>LSItemContentTypes</key>
<array>
<string>com.sunsetlakesoftware.molecules.pdb</string>
<string>org.gnu.gnu-zip-archive</string>
</array>
</dict>
</array>
<key>UTExportedTypeDeclarations</key>
<array>
<dict>
<key>UTTypeConformsTo</key>
<array>
<string>public.plain-text</string>
<string>public.text</string>
</array>
<key>UTTypeDescription</key>
<string>Molecules Structure File</string>
<key>UTTypeIdentifier</key>
<string>com.sunsetlakesoftware.molecules.pdb</string>
<key>UTTypeTagSpecification</key>
<dict>
<key>public.filename-extension</key>
<string>pdb</string>
<key>public.mime-type</key>
<string>chemical/x-pdb</string>
</dict>
</dict>
</array>
Which maybe translates to this:
app.json
{
"ios": {
"infoPlist": {
"CFBundleDocumentTypes": [
{
"CFBundleTypeIconFiles": [
"Document-molecules-320.png",
"Document-molecules-64.png"
],
"CFBundleTypeName": "Molecules Structure File",
"CFBundleTypeRole": "Viewer",
"LSHandlerRank": "Owner",
"LSItemContentTypes": [
"com.sunsetlakesoftware.molecules.pdb",
"org.gnu.gnu-zip-archive"
],
}
],
"UTExportedTypeDeclarations": [
{
"UTTypeConformsTo": [
"public.plain-text",
"public.text"
],
"UTTypeDescription": "Molecules Structure File",
"UTTypeIdentifier": "com.sunsetlakesoftware.molecules.pdb",
"UTTypeTagSpecification": {
"public.filename-extension": "pbd",
"public.mime-type": "chemical/x-pdb"
}
},
]
}
}
}
LSItemContentTypes
: is a pain so maybe experiment with this in a native project.
CFBundleTypeIconFiles
: I have no clue how we’d do this one but maybe a script or something can compile a local image asset.
Finally when the user opens your app, you need to get the file - not sure about this one.
This is done through an AppDelegate method called application:openURL:sourceApplication:annotation
It looks like we do something with this but I’m not sure where you access that. (I didn’t really look )
If also looks like depending on the state of the app, the file might be open and passed to application:didFinishLaunchingWithOptions
instead!
This is also made confusing by the addition of the files app in ios - I’m not sure how it plays into this exact feature but let’s say it did you would add this key to your app.json
ios.infoPlist.UIFileSharingEnabled: true
Anyways, this is a tricky topic that is very platform specific so Expo probably won’t support soon… probs detach.