ios - 可以检测我的框架是作为主应用程序还是扩展程序的一部分运行?

标签 ios objective-c iphone frameworks watchkit

在 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/

相关文章:

ios - 如何将 iOS App 商店的两个应用程序分支合并为一个?

ios 动态改变 View 的大小

ios - 哪个过滤器用于此效果?

iphone - 获取 UIView 的容器/UIViewController

ios - 适用于 iOS 10 的 traitCollection.preferredContentSizeCategory.isAccessibilityCategory

ios - SKTextureAtlas外部app.bundle

ios - 使 Mapbox RMAnnotation 以编程方式显示其标注

iphone - 在 objective-c 中捏合放大和缩小

iphone - 在不同的 iOS SDK 下编译一个 iphone 应用程序

ios - 在 iOS7 上工作后,在 iOS 8 上重新加载 webView 时出错