84

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

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

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

但是对于 GPUImage,它会进入GPUImage.h标题并决定它突然无法看到GPUImageContext.h,尽管当它与不属于应用程序扩展的正常 swift 代码的桥接头一起导入时没有问题。

阻止桥接头正常运行的应用程序扩展的编译有什么不同?

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

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

4

4 回答 4

85

编辑 (2015/03/10)

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


成功。

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

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

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

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

应该可以工作,并允许您像往常一样导入您选择的 pod。


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

于 2014-08-28T18:20:33.017 回答
74

上面的答案会起作用,但我只想要我的扩展中的几个 pod,所以我对我的 Podfile 做了以下操作:

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

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

然后一个pod install会做的!

于 2015-08-13T13:08:37.813 回答
65

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

link_with 'yourApp', 'yourAppExtension'

并且 pod 更新应该可以解决这个问题。

于 2015-03-07T16:32:54.520 回答
4

在此处输入图像描述

link_with,你将不再使用它。

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

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

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
于 2017-09-20T08:04:39.487 回答