在 iOS 或 OS X 框架中,它包含其应用程序和应用程序扩展的通用代码,有没有办法检测代码是在主应用程序下运行,还是在其扩展程序之一下运行?具体来说,我想检测框架是否被用作 WatchKit 扩展的一部分,而不是应用程序的 iPhone 部分。
UIDevice.currentDevice
始终返回 iPhone,因为它是运行代码的对象。我相信我可以检查 WKInterfaceDevice
是否存在,但这似乎不太优雅。
最佳答案
一个选项是检查当前目标的文件扩展名。这样做的好处是它适用于共享库和框架,而其他选项通常只适用于目标本身:
+ (BOOL) isAppExtension
{
return [[[NSBundle mainBundle] executablePath] containsString:@".appex/"];
}
此答案由 this question and answer 告知.这些答案还概述了如何设置预处理器宏,这在某些情况下是另一个不错的选择,尽管您的框架无法访问它。
我没有将这个问题标记为那个问题的重复,但是,由于这些选项对所有应用程序扩展都是通用的,它们都不是特别优雅,并且可能有特定于 WatchKit 的选项来实现您想要实现的目标.
关于ios - 可以检测我的框架是作为主应用程序还是扩展程序的一部分运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28200392/