iOS - 今日扩展中无法使用sharedApplication吗?

时间:2015-03-25 02:55:44

标签: ios swift today-extension ios-extensions

我正在创建今日扩展程序。我添加了所有必要的文件,并获得了一堆关于

的编译错误
  • openUrl不可用
  • sharedApplication不可用
  • UIAlertView上的init不可用

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

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

#if!TARGET_IS_TODAY_EXTENSION  #ENDIF

2 个答案:

答案 0 :(得分:4)

您可以使用编译器宏,虽然它不像Objective-C那样灵活(并且IMO略有错误设计)。如果您在"其他Swift Flags"中添加-DTODAY_EXTENSION之类的内容今天扩展的构建设置部分,您可以在代码中执行以下操作:

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

它只是有效。但是:

  • 编译器似乎忽略了带有值的宏,所以如果你使用-DTODAY_EXTENSION=1这样的东西,它就不会有任何影响。删除该值并将其设为-DTODAY_EXTENSION
  • 检查宏时,
  • #if有效,但#ifdef没有。

Apple已some documentation on this但我仍需要尝试让它正常运行。

答案 1 :(得分:0)

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