如何检测在 iOS 8 上包含应用程序时启用了应用程序扩展?

Posted

技术标签:

【中文标题】如何检测在 iOS 8 上包含应用程序时启用了应用程序扩展?【英文标题】:How to detect an app extension is enabled in containing app on iOS 8? 【发布时间】:2014-06-25 09:29:05 【问题描述】:

我正在 ios 8 beta 上开发自定义键盘,我想告诉用户如果我的自定义键盘未启用,如何在包含应用程序中启用它,有什么方法可以检测应用程序扩展是否启用?

【问题讨论】:

类似(最近的)问题:***.com/questions/25675628/… 【参考方案1】:

    首先让我们设置一些常量以便于彼此理解:

    包含应用程序 = 安装扩展程序并保存扩展程序二进制文件和目标的应用程序 主机应用 = 扩展程序在内部运行的应用(另一方) extension = 我们现在可以构建到系统范围内使用的任何 iOS8 新组件/模块:自定义键盘、今日小部件、照片编辑效果等等。

    Apple 还发布了一个更安静的 API,称为 App Groups API 此 API 允许开发人员将 n 个扩展分组到 1 个捆绑标识符下,并在应用和其中包含的扩展之间创建通信线路。

    您可以使用 NUserDefaults 在扩展程序和包含应用程序之间共享数据,但使用这种新方法:

    [[NSUserDefaults alloc] initWithSuiteName:@"<app group identifier>"];
    

    读/写...和同步:

    [myDefaultsObj synchronize];
    

    现在是底线:

    使用应用组的 url 方案来测试你想要什么:

    https://developer.apple.com/library/prerelease/ios/documentation/Foundation/Reference/NSExtensionContext_Class/#//apple_ref/occ/instm/NSExtensionContext/openURL:completionHandler:

    - (void)openURL:(NSURL *)URL completionHandler:(void (^)(BOOL success))completionHandler
    
    URL - 要打开的 URL。 completionHandler - 打开 URL 时调用的块。 此参数-success-是一个布尔值,表示打开是否成功。

祝你好运!!!

【讨论】:

方法“(void)openURL:(NSURL *)URL completionHandler:(void (^)(BOOL success))completionHandler”只在应用扩展中可用,我想检测APP EXTENSION是否开启或不在 CONTAINING APP 中。 [NSExtensionContext openURL:completionHandler:] 对于今天扩展以外的扩展总是会失败

以上是关于如何检测在 iOS 8 上包含应用程序时启用了应用程序扩展?的主要内容,如果未能解决你的问题,请参考以下文章

如何检测我的 iOS 应用已启用 PIE/ASLR?

iOS 8 AVFoundation - 如何在有能力的设备上启用视频稳定功能

如何在 iOS 7/8 的单个视图上禁用横向

设备上的 iOS 8 自定义键盘

如何从应用程序 iOS 8 启用/禁用推送通知

今日 iOS 8 小部件中的音乐播放器控件