Swift框架取决于可可豆荚

时间:2015-03-18 15:59:27

标签: ios swift cocoapods

使用最新版本的可可豆荚(0.36)我能够将用swift(例如Alamofire)编写的可可豆荚嵌入我的快速项目中。 现在我在项目中引入了我自己的自定义框架,该框架也希望依赖于Alamofire。

为了实现这一点,我所做的是选择将pods框架作为依赖项添加到我的框架中:

为我自己的嵌入式Swift框架(Swift模块)和" General"选择目标。 "链接框架和库中的选项卡"我添加了#34; Pods.framework" as"必需"。

然而,这还不足以编译,因为我自己的swift框架中的类不能导入Alamofire"因为它不被认为是可用的框架"。

将Pods.debug.xcconfig和Pods.release.xcconfig文件添加到我自己的swift框架目标的配置中,换句话说,更改构建设置以执行所有更改,可可豆荚对构建进行更改我的iOS App目标的设置解决了这个问题。

它现在构建没有问题。它在模拟器中也没有问题,我自己的嵌入式swift框架成功地使用了可可豆荚添加的框架。

但是,如果我在设备上运行相同的程序,它会毫无问题地进行编译和安装,但在启动时会出现致命错误:

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 pods xcconfig文件中的所有设置都不适合添加到我的自定义swift框架的构建设置中。

但为什么它在模拟器中工作呢?更重要的是构建设置是什么,我需要纠正?

对我而言,我似乎需要更改此构建设置:

PODS_FRAMEWORK_BUILD_PATH = $(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/Pods

到别的地方......

3 个答案:

答案 0 :(得分:28)

我发现了问题。 嵌入式框架的Frameworks /文件夹中根本没有pods.framework。

这是因为Pods-frameworks.sh实际上没有在正确的目录中复制内容。

我设法解决了这个问题:

  1. 从构建阶段删除无用的Embed Pods框架
  2. 添加目标设置为Frameworks的复制文件
  3. enter image description here

    那就是它!

答案 1 :(得分:5)

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

  

将Pods.debug.xcconfig和Pods.release.xcconfig文件添加到我自己的swift框架目标的配置中,换句话说,更改构建设置以执行所有更改,可可豆荚对构建进行更改我的iOS App目标的设置解决了这个问题。

要做到这一点:

  1. 在自定义嵌入式框架的Xcode项目中,点击File> New> File...> iOS> Other> Configuration Settings File

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

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

  4. 单击您的Swift框架的Xcode项目文件,选择项目目标(蓝色项目,而不是黄色工具箱项目)> Info> Configurations

  5. 展开DebugRelease配置。您可能会在Xcode项目下看到两个目标 - 主框架目标和测试目标。在“基于配置文件”列中,将主目标上的配置文件设置为您先前创建的Pods.debugPods.release文件。

  6. enter image description here

    然后执行 @Pasta answer

    更新

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

    我只是在我的框架中添加了Alamofire作为git子模块。 注意:git submodule方式进行操作需要您将自定义框架添加到主项目Embedded Frameworks,以及里面的Alamofire.framework 您的自定义框架。

答案 2 :(得分:1)

非常感谢分享@Pasta和@Matt Quiros,它解决了我的问题。好的,我只想分享一下我的案例,希望这会有所帮助。

开发环境

Xcode版本9.1(9B55)

部署iOS版本:10.0

<强>问题:

所以我正在开发一个名为&#39; MyProject&#39;我在哪里导入&#39;图表&#39;使用CocoaPod的库。同时,还有一个私人框架&#39; MyFramework&#39;导入&#39; MyProject&#39;。这里的问题是我想使用&#39; Charts&#39;在&#39; Myframework&#39;和Xcode一直告诉我&#39; Chart&#39;图书馆不明。

<强>解决方案:

我关闭了MyProject&#39;并打开了MyFrameWork&#39;和&#39;文件&#39; - &GT; &#39;新&#39; - &GT; &#39;文件...&#39 ;.创建两个配置文件并将它们放在&#39; * .xcodeproj&#39;的相同文件夹级别上。文件。一个配置文件被称为&#39; Pods-MyFramework.debug.xcconfig&#39;另一个名为&#39; Pods-MyFramework.release.xcconfig&#39;。 (文件名可以是任何东西,但我不确定文件的位置是否重要)。以下是磁盘和我的Xcode中的文件结构。

enter image description here

enter image description here

现在,关闭&#39; MyFramework&#39;项目和开放的MyProject&#39;项目,在我的Xcode中,文件结构如下所示。展开&#39; Pods&#39; &#39; MyProject&#39;下的文件夹水平。您将看到一些配置文件,将其内容复制到您刚刚在&#39; MyFramework&#39;中创建的配置文件中。 project,debug.config - &gt; debug.config,release.config - &gt;将release.config。

enter image description here

然后在一个&#39; MyViewController&#39;在&#39; MyFramewwork&#39;中,我添加了&#39;导入图表&#39;并且只是想尝试模拟器并且它......通过了。是啊!然后我在同一个VC中添加了一些代码来创建条形图并在真实设备上成功运行并且条形图显示在屏幕上。然后我尝试了最后一步@Pasta提到添加&#39;复制文件&#39;选择了“MyProject&#39;的构建阶段”,它也在真实设备上成功运行。我再次删除它仍然有效。