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
我是否需要一个全局布尔值来决定代码是否正在执行 在应用程序或扩展上下文中,或者有一些预定义的#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