ios:如何检查应用与扩展上下文

ios: how do I check for app vs extension context

我是否需要一个全局布尔值来决定代码是否正在执行 在应用程序或扩展上下文中,或者有一些预定义的#if I could use?

需要决定我是否可以使用 UserDefaults.standard 或回退到共享用户默认值

由于您的扩展目标 bundleIdentifier 将不同于您的主应用,您可以检查 bundleIdentifier 值。可以通过以下方式访问:

Bundle.main.bundleIdentifier

我仅在 Today Extension 上对此进行了测试,不确定它是否适用于其他扩展。对我来说,输出是这样的:

主应用程序:com.example.app

分机:com.example.app.today

最后,此方法将允许您区分代码为 运行 的扩展。

static var isInExtension: Bool
{
    //        print ("main bundleIdentifier \(Bundle.main.bundleIdentifier)")
    if Bundle.main.bundleIdentifier?.hasSuffix("Extention") ?? false {
        return true
    }
    return false
}

在扩展目标的构建设置中的其他 C 标志和其他 C++ 标志中添加 -DNSExtension。 现在您可以检查扩展名,如下所示

#ifdef NSExtension

#endif