将Cocoapods与App Extension一起使用

Dan*_*ore 80 cocoapods swift ios8 ios-app-extension xcode6-beta6

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

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

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

但对于GPUImage,它走进GPUImage.h标题并决定它突然看不到,GPUImageContext.h尽管没有问题,当导入时使用桥接标头作为不属于应用程序扩展的普通swift代码.

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

注意:我已经阅读了本教程的所有可能的排列,并且它不能立即应用,以防万一有人认为他们已经找到答案.

此外,此SO问题中描述的问题可能是相关的,但我仍然问这个问题,以防我的问题特定于应用扩展程序.

Dan*_*ore 85

编辑(2015/03/10)

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


成功.

解决方案如下:一旦你有了你的应用程序扩展,并且它在使用cocoapods的项目中桥接头,并且你想使用其中一个cocoapods库,尝试包含pod #import <GPUImage/GPUImage.h>就会失败file not found.

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

接下来,在您的实际项目中(单击您的项目文件,然后在Info选项卡下的内侧栏的"Project"部分再次在项目文件上),设置要使用的Debug,Release和Inhouse扩展的配置下拉列表中的"Pods"配置.Pod Install不会为您执行此操作,因此您需要自己执行此操作.

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

应该工作,并允许您像平常一样导入您选择的pod.


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

  • 我还必须在扩展构建设置中为OTHER_LD_FLAGS添加$(继承). (3认同)

wyz*_*207 67

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

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

target '[Extension Target Name]' do
        pod ...
end
Run Code Online (Sandbox Code Playgroud)

然后一个pod install人会这样做!

  • 最佳答案.这样我就不会用不需要的Pod重载我的iOS扩展 (2认同)

小智 66

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

link_with 'yourApp', 'yourAppExtension'
Run Code Online (Sandbox Code Playgroud)

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

  • 正如@Sti所说,这不再有效并返回错误消息"无效`Podfile`文件:[!]现在不支持Podfile中`link_with`的规范,请改用目标块." (6认同)
  • 在pod文件中我应该添加那些行? (5认同)
  • 现在不支持 Podfile 中的 `link_with` 规范,请改用目标块.. 此解决方案已弃用。 (3认同)
  • 正确!我不敢相信我没有找到这个. (2认同)