创建自定义UTI以与Airdrop和iOS一起使用

6

我在我的 info.plist 文件中使用了以下代码:

<key>CFBundleDocumentTypes</key>
<array>
    <dict>
        <key>CFBundleTypeName</key>
        <string>AirDrop Profile File Type</string>
        <key>LSHandlerRank</key>
        <string>Default</string>
        <key>LSItemContentTypes</key>
        <array>
            <string>com.apple.customProfileUTI.customprofile</string>
        </array>
    </dict>
</array>

为了声明自定义文件类型,可以参考这里的答案,并查看链接的示例代码,但我无法很好地理解它。 我有一个结构体,我正在将其转换为数据并与Airdrop共享,我正在尝试了解如何创建一种数据类型,以便接收设备知道打开我的应用程序以接收数据。
有人能为我澄清一下吗?
答案在这里
1个回答

16

如果您的应用程序定义了一种新的文件类型,则需要在Info.plist文件的UTExportedTypeDeclarations部分中定义自定义UTI。

这可以在Xcode的应用程序目标的Info选项卡下的导出的UTIs部分中设置,或者您可以手动更新Info.plist文件,如下所示。

CFBundleDocumentTypes用于声明您的应用程序可以打开哪些文件类型。

以下是一个虚构的文件类型,它恰好是一个扩展名为.fun的二进制文件。

<key>UTExportedTypeDeclarations</key>
<array>
    <dict>
        <key>UTTypeConformsTo</key>
        <array>
            <string>public.data</string>
        </array>
        <key>UTTypeDescription</key>
        <string>My Custom Binary File</string>
        <key>UTTypeIdentifier</key>
        <string>com.mycompany.myapp.myfiletype</string>
        <key>UTTypeTagSpecification</key>
        <dict>
            <key>public.filename-extension</key>
            <array>
                <string>fun</string>
            </array>
        </dict>
    </dict>
</array>

有了这个设置,您还可以设置您的CFBundleDocumentTypes,以便您的应用程序被提供为打开此类文件的选择:

<key>CFBundleDocumentTypes</key>
<array>
    <dict>
        <key>CFBundleTypeIconFiles</key>
        <array/>
        <key>CFBundleTypeName</key>
        <string>My Custom Binary File</string>
        <key>LSHandlerRank</key>
        <string>Owner</string>
        <key>LSItemContentTypes</key>
        <array>
            <string>com.mycompany.myapp.myfiletype</string>
        </array>
    </dict>
</array>

请注意,CFBundleDocumentTypesLSItemContentTypes 值必须与 UTI 的 UTTypeIdentifier 匹配。


1
com.mycompany.myapp.myfiletype 这个值(两处都要修改)需要是您定义的唯一值。这就是您的自定义 UTI。确保整个值从未被其他人使用过。这可以通过使用我示例中显示的“反向域名”方法轻松完成。在“com.mycompany”之后放置的内容完全取决于您自己(当然,“mycompany”应更改为您实际的域名)。 - rmaddy
啊,好的 - 所以在目标信息中,我需要提供一个导出的UTI、一个导入的UTI和一个文档类型? - ZiEiTiA
在这种情况下,您不需要导入UTI。使用"Exported UTI"部分为应用程序定义的自定义UTI。使用"Imported UTIs"来定义应用程序使用但不特定于您的应用程序且未由苹果提供为标准UTI的UTI。使用"Document Types"指示您的应用程序可以打开哪些类型的文件,例如电子邮件附件或来自其他应用程序的文件。 - rmaddy
使用 UIActivityViewController - rmaddy
这是我要使用的代码:let activityViewController = UIActivityViewController(activityItems: dataToShare, applicationActivities: nil) activityViewController.popoverPresentationController?.sourceView = self.view self.present(activityViewController, animated: true, completion: nil) - ZiEiTiA
显示剩余6条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接