4

我正在创建一个 Today 扩展。我已经添加了所有必要的文件并得到了一堆关于

  • openUrl 不可用
  • sharedApplication 不可用
  • UIAlertView 上的初始化不可用

具有这些依赖关系的文件深入我的应用程序(我的网络层上的错误处理程序等),我知道它们不会在 Today Extension 中使用,但为了完全摆脱这些文件中的依赖关系,我需要重构整个应用程序。有没有解决的办法?

我的代码是 Swift,所以我也不能使用编译器宏来避免执行这些代码行。

#if !TARGET_IS_TODAY_EXTENSION #endif

4

2 回答 2

5

您可以使用编译器宏,尽管它不像 Objective-C 那样灵活(而且 IMO 的设计有些错误)。如果您-DTODAY_EXTENSION在 today 扩展的构建设置的“Other Swift Flags”部分添加类似的内容,您可以在代码中执行以下操作:

    #if TODAY_EXTENSION
        println("In today extension")
    #else
        println("Not in today ext")
    #endif

它只是工作。然而:

  • 编译器似乎忽略了带有值的宏,所以如果你使用类似的东西,-DTODAY_EXTENSION=1它不会有任何效果。放弃价值并实现它-DTODAY_EXTENSION
  • #if检查宏时有效,但#ifdef无效。

Apple 对此有一些文档,但我仍然需要进行试验才能使其正常工作。

于 2015-03-25T21:45:07.143 回答
0

如果使用的代码.shared在框架中(即 cocoapod),那么您不能使用编译器宏。这里有一种方法应该可行:iOS 8 Extension How To Detect Running

于 2017-02-09T22:16:49.227 回答