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实际上并没有在正确的目录中复制内容。

我设法解决这个问题:

  1. 从构build阶段删除无用的Embed Pods框架
  2. 添加目标设置为“框架”的复制文件

在这里输入图像说明

而已!

对于像我这样的新手来说,问题中的这一部分可能会让你感到困惑:

将Pods.debug.xcconfig和Pods.release.xcconfig文件添加到我自己的swift框架的目标的configuration中,换句话说就是改变生成设置来完成所有的更改,cocoa豆做到我的生成设置iOS应用的目标,解决了这个问题。

去做这个:

  1. 在您的自定义embedded式框架的Xcode项目中,单击File > New > File... > iOS > Other > Configuration Settings File

  2. 做以上两次。 您可以分别命名文件Pods.release.xcconfigPods.debug.xcconfig

  3. 在项目导航器中,展开“ Pods Xcode”项目>“ Target Support Files >“ Pods 。 你会看到那里有类似的.xcconfig文件。 只需将其内容复制到自定义embedded式Swift框架内的同名文件即可。

  4. 点击你的Swift框架的Xcode项目文件,select项目目标 (蓝色的,不是黄色的工具箱)> Info > Configurations

  5. 展开DebugReleaseconfiguration。 您可能会在您的Xcode项目(主要框架目标)和testing目标下看到两个目标。 在“基于configuration文件”列中,将主目标上的configuration文件设置为先前创build的Pods.debugPods.release文件。

在这里输入图像说明

然后做@Pasta的答案 。

UPDATE

如果您将自定义embedded式Swift框架与其他项目一起使用,则此设置将会中断,因为其他项目具有不同的.xcconfig设置(Pods的.framework也可能以不同的名称命名)。

我采取了在我的框架内添加Alamofire作为git submodule。 注意:使用git submodule方式要求您将自定义框架添加到主项目的Embedded Frameworks以及定制框架Alamofire.framework