iOS WidgetUI开发遇到的问题点

CocoaPods 多target配置共享

(推荐)方式1

#targetA: [AFNetworking,Masonry]
#targetB:[AFNetworking,SDWebImage]
abstract_target 'abstract_pod' do  #这里的abstract_pod在实际targets中不存在,是虚拟
    pod 'AFNetworking'
    
    target 'targetA' do
        pod 'Masonry'
    end
    
    target 'targetB' do
        pod 'SDWebImage'
    end
end

方式2 提取公共pods 各个target引入

platform :ios, '10.0'
#source 'https://github.com/CocoaPods/Specs.git'
source 'https://cdn.cocoapods.org/'
inhibit_all_warnings!
#多个target的pod引入,方式二:如每个pod都引入masonry
def commonPods
    pod 'Moya', '~> 13.0'
end

#工程一:
target '工程名' do
    commonPods
    pod 'AFNetworking'
  target '工程Tests' do
    inherit! :search_paths
    pod 'Specta', '~> 1.0.7'
    pod 'OCMock', '~> 3.4.2'
    pod 'Expecta', '~> 1.0.6'
  end

  target '工程UITests' do
    inherit! :search_paths
    # Pods for testing
  end
  
  target '小组件WidgetExtension' do
    commonPods
  end
end

#工程二:
target 'App' do
    commonPods
end

注意:这里的小组件WidgetExtension是如下图的名称:

target名称路径
执行pod install之后,可能会遇到如下错误:

'sharedApplication' is unavaliable:not available on iOS(App Extension)

问题:‘sharedApplication’ is unavaliable:not available on iOS(App Extension),这是在extension target使用了pod的情况下会遇到的问题。

原因在于Extension不能调用sharedApplication,事实上Extension不能访问的API还有其他的,可以查看苹果官方文档App Extension Programming Guide.

Some APIs Are Unavailable to App Extensions

文档里说了,NS_EXTENSION_UNAVAILABEL这个宏标记的接口都无法在Extension里调用。

很多第三方库都会调用到UIApplication.shared 如图:
修改Require Only AppExtension-Safe
默认的Require Only AppExtension-Safe 都为Yes,需要改为No;完事了吗?不是,对于一个工程有十个二十个的库用到UIApplication.shared的时候,难道每个都要去改动吗?
好吧,这不失为一种操作方式,但是问题来了。pod install之后所有的库都会恢复成默认状态也就是 Require Only AppExtension-Safe都为Yes

解决方案

Podfile中添加如下代码

post_install do |installer|
    installer.pods_project.targets.each do |target|
        target.build_configurations.each do |config|
            config.build_settings['APPLICATION_EXTENSION_API_ONLY'] = 'NO'
        end
    end
end

参考:
CocoaPods工程使用插件App Extension

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值