iOS - SharedApplication 在 Today Extension 中不可用?

Posted

技术标签:

【中文标题】iOS - SharedApplication 在 Today Extension 中不可用?【英文标题】:iOS - sharedApplication is unavailable in Today Extension? 【发布时间】:2015-03-25 02:55:44 【问题描述】:

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

的编译错误 openUrl 不可用 sharedApplication 不可用 UIAlertView 上的初始化不可用

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

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

#if !TARGET_IS_TODAY_EXTENSION #endif

【问题讨论】:

【参考方案1】:

您可以使用编译器宏,但它不如使用 Objective-C 灵活(而且 IMO 设计稍有错误)。如果您将 -DTODAY_EXTENSION 之类的内容添加到今天扩展的构建设置的“其他 Swift 标志”部分,您可以在代码中执行以下操作:

    #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,但我仍然需要进行试验才能使其正常工作。

【讨论】:

【参考方案2】:

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

【讨论】:

以上是关于iOS - SharedApplication 在 Today Extension 中不可用?的主要内容,如果未能解决你的问题,请参考以下文章

iOS UIApplication sharedapplication用法

来自 Firebase pod 的 FBSDKCoreKit/FBSDKLoginKit?:“sharedApplication”不可用:在 iOS 上不可用(应用程序扩展)

iOS 8 [UIApplication sharedApplication].scheduledLocalNotifications 为空

我需要在 iOS 的班级中声明 UIApplication SharedApplication 多少次?

如何在 iOS 中随设备更改 [UIApplication sharedApplication].window 方向

iOS [[UIApplication sharedApplication] delegate]运用