将Cocoapods与App Extension一起使用

时间:2014-08-27 23:38:15

标签: swift ios8 cocoapods ios-app-extension xcode6-beta6

我正在尝试使用cocoapods库在Xcode 6 Beta-6中构建照片App扩展。 Xcode为照片扩展程序创建的桥接标题无法从cocoapods中看到任何内容。

例如:#import <GPUImage/GPUImage.h>会导致错误"GPUImage/GPUImage.h" file not found

我已经尝试了所有可以想象的导入路径(带括号和引号)并且几乎没有成功。例外情况是,对于像SVProgressHUD这样的简单pod,以下丑陋可怕的黑客行为: #import "../Pods/SVProgressHUD/SVProgressHUD/SVProgressHUD.h"

但是对于GPUImage,它会进入GPUImage.h标头,并确定它突然看不到GPUImageContext.h尽管没有问题,但是当使用桥接标头导入普通的swift代码时没有问题应用扩展程序的一部分。

编译应用程序扩展有什么不同,这会阻止桥接标头表现得很好?

注意: 我已经阅读了this tutorial的所有可能的排列,并且它不会立即适用,以防万一有人认为他们已经找到答案。

此外,this SO question中描述的问题可能是相关的,但无论如何我都会问这个问题,以防我的问题特定于应用扩展程序。

4 个答案:

答案 0 :(得分:85)

编辑(2015/03/10)

查看新接受的答案。我在一个新项目中尝试了它并且它有效,尽管我的测试pod都使用了在扩展中不允许的sharedApplication。他们显示这些错误的事实意味着它正确地链接。走吧@LeChatNoir!


成功。

解决方案如下: 获得应用扩展程序并使用cocoapods在项目中桥接标题并且您想要使用其中一个cocoapods库时,尝试包含#import <GPUImage/GPUImage.h>之类的广告单元将失败并显示file not found

首先,请确保告诉应用扩展程序(点击您的项目文件,然后点击扩展目标)以链接libPods.a,就像您的应用目标一样。

接下来,在您的实际项目中(单击您的项目文件,然后在信息选项卡下的&#34;项目&#34;部分内侧边栏中再次点击项目文件),设置扩展的配置Debug,Release和Inhouse使用&#34; Pods&#34;从下拉列表中进行配置。 Pod Install不会为您执行此操作,因此您需要自己执行此操作。

最后,确保Pods项目的目标和项目的目标都包含您需要在Valid Architectures变量中构建的所有体系结构,否则您将获得有趣的未定义符号错误

有效,并允许您像平常一样导入您选择的播客。


EDIT(2014/10/14):顺便说一句,既然您可能在Swift扩展中包含自己项目代码中的Objective-C文件,那么您应该确保任何.m个文件放入桥接头也是由扩展目标编译的。您可以使用&#34; Target Membership&#34;从目标的编译源菜单或.m文件本身执行此操作。 Xcode右侧边栏的一部分。

答案 1 :(得分:67)

以上答案可行,但我只想在我的扩展程序中添加几个pod,所以我对我的Podfile执行了以下操作:

target '[Main App Target Name]' do
        pod ...
        pod ...
        pod ...
end

target '[Extension Target Name]' do
        pod ...
end

然后pod install会做到这一点!

答案 2 :(得分:66)

执行此操作的正确方法是更新podfile以仅添加1行:

link_with 'yourApp', 'yourAppExtension'

并且pod更新应解决此问题。

答案 3 :(得分:1)

enter image description here

link_with,您将不再使用它。

  

无效的Podfile文件:[!]中link_with的规范   现在不支持Podfile,请改用目标块..

以下是完美的回答,也经过测试。

source 'https://github.com/CocoaPods/Specs.git'
platform :ios, ‘9.0’
use_frameworks!
inhibit_all_warnings!

target 'DemoTodayWidget' do
    pod 'Reachability',                         '~> 3.2'
end

target 'My Widget' do
    pod 'Reachability',                         '~> 3.2'
end