Carthage 下的 "development pods" 相当于什么?

What's the equivalent of "development pods" under Carthage?

为我们的 iOS 应用程序开发框架的团队正在从 Cocoapods 迁移到 Carthage。

在 Cocoapods 下,我可以将依赖项设置为 "development pods"。例如,我可以将 xyzzy 设置为开发 pod,并将其指向我已检出 [=11] 的本地目录,而不是让主应用程序下载特定版本的 xyzzy 依赖项=] 来自其 Git 回购协议。当我在主应用程序的项目中工作时,我对 xyzzy 的文件所做的任何编辑都将在该目录中进行。这让我可以立即构建和测试更改,当我准备好签入它们时,Git 会在 xyzzy 项目目录中找到它们。

在迦太基下,我还没有找到一种方法来做到这一点。我看到 http://allocinit.io/ios/debugging-carthage-dependencies/,它解释了如何创建符号链接,以便我可以看到依赖源文件以简化调试,但我对它们所做的任何编辑都在主应用程序的 Carthage/Builds 目录下。

如何在 Carthage 下设置相当于开发 pods?

我相信迦太基还没有类似于"development pods"的东西。

但是您可以模拟 "development pods" 只需按照以下步骤操作:

步骤:

  1. 将 .xcodeproj 添加到您的工作区
  2. 删除项目中您在步骤 1 中添加的框架的所有依赖项。(可能您可能还需要从 Build Phases -> Run Script -> Input Files 中删除它)
  3. 转到您想要 运行 的目标的 General 选项卡,在 Linked Frameworks and Libraries 下添加框架(它将采用从 .xcoproj 添加的框架)
  4. (可选)您可能需要 运行 carthage bootstrap 在要在本地添加的框架的回购中。

就是这样。

之后您将能够运行您的项目并在同一个工作区中更新框架的代码。

从 Xcode 8.3.3 和迦太基 0.24.0 开始,这对我来说和开发 pods 一样有效:

  1. 在应用程序路径中,rm -rf Carthage
  2. 指向 Cartfile
  3. 中适当的分支或标记
  4. carthage update --use-submodules(生成 .gitmodules 并将 repo 克隆到 Carthage/Checkouts
  5. 在 Xcode 下的项目 -> 构建阶段 -> 运行 脚本中,注释掉以 carthage update --cache-builds 结尾的行(如果存在)。
  6. 更改到“常规”选项卡并从嵌入式二进制文件中删除库
  7. 右键单击项目,将文件添加到应用程序...,从 Carthage/Checkouts
  8. 添加库
  9. 在项目->常规下,重新添加库,选择您在上一步中添加的库。

应用程序现在应该使用本地库构建。确保您的 .gitignoreCarthage/{Build,Checkouts}.gitmodules.

此答案是成功实施解决方案here的总结。

更简洁的解决方案是

环境

  • Xcode10.1
  • macOS 10.13.6

步骤 1. 符号 linking

1.1$(SRCROOT_MAIN)/Carthage/Checkouts/$(DEVELOPING_FRAMEWORK_NAME) 目录更改为指向开发框架 $(SRCROOT_DEVELOPING_FRAMEWORK) 的源根目录的符号 link,其中 $(SRCROOT_MAIN) 是您的主应用程序的源根目录。在此更改之前备份现有目录。

此 linking 支持在您的开发框架中进行版本控制的更改。

使用 ln 实用程序时的语法,

$ ln -s "$SRCROOT_DEVELOPING_FRAMEWORK" "$SRCROOT_MAIN/Carthage/Checkouts/$DEVELOPING_FRAMEWORK_NAME"

1.2 将框架中的 $(SRCROOT_DEVELOPING_FRAMEWORK)/Carthage/Build 目录更改为指向 $(SRCROOT_MAIN)/Carthage/Build 目录的符号 link。在此更改之前备份现有目录。

此 linking 允许从您的开发框架和主应用程序访问 Carthage 构建的所有框架。

使用 ln 实用程序时的语法,

$ ln -s "$SRCROOT_MAIN/Carthage/Build" "$SRCROOT_DEVELOPING_FRAMEWORK/Carthage/Build"

步骤 2. 框架更换

2.1 删除您在 Xcode > YOUR_MAIN_APP > General > Linked Frameworks and Libraries 中的开发框架(即位于 $(SRCROOT_MAIN)/Carthage/Build/iOS 中的框架)。

2.2$(DEVELOPING_FRAMEWORK_NAME).xcodeproj(在 $(SRCROOT_MAIN)/Carthage/Checkouts/$(DEVELOPING_FRAMEWORK_NAME) 符号 link 指向的目录中找到)添加到您的主应用程序

2.3 构建设备和模拟器的开发框架产品

2.4Xcode > YOUR_MAIN_APP > General > Linked Frameworks and Libraries.

中添加Xcode自动检测到的新开发框架

2.5 通过在 Xcode > YOUR_MAIN_APP > Build Phases > Target Dependencies.

中添加 $(DEVELOPING_FRAMEWORK_NAME).framework$(DEVELOPING_FRAMEWORK_NAME).framework 添加为目标依赖项

2.6 通过添加新的输入文件 $(BUILT_PRODUCTS_DIR)/$(DEVELOPING_FRAMEWORK_NAME).framework 和新的输出文件 $(BUILT_PRODUCTS_DIR)/$(FRAMEWORKS_FOLDER_PATH)/$(DEVELOPING_FRAMEWORK_NAME).framework$(BUILT_PRODUCTS_DIR)/$(DEVELOPING_FRAMEWORK_NAME).framework 复制到 $(BUILT_PRODUCTS_DIR)/$(FRAMEWORKS_FOLDER_PATH)/$(DEVELOPING_FRAMEWORK_NAME).framework Xcode > YOUR_MAIN_APP > Build Phases > Run Script of Carthage Embed Framework.

参考

Debugging Carthage Dependencies
https://allocinit.io/ios/debugging-carthage-dependencies/

Build Setting Reference
https://developer.apple.com/library/archive/documentation/DeveloperTools/Reference/XcodeBuildSettingRef/1-Build_Setting_Reference/build_setting_ref.html