【问题标题】:It is possible to detect if my framework is running as part of the main app or an extension?可以检测我的框架是作为主应用程序的一部分还是作为扩展程序运行?
【发布时间】:2015-03-27 20:00:07
【问题描述】:

在包含其应用程序和应用程序扩展的通用代码的 iOS 或 OS X 框架中,有没有办法检测代码是在主应用程序下运行,还是在其扩展程序之一下运行?具体来说,我想检测该框架是否被用作 WatchKit 扩展的一部分,而不是在应用程序的 iPhone 部分中使用。

UIDevice.currentDevice 总是返回 iPhone,因为那是运行代码的东西。我相信我可以检查WKInterfaceDevice 是否存在,但这似乎不太优雅。

【问题讨论】:

    标签: ios objective-c iphone frameworks watchkit


    【解决方案1】:

    一个选项是检查当前目标的文件扩展名。这样做的好处是它适用于共享库和框架,而其他选项通常只适用于目标本身:

    + (BOOL) isAppExtension
    {
        return [[[NSBundle mainBundle] executablePath] containsString:@".appex/"];
    }
    

    这个答案是由this question and answer 告知的。这些答案还概述了如何设置预处理器宏,这在某些情况下是另一个不错的选择,尽管您的框架无法访问它。

    我没有将此问题标记为该问题的重复问题,但是,由于这些选项对所有应用程序扩展都是通用的,因此都不是特别优雅,并且可能有特定于 WatchKit 的选项可用于您想要实现的目标.

    【讨论】:

      【解决方案2】:

      我特别针对 WatchKit 提出了以下建议:

      [[[NSBundle mainBundle] bundleIdentifier] hasSuffix:@"watchkitextension"];
      

      或者在 Swift 中:

      NSBundle.mainBundle().bundleIdentifier?.hasSuffix("watchkitextension")
      

      这依赖于 WatchKit 扩展必须有一个以 watchkitextension 结尾的包 ID。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-11-16
        • 2017-02-04
        • 1970-01-01
        • 2010-09-20
        • 1970-01-01
        相关资源
        最近更新 更多