Swift框架取决于cocoa豆荚
使用最新版本的cocoa豆荚(0.36),我可以将用swift编写的cocoa豆荚(例如Alamofire)embedded到我的swift项目中。 现在我介绍了一个我自己的定制框架,也希望依靠Alamofire。
我所做的是为了做到这一点是select添加框架作为依赖我的框架:
为我自己的embedded式Swift框架(Swift模块)select目标,并在“链接的框架和库”的“常规”选项卡中添加“Pods.framework”为“必需”。
然而,这是不够的,因为我自己的快速框架中的类不能被认为是“可用的框架”,因此不能“导入Alamofire”。
将Pods.debug.xcconfig和Pods.release.xcconfig文件添加到我自己的swift框架的目标的configuration中,换句话说就是改变生成设置来完成所有的更改,cocoa豆做到我的生成设置iOS应用的目标,解决了这个问题。
现在build立没有问题。 它也在Simulator中没有问题,我自己的embedded式Swift框架成功地使用了cocoa豆荚添加的框架。
但是,如果我在设备上运行相同的程序,它会编译和安装没有问题,但在启动时发生致命错误崩溃:
dyld: Library not loaded: @rpath/Pods.framework/Pods Referenced from: /private/var/mobile/Containers/Bundle/Application/32D2F1F8-679F-4A5F-8159-28F1C800D0C6/TestingFrameworks.app/Frameworks/mySwiftFramework.framework/mySwiftFramework Reason: image not found
显然不是来自cocoa豆荚xcconfig文件的所有设置都适合添加到我的自定义swift框架的构build设置。
但是为什么它在模拟器中工作呢? 更重要的是什么是构build设置,我需要纠正?
对我来说,它看起来像我需要改变这种构build设置:
PODS_FRAMEWORK_BUILD_PATH = $(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/Pods
别的东西
我确定了这个问题。 embedded式框架的框架/文件夹中没有pods.framework。
这是由于Pods-frameworks.sh实际上并没有在正确的目录中复制内容。
我设法解决这个问题:
- 从构build阶段删除无用的Embed Pods框架
- 添加目标设置为“框架”的复制文件
而已!
对于像我这样的新手来说,问题中的这一部分可能会让你感到困惑:
将Pods.debug.xcconfig和Pods.release.xcconfig文件添加到我自己的swift框架的目标的configuration中,换句话说就是改变生成设置来完成所有的更改,cocoa豆做到我的生成设置iOS应用的目标,解决了这个问题。
去做这个:
-
在您的自定义embedded式框架的Xcode项目中,单击
File
>New
>File...
>iOS
>Other
>Configuration Settings File
。 -
做以上两次。 您可以分别命名文件
Pods.release.xcconfig
和Pods.debug.xcconfig
。 -
在项目导航器中,展开“
Pods
Xcode”项目>“Target Support Files
>“Pods
。 你会看到那里有类似的.xcconfig
文件。 只需将其内容复制到自定义embedded式Swift框架内的同名文件即可。 -
点击你的Swift框架的Xcode项目文件,select项目目标 (蓝色的,不是黄色的工具箱)>
Info
>Configurations
。 -
展开
Debug
和Release
configuration。 您可能会在您的Xcode项目(主要框架目标)和testing目标下看到两个目标。 在“基于configuration文件”列中,将主目标上的configuration文件设置为先前创build的Pods.debug
和Pods.release
文件。
然后做@Pasta的答案 。
UPDATE
如果您将自定义embedded式Swift框架与其他项目一起使用,则此设置将会中断,因为其他项目具有不同的.xcconfig
设置(Pods的.framework
也可能以不同的名称命名)。
我采取了在我的框架内添加Alamofire作为git submodule。 注意:使用git submodule
方式要求您将自定义框架添加到主项目的Embedded Frameworks
以及定制框架内的Alamofire.framework
。