此问题完全基于有关在iOS中引入应用程序扩展的公开发布的文档.
随着iOS 8中的应用扩展程序的推出,现在可以"扩展您的应用程序之外的自定义功能和内容,并在用户使用其他应用程序时将其提供给用户".
在我的扩展实现中,我在我的扩展(模型等)中包含了我的实际应用程序中的一些类.问题是这些类进行调用UIApplication,这在app扩展中是不可用的,编译器告诉我.
我认为一个简单的解决方案就是UIApplication在#if指令中包含任何调用.
例如,如果我想在模拟器上运行时只包含代码,我会使用:
#if TARGET_IPHONE_SIMULATOR
// Code Here
#endif
Run Code Online (Sandbox Code Playgroud)
当目标是应用程序扩展时,是否有类似的定义宏?
我试图找到一种方法来添加检查条件是 框架中的扩展目标(不是主应用程序)。是否可以依靠 #available(iOSApplicationExtension, *)一些参数调整?
@objc public extension UIView {
var isAccessibilityCategory: Bool {
if #available(iOSApplicationExtension, *) {
return self.traitCollection.preferredContentSizeCategory.isAccessibilityCategory
} else {
return UIApplication.shared.preferredContentSizeCategory.isAccessibilityCategory
}
}
}
Run Code Online (Sandbox Code Playgroud)
如何检测代码是否在主应用程序或应用程序扩展目标中运行?- 不起作用,因为框架不知道扩展目标
在包含其应用程序和应用程序扩展的公共代码的iOS或OS X Framework中,有没有办法检测代码是在主应用程序或其扩展程序之一下运行?具体来说,我想检测框架是否被用作WatchKit扩展的一部分而不是App的iPhone部分.
UIDevice.currentDevice总是返回iPhone,就像运行代码一样.我相信我可以检查是否WKInterfaceDevice存在,但这似乎并不太优雅.
我正在创建Today扩展。我已经添加了所有必要的文件,并得到了一堆有关的编译错误
具有这些依赖关系的文件已内置到我的应用程序中(我的网络层等上的错误处理程序),我知道它们不会在Today Extension中使用,但是为了完全摆脱这些文件中的依赖关系,需要重构整个应用程序。有没有解决的办法?
我的代码是Swift,所以我也不能使用编译器宏来避免执行这些代码行。
#if!TARGET_IS_TODAY_EXTENSION #endif