将自定义文件扩展名关联到我的应用
Associate custom file extension to my app
我正在尝试将自定义文件扩展名(比方说 .abc)关联到我正在处理的应用程序,这样当我双击具有该特定扩展名的文件时,我的应用程序就会启动。
一个 .abc 文件只是一个归档文件(.zip 重命名为 .abc),收集了几个 .xml 文件。当我用我的应用程序加载这些 .abc 文件之一时,存档被提取并且 .xml 文件被解析,所以我可以在我的代码中为一些变量设置一些值。
如果我没理解错的话,这个有两部分。
- 让 OS X 知道 .abc 扩展名必须与我的应用相关联
- 在我的应用程序启动后处理文件
目前我对第一部分有疑问。我已经读过一些关于这个主题的堆栈溢出帖子(比如 here or here),但我不明白他们是如何得出键 <LSItemContentTypes>
的字符串值的内容的(我已经尝试了 abc 但它不起作用)和密钥 <UTTypeIdentifier>
。
到目前为止,这是我添加到 info.plist 文件中的代码
<key>CFBundleDocumentTypes</key>
<array>
<dict>
<key>CFBundleTypeIconFile</key>
<array>
<string>myicon.icns</string>
</array>
<key>CFBundleTypeName</key>
<string>My Custom Project File</string>
<key>CFBundleTypeRole</key>
<string>Editor</string>
<key>LSHandlerRank</key>
<string>Owner</string>
<key>LSItemContentTypes</key>
<array>
<string>don't.know.what.to.put.here.abc</string>
</array>
</dict>
</array>
<key>UTExportedTypeDeclarations</key>
<array>
<dict>
<key>UTTypeConformsTo</key>
<array>
<string>public.data</string> <!--not sure about that value-->
</array>
<key>UTTypeDescription</key>
<string>My Custom Project File</string>
<key>UTTypeIdentifier</key>
<string>don't.know.what.to.put.here.abc</string>
<key>UTTypeTagSpecification</key>
<dict>
<key>public.filename-extension</key>
<string>abc</string>
<key>public.mime-type</key>
<string>application/octet-stream</string> <!--not sure about that value-->
</dict>
</dict>
</array>
另外,我的情况 UTTypeConformsTo
public.data 可以吗?由于自定义文件扩展名表示包含 xml 个文件的存档 ?
如果有人能帮助我:)
谢谢
我找到了我的问题的解决方案,我只是误读了文档,因为键 CFBundleTypeIconFile
是一个字符串而不是一个字符串数组(我很困惑,因为我在关注 iOS使用键 CFBundleTypeIconFiles
的示例,它是一个数组)
我正在尝试将自定义文件扩展名(比方说 .abc)关联到我正在处理的应用程序,这样当我双击具有该特定扩展名的文件时,我的应用程序就会启动。
一个 .abc 文件只是一个归档文件(.zip 重命名为 .abc),收集了几个 .xml 文件。当我用我的应用程序加载这些 .abc 文件之一时,存档被提取并且 .xml 文件被解析,所以我可以在我的代码中为一些变量设置一些值。
如果我没理解错的话,这个有两部分。
- 让 OS X 知道 .abc 扩展名必须与我的应用相关联
- 在我的应用程序启动后处理文件
目前我对第一部分有疑问。我已经读过一些关于这个主题的堆栈溢出帖子(比如 here or here),但我不明白他们是如何得出键 <LSItemContentTypes>
的字符串值的内容的(我已经尝试了 abc 但它不起作用)和密钥 <UTTypeIdentifier>
。
到目前为止,这是我添加到 info.plist 文件中的代码
<key>CFBundleDocumentTypes</key>
<array>
<dict>
<key>CFBundleTypeIconFile</key>
<array>
<string>myicon.icns</string>
</array>
<key>CFBundleTypeName</key>
<string>My Custom Project File</string>
<key>CFBundleTypeRole</key>
<string>Editor</string>
<key>LSHandlerRank</key>
<string>Owner</string>
<key>LSItemContentTypes</key>
<array>
<string>don't.know.what.to.put.here.abc</string>
</array>
</dict>
</array>
<key>UTExportedTypeDeclarations</key>
<array>
<dict>
<key>UTTypeConformsTo</key>
<array>
<string>public.data</string> <!--not sure about that value-->
</array>
<key>UTTypeDescription</key>
<string>My Custom Project File</string>
<key>UTTypeIdentifier</key>
<string>don't.know.what.to.put.here.abc</string>
<key>UTTypeTagSpecification</key>
<dict>
<key>public.filename-extension</key>
<string>abc</string>
<key>public.mime-type</key>
<string>application/octet-stream</string> <!--not sure about that value-->
</dict>
</dict>
</array>
另外,我的情况 UTTypeConformsTo
public.data 可以吗?由于自定义文件扩展名表示包含 xml 个文件的存档 ?
如果有人能帮助我:)
谢谢
我找到了我的问题的解决方案,我只是误读了文档,因为键 CFBundleTypeIconFile
是一个字符串而不是一个字符串数组(我很困惑,因为我在关注 iOS使用键 CFBundleTypeIconFiles
的示例,它是一个数组)