美文网首页iOS开发专区iOS Swift && Objective-Cbugs
cocoapods工程使用插件App Extension

cocoapods工程使用插件App Extension

作者: bug开发工程师啊啊啊 | 来源:发表于2017-11-13 23:24 被阅读48次

        为APP添加的Extension的方法很简单,在工程下new一个target,选择相应功能的Extension即可。Xcode会为我们自动创建好入口文件,我们只要在相应函数里填上响应代码就可以了。

    如下图:

    这里讨论使用cocoapods的工程使用Extension会遇到的三个问题。

    问题一:如何为Extension这个target添加pod?

    答:就把这个target当成普通的target一样,在每个target里写指定的pod。不需要就直接省略。

    target 'testExtension' do

    pod 'ReactiveCocoa','2.4.7''

    end

    target 'NotificationService' do

    pod 'SDWebImage'

    end

    问题二:为什么明明没有为Extension那个target添加pod,编译却报错说缺少其他target指定的lib?(如下图,是我在实际项目中run extension target时的报错,而我并没有为此target指定过这个pod,这是其他target下指定的一个pod)

    答:经过一番排查,我发现因为我们的项目是这样的,一个project下有多个target app,每一个都调用相同文件,只有info.plist会有些参数差别,所以每个target需要的pod也都是一样的。为此,我们写了个project的xcconfig文件,在里面引入了主工程的pod config文件并指定了一些参数,以便让同一个project下的所有target都使用同一批pod,这样一来就影响到了extension那个target。

    下图里可以看到project和target的配置文件从属关系。project xcconfig指定了pod配置,会影响它下面的所有target,而pod file里我们没有给NotificationService这个target写上配置里的那些pod,那就会出现上面的报错。

    如果你也遇到类似的问题,可以看下project下的类似“公用配置”,基本就能解决了~

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

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

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

    但是,很多很多第三方库都会调用到[UIApplication sharedApplication],怎么解决呢?看下图:

    pods工程下的所有targets的Require Only AppExtension-Safe API参数默认是YES,我们需要把它设置为NO,但是不要手动去改哦,不是会累死你,而是因为每次执行一次pod install,这参数还是会变回默认值的,真正的解决方案是:在podfile文件里设置该参数。

    post_install do |installer_representation|         installer_representation.pods_project.targets.each do |target|                 target.build_configurations.each do |config|                         config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'] = '8.0'                         config.build_settings['SDKROOT'] = 'iphoneos10.3'                         config.build_settings['APPLICATION_EXTENSION_API_ONLY'] = 'NO'

            end

        end

    end

    相关文章

      网友评论

        本文标题:cocoapods工程使用插件App Extension

        本文链接:https://www.haomeiwen.com/subject/ckcqjxtx.html