与应用程序扩展使用Cocoapods
我正试图在使用cocoapods库的Xcode 6 Beta-6中构build一个照片应用程序扩展。 Xcode为照片扩展创build的桥接标题不能从cocoapods中看到任何东西。
例如: #import <GPUImage/GPUImage.h>
导致"GPUImage/GPUImage.h" file not found
错误"GPUImage/GPUImage.h" file not found
。
我已经尝试了所有可能的导入path(括号和引号),几乎没有成功。 SVProgressHUD
这样简单的豆荚的例外是下面的丑陋可怕的黑客工作: #import "../Pods/SVProgressHUD/SVProgressHUD/SVProgressHUD.h"
。
但是,对于GPUImage,它走进GPUImage.h
头文件,并决定它突然看不到GPUImageContext.h
尽pipe没有问题,当这是导入与正常的swift代码不是应用程序扩展的一部分的桥接头。
应用程序扩展的编译有什么不同,以防止桥接头行为正常?
注:我已经阅读了本教程的每一个可能的组合,并不是立即适用,以防万一有人认为他们在那里find了答案。
另外, 这个SO问题中描述的问题可能是相关的,但我仍然问这个问题,以防我的问题是特定于应用程序扩展。
这样做的正确方法是更新您的podfile只添加1行:
link_with 'yourApp', 'yourAppExtension'
并且一个pod更新应该可以解决这个问题。
编辑(2015/03/10)
查看新的接受的答案。 我尝试了一个新的项目,它的工作,虽然我的testing豆荚都使用共享应用程序是不允许的扩展。 他们显示这些错误的事实意味着它正确地链接。 路要走@LeChatNoir!
成功。
解决scheme如下:一旦你有你的应用程序扩展,并使用cocoapods在项目中桥接头,并且你想使用其中一个cocoapods库,试图包含像#import <GPUImage/GPUImage.h>
的pod将失败file not found
。
首先,请确保您告诉应用程序扩展(单击您的项目文件,然后在扩展目标上)以链接到libPods.a
,非常类似于您的应用程序目标。
接下来,在您的实际项目中(单击您的项目文件,然后再次在内侧栏的“项目”部分中的项目文件)在信息选项卡下,设置扩展的configurationdebugging,发布和内部使用下拉菜单中的“Pods”configuration。 Pod Install不会为你做这个,所以你需要自己做。
最后,确保Pods项目的目标和项目的目标都具有您需要在有效体系结构variables中构build的所有体系结构,否则您将获得无穷无尽的未定义符号错误。
这应该工作,并允许你像正常导入你select的豆荚。
编辑(2014/10/14):另外,因为你也可能在Swift扩展中包含你自己的项目代码中的Objective-C文件,所以你应该确保你放入桥接头的任何.m
文件是也是由扩展目标编译的。 您可以从目标的编译源菜单或.m
文件本身使用Xcode中右侧边栏的“目标成员”部分执行此操作。
上面的答案是可行的,但是我只想在我的扩展中使用几个豆荚,所以我对Podfile做了以下操作:
target '[Main App Target Name]' do pod ... pod ... pod ... end target '[Extension Target Name]' do pod ... end
然后一个pod install
将做到这一点!
link_with,你将不会再使用它了。
无效的
Podfile
文件:[!]link_with
中的link_with规范现在不受支持,请使用目标块代替。
下面是完美的答案,也testing过。
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