在 Objective C 中向共享 sheet 添加一个 open In 选项

Adding an open In option to the share sheet in ObjectiveC

我熟悉 IOS 上的分享功能。我使用

在我的应用程序中分享项目
[[UIActivityViewController alloc] initWithActivityItems:items applicationActivities:nil];

我的问题是如何向我的应用程序的共享 sheet 添加打开方式选项?

"Open in…" 选项是否可用取决于打开的内容和设备安装的应用程序支持的文档类型。这不是您可以从您的应用程序中更改的内容。

另一方面,如果您希望出现在您应用的 "Open in" 列表中的应用是您可以控制的其他应用,那么您可以将 CFBundleDocumentTypes 键添加到这些应用的 info.plists。这告诉 iOS 这些应用程序可以打开某些类型的文件。您使用 public.jpeg 等 UTI 指定支持的文件类型,当用户尝试从 UIActivityViewController 打开其中一种文件类型时,ios 将在选项中包含支持的应用程序。

这里有一个很好的讨论:How do I get my application to show up in the Open in... menu

下面是关于 UTI 的讨论:Uniform Type Identifier Concepts

因此,例如,如果您的某个应用程序支持打开 jpeg 图像和任何文本文件,您可以将其添加到 info.plist:

<array>
    <dict>
        <key>CFBundleTypeIconFiles</key>
        <array/>
        <key>CFBundleTypeName</key>
        <string>Images</string>
        <key>CFBundleTypeRole</key>
        <string>Viewer</string>
        <key>LSHandlerRank</key>
        <string>Alternate</string>
        <key>LSItemContentTypes</key>
        <array>
            <string>public.jpeg</string>
        </array>
    </dict>
    <dict>
        <key>CFBundleTypeIconFiles</key>
        <array/>
        <key>CFBundleTypeName</key>
        <string>text</string>
        <key>LSHandlerRank</key>
        <string>Alternate</string>
        <key>LSItemContentTypes</key>
        <array>
            <string>public.plain-text</string>
        </array>
    </dict>
</array>

但是,同样,如果您试图从显示 activity 控制器的应用程序中操作显示为 "Open in" 选项的应用程序,则您不能。您只能让自己的应用宣传它们支持某些文档类型,并从中 iOS 构建其 "Open in" 选项。

在此 Post 中:

  • 以上 post 只显示复制到而不添加下面的行。

  • 用于将“复制到”显示为“打开方式

    Supports opening documents in place : YES

参考文献:-