iOS NotificationServiceExtension中'sharedApplication'不可用问题求助
问题分析
你添加NotificationServiceExtension后,错误让Extension目标继承了主App的所有Pod依赖,且关闭"Require Only App-Extension Safe API"试图绕过检查——但Extension环境本身不允许调用UIApplication.sharedApplication这类API,第三方插件大多未做Extension适配,导致报错。
解决方案
- 修正Podfile配置,避免Extension继承主App依赖
默认空的target 'NotificationServiceExtension' do end会继承主target的所有Pods,这是核心问题。修改Podfile,让Extension只继承搜索路径,不继承主App的依赖:
target '你的主App目标名' do # 主App的所有依赖,比如share_plus等 pod 'share_plus' # 其他插件... end target 'NotificationServiceExtension' do inherit! :search_paths # 仅继承搜索路径,不继承主target的Pods # 这里只添加Extension真正需要的、支持App Extension的依赖(通常不需要第三方插件) end
保持"Require Only App-Extension Safe API"为YES
关闭这个开关只是暂时屏蔽编译检查,运行时依然会因为调用Extension不支持的API崩溃,必须保持该选项为YES,从根源上避免非安全API调用。适配报错的第三方插件
- 优先升级到支持App Extension的版本(比如你升级share_plus解决了问题)。
- 如果插件无适配版本,需修改插件iOS代码,用条件编译屏蔽Extension环境下的非安全API调用:
若是Flutter插件,可在插件的iOS实现中添加上述宏判断,确保Extension环境不执行相关代码。#if !TARGET_IS_EXTENSION // 包含UIApplication.sharedApplication的代码块 #endif
- 清理缓存重新构建
修改Podfile后执行:
pod install --repo-update
然后在Xcode中按Cmd+Shift+K清理缓存,重新构建项目。
内容的提问来源于stack exchange,提问作者Nijat Naghiyev
相关产品推荐
相关产品推荐

