Swift 将Cocoapods与应用程序扩展一起使用

Swift 将Cocoapods与应用程序扩展一起使用,swift,ios8,cocoapods,ios-app-extension,xcode6-beta6,Swift,Ios8,Cocoapods,Ios App Extension,Xcode6 Beta6,我正试图在Xcode 6 Beta-6中构建一个使用cocoapods库的照片应用程序扩展。 Xcode为photo扩展创建的桥接头无法从CoCoapod中看到任何内容 例如:#导入导致错误“GPUImage/GPUImage.h”文件未找到 我尝试了所有可以想到的导入方法(带括号和引号),但几乎没有成功。例外情况是,对于像SVProgressHUD这样的简单pod,以下丑陋可怕的黑客攻击有效: #导入“./Pods/SVProgressHUD/SVProgressHUD/SVProgressH

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

例如:
#导入
导致错误
“GPUImage/GPUImage.h”文件未找到

我尝试了所有可以想到的导入方法(带括号和引号),但几乎没有成功。例外情况是,对于像
SVProgressHUD
这样的简单pod,以下丑陋可怕的黑客攻击有效:
#导入“./Pods/SVProgressHUD/SVProgressHUD/SVProgressHUD.h”

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

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

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

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

编辑(2015/03/10)

见新的公认答案。我在一个新项目中尝试了它,它成功了,尽管我的测试吊舱都使用了sharedApplication,这在扩展中是不允许的。事实上,他们显示了这些错误,这意味着它连接正确。干得好@LeChatNoir


成功

解决办法如下: 一旦你有了你的应用程序扩展,并且它是使用cocoapods的项目中的桥接头,并且你想使用这些cocoapods库中的一个,尝试包含类似于
#导入
的pod将失败,并且
文件找不到

首先,确保您告诉应用程序扩展名(单击项目文件,然后单击扩展名目标)链接到
libPods.a
,这与您的应用程序目标非常相似

接下来,在实际项目中(单击项目文件,然后再次单击内部侧栏“项目”部分中的项目文件),在“信息”选项卡下,设置用于调试、发布和内部的扩展配置,以使用下拉列表中的“Pods”配置。Pod安装不会为您执行此操作,因此您需要自己执行此操作

最后,确保Pods项目的目标和您的项目的目标在有效的architectures变量中都有您需要构建的所有体系结构,否则您将得到一个有趣的undefined symbols错误

这应该可以工作,并允许您像正常情况一样导入您选择的吊舱



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

正确的方法是更新POD文件,只添加一行:

link_with 'yourApp', 'yourAppExtension'

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

上面的答案可以解决问题,但我的扩展名中只需要几个pod,所以我对我的pod文件做了以下操作:

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

target '[Extension Target Name]' do
        pod ...
end
然后安装一个
pod
就可以了

链接到,您将不再使用它。


无效的
Podfile
file:[!]中的
link\u与
的规范 Podfile现在不受支持,请改用目标块

下面是完美的answe,也经过测试

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

我已经完成了所有步骤。。但是有问题。。架构armv7的未定义符号:“\u OBJC\u CLASS\u$\u Location”,引用自:TodayViewController.o中的OBJC CLASS ref,请帮助我。如何解决iti有导入“Location.h”文件和使用+类方法在今天的扩展。。。然后我将得到上述问题。您是否确保该文件也是扩展目标的成员?还要检查您正在构建的架构是否正确。我已经检查了架构是否正确。但如果不是扩展目标的成员,则为文件。但我不能使用应用程序中已经存在的文件吗?我还必须在扩展构建设置中为其他\u LD\u标志添加$(继承的)。这是适合我的解决方案[Cocopoads也适用于小部件(或目标)][1][1]:正确!我不敢相信我没有找到这个。什么是“youAppExtension”部分?我应该在pod文件中的何处添加这些行?正如@Sti所说,这不再有效,并返回错误消息“无效的
Podfile
file:[!]现在不支持Podfile中的
link\u with
的规范,请改用目标块…”Podfile中的
link_with
的规范现在不受支持,请改用目标块。。此解决方案已弃用。最佳答案。这样我就不会用不必要的PodsAwesome使iOS扩展过载!谢谢这是一个完美的答案。由于xcode错误:Podfile中的
link\u with
规范现在不受支持,请改用目标块..我删除了use\u Framworks,然后再次出现此错误您面临的错误类型是什么?