iOS Question Associate two (or more) extensions to the same app

Alessandra Pellegri

Active Member
Licensed User
Longtime User
To associate the extension .FLY to my app I used these strings:
B4X:
#PlistExtra: <key>CFBundleDocumentTypes</key><array><dict><key>CFBundleTypeIconFiles</key><array><string>hand.png</string><string>hand_p.png</string></array><key>CFBundleTypeName</key><string>eIETM FLY packet</string><key>CFBundleTypeRole</key><string>Viewer</string><key>LSHandlerRank</key><string>Owner</string><key>LSItemContentTypes</key><array><string>eIETM.fly</string><string>org.gnu.gnu-zip-archive</string></array></dict></array>
#PlistExtra: <key>UTExportedTypeDeclarations</key><array><dict><key>UTTypeConformsTo</key><array><string>public.plain-text</string><string>public.text</string></array><key>UTTypeDescription</key><string>eIETM FLY packet</string><key>UTTypeIdentifier</key><string>eIETM.fly</string><key>UTTypeTagSpecification</key><dict><key>public.filename-extension</key><string>fly</string><key>public.mime-type</key><string>engineering/x-fly</string></dict></dict></array>

Now I need to asscociate .CFL also, I tried this:

B4X:
#PlistExtra: <key>CFBundleDocumentTypes</key><array><dict><key>CFBundleTypeIconFiles</key><array><string>hand.png</string><string>hand_p.png</string></array><key>CFBundleTypeName</key><string>eIETM FLY packet</string><key>CFBundleTypeRole</key><string>Viewer</string><key>LSHandlerRank</key><string>Owner</string><key>LSItemContentTypes</key><array><string>eIETM.fly</string><string>org.gnu.gnu-zip-archive</string></array></dict></array>
#PlistExtra: <key>UTExportedTypeDeclarations</key><array><dict><key>UTTypeConformsTo</key><array><string>public.plain-text</string><string>public.text</string></array><key>UTTypeDescription</key><string>eIETM FLY packet</string><key>UTTypeIdentifier</key><string>eIETM.fly</string><key>UTTypeTagSpecification</key><dict><key>public.filename-extension</key><string>fly</string><key>public.mime-type</key><string>engineering/x-fly</string></dict></dict></array>  
#PlistExtra: <key>CFBundleDocumentTypes</key><array><dict><key>CFBundleTypeIconFiles</key><array><string>hand.png</string><string>hand_p.png</string></array><key>CFBundleTypeName</key><string>eIETM CFL packet</string><key>CFBundleTypeRole</key><string>Viewer</string><key>LSHandlerRank</key><string>Owner</string><key>LSItemContentTypes</key><array><string>eIETM.cfl</string><string>org.gnu.gnu-zip-archive</string></array></dict></array>
#PlistExtra: <key>UTExportedTypeDeclarations</key><array><dict><key>UTTypeConformsTo</key><array><string>public.plain-text</string><string>public.text</string></array><key>UTTypeDescription</key><string>eIETM CFL packet</string><key>UTTypeIdentifier</key><string>eIETM.cfl</string><key>UTTypeTagSpecification</key><dict><key>public.filename-extension</key><string>cfl</string><key>public.mime-type</key><string>engineering/x-cfl</string></dict></dict></array>


But in this way just CFL remain associated and .FLY goes away.

How could I do ?

Thank you
 

Erel

B4X founder
Staff member
Licensed User
Longtime User
Lets start with the CFBundleDocumentTypes:

Remove </dict></array> from the end of the first one.
Remove <key>CFBundleDocumentTypes</key><array><dict> from the beginning of the second one.

Do the same to the exported types:
Remove </dict></array> from the end of the first one.
Remove <key>UTExportedTypeDeclarations</key><array> from the beginning of the second one.
 
Upvote 0

Alessandra Pellegri

Active Member
Licensed User
Longtime User
I did it, so now my lines are:
B4X:
  #PlistExtra: <key>CFBundleTypeIconFiles</key><array><string>hand.png</string><string>hand_p.png</string></array><key>CFBundleTypeName</key><string>eIETM FLY packet</string><key>CFBundleTypeRole</key><string>Viewer</string><key>LSHandlerRank</key><string>Owner</string><key>LSItemContentTypes</key><array><string>eIETM.fly</string><string>org.gnu.gnu-zip-archive</string></array>
   #PlistExtra: <key>UTTypeConformsTo</key><array><string>public.plain-text</string><string>public.text</string></array><key>UTTypeDescription</key><string>eIETM FLY packet</string><key>UTTypeIdentifier</key><string>eIETM.fly</string><key>UTTypeTagSpecification</key><dict><key>public.filename-extension</key><string>fly</string><key>public.mime-type</key><string>engineering/x-fly</string></dict>
   #PlistExtra: <key>CFBundleTypeIconFiles</key><array><string>hand.png</string><string>hand_p.png</string></array><key>CFBundleTypeName</key><string>eIETM CFL packet</string><key>CFBundleTypeRole</key><string>Viewer</string><key>LSHandlerRank</key><string>Owner</string><key>LSItemContentTypes</key><array><string>eIETM.cfl</string><string>org.gnu.gnu-zip-archive</string></array>
   #PlistExtra: <key>UTTypeConformsTo</key><array><string>public.plain-text</string><string>public.text</string></array><key>UTTypeDescription</key><string>eIETM CFL packet</string><key>UTTypeIdentifier</key><string>eIETM.cfl</string><key>UTTypeTagSpecification</key><dict><key>public.filename-extension</key><string>cfl</string><key>public.mime-type</key><string>engineering/x-cfl</string></dict>

But they don't work. It doesn't work no more one single association not even.
 
