我正在使用Share Extension中的以下Pod。编译器不断显示错误: sharedApplication'不可用:在iOS(应用程序扩展)上不可用-在适当的地方使用基于视图控制器的解决方案。在[UIApplication sharedApplication]行的每个库中
我在Share Extension目标中安装了所有库。
我在项目中有四个目标,包括共享扩展,并且为每个目标设置了“ 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
结束
答案 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)