'sharedApplication'不可用:在iOS(应用程序扩展)上不可用-改在适当的地方使用基于视图控制器的解决方案

时间:2018-09-25 17:03:39

标签: ios swift xcode pod share-extension

我正在使用Share Extension中的以下Pod。编译器不断显示错误: sharedApplication'不可用:在iOS(应用程序扩展)上不可用-在适当的地方使用基于视图控制器的解决方案。在[UIApplication sharedApplication]行的每个库中

  1. 我在Share Extension目标中安装了所有库。

  2. 我在项目中有四个目标,包括共享扩展,并且为每个目标设置了“ AppExtension标志为否”。 仍然会出现错误。

目标->构建设置->仅需要AppExtension-Safe API->否

我的Podfile:

平台:ios,'11 .2' def shared_pods use_frameworks! 来源'https://github.com/CocoaPods/Specs.git'

pod'XMPPFramework',:git =>“ https://github.com/robbiehanson/XMPPFramework.git”,:branch =>'master'

pod'MBProgressHUD'

pod'GoogleMaps'

pod“ GooglePlaces”

pod'AccountKit'

pod'Alamofire','〜> 4.5'

pod'AlamofireImage','〜> 3.3'

pod'SVProgressHUD'

pod'SDWebImage','〜> 4.1.1'

pod'AWSS3','〜> 2.6.0'

pod'Fabric'

pod'Crashlytics'

pod“ Firebase / Core”

pod“ Firebase /消息传递”

pod'ReverseExtension'

结束

“生产”目标

shared_pods

结束

“发展”目标

shared_pods

结束

“测试”目标

shared_pods

结束

5 个答案:

答案 0 :(得分:5)

在我的 Swift Packages 中升级到 Xcode 13 后开始遇到这个问题。 SPM 没有与 pod 相同的目标成员资格选项,因此 Uday 的答案对我来说不太合适。这个问题本质上是现在(显然?)为所有可用目标编译 SPM 包,无论它们是否实际链接。因此,如果您的代码不能在您从未打算使用它的地方运行,您就无法构建您的代码。

我的解决方案是 fork 包并将有此问题的类标记为在扩展中不可用:

NS_EXTENSION_UNAVAILABLE("xxxx not supported in extensions (deprecated use of UIApplication shared)")
@interface xxxx : UIView
...

或者在 Swift 中等效:

@available(iOSApplicationExtension, unavailable)
class xxxx {
...

您也可以将这些可用性宏应用于特定的函数/变量,但将它放在整个类上对我来说侵入性较小,因为我从来没有打算在扩展中使用这些库。

答案 1 :(得分:1)

某些Pod无法在扩展程序中使用。我在IQKeyboardManager中遇到了完全相同的问题。 https://github.com/hackiftekhar/IQKeyboardManager/issues/410

sharedApplication或shared在我正在使用的扩展类型中不可用。

答案 2 :(得分:1)

UIApplication.shared在App扩展中不可用。 因此,在您的Podfile中,删除使用UIApplication.shared

的库

答案 3 :(得分:0)

问题在于该Pod是使用Swift的早期版本(2?)编写的,而您正在尝试在较新的版本中使用它。 {很久以前sharedApplication更改为shared

您需要获取Pod的更新版本(如果可能)。

答案 4 :(得分:0)

从该文件中删除扩展检查目标成员资格。

enter image description here