防止我自己的应用程序的共享扩展名出现在共享表中

Ste*_* s. 5 ios ios-extensions ios-sharesheet

我正在构建一个管理音频文件的iOS应用。它包括一个共享扩展名,可以从其他应用程序接收音频文件。它还可以与其他应用程序共享其音频文件。

从我的应用程序启动共享时,我不希望自己的应用程序出现在共享表中。换句话说,我不希望用户将自己的音频文件发送回我的应用程序。

我找不到用NSExtensionActivationRule排除自己的应用程序的方法。

sin*_*dra 1

首先在代码中定义以下行:

class ActionExtensionBlockerItem: NSObject, UIActivityItemSource {
    func activityViewController(_ activityViewController: UIActivityViewController, dataTypeIdentifierForActivityType activityType: UIActivityType?) -> String {
        return "com.your.unique.uti";
    }
    func activityViewController(_ activityViewController: UIActivityViewController, itemForActivityType activityType: UIActivityType) -> Any? {
        // Returning an NSObject here is safest, because otherwise it is possible for the activity item to actually be shared!
        return NSObject()
    }
    func activityViewController(_ activityViewController: UIActivityViewController, subjectForActivityType activityType: UIActivityType?) -> String {
        return ""
    }
    func activityViewController(_ activityViewController: UIActivityViewController, thumbnailImageForActivityType activityType: UIActivityType?, suggestedSize size: CGSize) -> UIImage? {
        return nil
    }
    func activityViewControllerPlaceholderItem(_ activityViewController: UIActivityViewController) -> Any {
        return ""
    }
}
Run Code Online (Sandbox Code Playgroud)

com.your.unique.uti是您的应用程序组标识符:

请参阅此图片以供参考

然后在呈现 ActivityViewController 时使用以下代码:

let activityViewController = UIActivityViewController(activityItems: [/* Other Items To Share, */ ActionExtensionBlockerItem()], applicationActivities: nil)
Run Code Online (Sandbox Code Playgroud)