Upvote 0

Alessandra Pellegri

Active Member
Licensed User
Longtime User
Following your link I have found this example:
B4X:
<key>CFBundleDocumentTypes</key><array>
<dict>
<key>CFBundleTypeIconFiles</key>
<array>
<string>Icon-iPad-doc320.png</string>
<string>Icon-iPad-doc.png</string>
</array>
<key>CFBundleTypeName</key>
<string>MyAppName File</string>
<key>CFBundleTypeRole</key>
<string>Viewer</string>
<key>LSHandlerRank</key>
<string>Owner</string>
<key>LSItemContentTypes</key>
<array><!-- my app supports files with my custom extension (see UTExportedTypeDeclarations) -->
<string>com.myurl.myapp.myextension</string>
<!-- and csv files. --><string>public.comma-separated-values-text</string>
</array>
</dict>
</array>



<key>UTExportedTypeDeclarations</key>
<array>
<dict><key>UTTypeConformsTo</key>
<array>
<string>public.data</string>
</array>
<key>UTTypeDescription</key>
<string>MyAppName File</string>
<key>UTTypeIdentifier</key>
<string>com.myurl.myapp.myextension</string>
<key>UTTypeTagSpecification</key>
<dict><key>public.filename-extension</key>
<string>mye</string>
<key>public.mime-type</key>
<string>application/octet-stream</string>
</dict>
</dict>
</array>

Now the problem is :
- what should I put instead com.myurl.myapp.myextension ? My extensions are FLY and CFL and my app name is eIETM. May be that I should put com.myurl.eIETM.FLY ?
What is myurl ?
-How could I adapt that code to associate both extensions (FLY,CFL) and not just one ?

Thank you very much.
 
Upvote 0

Erel

B4X founder
Staff member
Licensed User
Longtime User
You only need to use UTExportedTypeDeclarations if you add new types. If I understand correct you were able to handle each of the extensions by itself, right?

In that case all that you need to do is to add the second identifier after the first one.

Based on my example:
B4X:
#PlistExtra:<key>CFBundleDocumentTypes</key>
#PlistExtra:<array><dict><key>CFBundleTypeIconFiles</key><array/>
#PlistExtra: <key>CFBundleTypeName</key><string>CSV File</string>
#PlistExtra:<key>LSItemContentTypes</key><array>
#PlistExtra:<string>public.comma-separated-values-text</string>
#PlistExtra: <--------------- add here another line with the second type
#PlistExtra:</array></dict></array>
 
Upvote 0

Alessandra Pellegri

Active Member
Licensed User
Longtime User
Sorry, I don't understand very well what you intend:
where you put "<------add here another line with the second type" what I should put ?

I would like to open two different kind of binary file.
These files have a custom file format invented by me. So I cannot put something similar to : public.comma-separated-values-text .

I just want assciate .CFL and .FLY extension to my app. In the code above where I write CFL and FLY ?

I also tried this:
B4X:
<key>CFBundleDocumentTypes</key>
<array><dict><key>CFBundleTypeIconFiles</key><array><string>hand.png</string><string>hand_p.png</string></array>
<key>CFBundleTypeName</key>
<string>eIETM FLY packet</string>
<key>CFBundleTypeRole</key>
<string>Viewer</string>
<key>LSHandlerRank</key>
<string>Owner</string>
<key>LSItemContentTypes</key>
<array><string>eIETM.fly</string><string>eIETM.cfl</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>eIETM FLY packet</string>
<key>UTTypeIdentifier</key>
<string>eIETM.fly</string>
<key>UTTypeTagSpecification</key>
<dict><key>public.filename-extension</key>
<string>fly</string><key>public.mime-type</key><string>engineering/x-fly</string>
</dict></dict></array>
But this work just for .fly and not .cfl

if I put:
B4X:
<key>public.filename-extension</key>
<string>fly</string><string>cfl</string><key>public.mime-type</key><string>engineering/x-fly</string>
</dict></dict></array>
I obtain a compiling error.

Thank you
 
Last edited:
Upvote 0

Erel

B4X founder
Staff member
Licensed User
Longtime User
It is not readble (at least for me) when you post it like this.

You should indent it. Try it with this text:
B4X:
<key>CFBundleDocumentTypes</key>
<array>
   <dict>
     <key>CFBundleTypeIconFiles</key>
     <array>
       <string>hand.png</string>
       <string>hand_p.png</string>
     </array>
     <key>CFBundleTypeName</key>
     <string>eIETM FLY packet</string>
     <key>CFBundleTypeRole</key>
     <string>Viewer</string>
     <key>LSHandlerRank</key>
     <string>Owner</string>
     <key>LSItemContentTypes</key>
     <array>
       <string>eIETM.fly</string>
       <string>eIETM.cfl</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>eIETM FLY packet</string>
     <key>UTTypeIdentifier</key>
     <string>eIETM.fly</string>
     <key>UTTypeTagSpecification</key>
     <dict>
       <key>public.filename-extension</key>
       <string>fly</string>
       <key>public.mime-type</key>
       <string>engineering/x-fly</string>
     </dict>
   </dict>
   <dict>
     <key>UTTypeConformsTo</key>
       <array>
         <string>public.plain-text</string>
         <string>public.text</string>
       </array>
     <key>UTTypeDescription</key>
     <string>eIETM CFL packet</string>
     <key>UTTypeIdentifier</key>
     <string>eIETM.cfl</string>
     <key>UTTypeTagSpecification</key>
     <dict>
       <key>public.filename-extension</key>
       <string>cfl</string>
       <key>public.mime-type</key>
       <string>engineering/x-cfl</string>
     </dict>
   </dict>
</array>
 
Upvote 0
Top