在应用程序扩展中使用 Cocoapods

我正在尝试在 Xcode 6 Beta-6中构建一个使用 cocoapods 库的 photo 应用程序扩展。 Xcode 为照片扩展创建的桥接头不能从 cocoapods 看到任何东西。

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

我已经尝试了所有可能的导入路径(包括括号和引号) ,但几乎没有成功。唯一的例外是,对于像 SVProgressHUD这样的简单的豆荚,下面这个丑陋的可怕的黑客程序可以工作: #import "../Pods/SVProgressHUD/SVProgressHUD/SVProgressHUD.h".

但是对于 GPUImage 来说,它走进 GPUImage.h的头部,突然发现它看不到 GPUImageContext.h,尽管它没有遇到任何问题,因为这是用普通快捷代码的桥接头部导入的,而不是应用程序扩展的一部分。

编译应用程序扩展会阻碍桥接头的正常工作,这两者有什么不同?

注: 我已经阅读了 本教程的每一种可能的排列,它不是立即适用的,以防有人认为他们已经找到了答案。

此外,这个所以问题中描述的问题可能是相关的,但我还是问了这个问题,以防我的问题是针对应用程序扩展的。

29057 次浏览

编辑(2015/03/10)

见新的接受答案。我在一个新项目中试用了它,它起作用了,尽管我的测试吊舱都使用了扩展中不允许使用的共享应用程序。事实上,他们显示这些错误意味着它正确链接。干得好@LeChatNoir!


成功。

解决办法如下: 一旦你有了你的应用程序扩展,它的桥接头在一个项目中使用 cocoapods,你想使用这些 cocoapods 库之一,试图包含豆荚像 #import <GPUImage/GPUImage.h>将与 file not found失败。

首先,确保告诉应用程序扩展(单击项目文件,然后单击扩展目标)链接到 libPods.a,非常类似于应用程序目标。

接下来,在你的实际项目中(点击你的项目文件,然后在内侧边栏的“项目”部分再次点击项目文件) ,在 Info 选项卡下,设置 Debug,Release,and Inhouse 扩展的配置,使用下拉列表中的“ Pods”配置。Pod Install 不会为你做这些,所以你需要自己做。

最后,确保 Pods 项目的目标和您的项目的目标都具有您需要在 Valid Architecture 变量中构建的所有架构,否则您将得到有趣的未定义符号错误。

这个 应该的工作,并允许您导入您选择的豆荚喜欢正常。


编辑(2014/10/14) : 顺便说一句,因为你也可能在 Swift 扩展中包含自己项目代码中的 Objective-C 文件,所以你应该确保你放在桥接头中的任何 .m文件也是由扩展目标编译的。你可以从目标的编译源菜单或者使用 Xcode 右侧边栏的“目标成员”部分的 .m文件本身来完成这个操作。

正确的方法是更新 podfile,只添加一行:

link_with 'yourApp', 'yourAppExtension'

一个吊舱更新应该可以解决这个问题。

上面的答案会有用,但是我只想在我的扩展中添加几个 pods,所以我对我的 Podfile 做了以下操作:

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


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

然后一个 pod install就可以了!

enter image description here

Link _ with,您将不再使用它。

无效的 Podfile文件: [ ! ] 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