“development pods”在Carthage下的等效物是什么?

10

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

在Cocoapods下,我可以将依赖项设置为“development pods”。例如,我可以将xyzzy设置为开发pod,并将其指向我本地目录中从Git库检出的xyzzy而非主应用程序下载的特定版本。当我在主应用程序项目中工作时,我对xyzzy文件所做的任何编辑都将在该目录中进行。 这使我能够立即构建和测试更改,并且当我准备好提交更改时,Git会在xyzzy项目的目录中找到它们。

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

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


已提供了成功实现http://allocinit.io/ios/debugging-carthage-dependencies/中介绍的解决方案的摘要。对我有效:] - George
如何设置Carthage以使用我自己的在私有仓库中的框架? - George
3个回答

5

我相信Carthage目前还没有类似于“开发pods”的功能。

但是,只需按照以下步骤模拟“开发pods”:

步骤:

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

就这样。

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


1
搞定了!非常感谢!只是需要注意的是,在我的项目中,对于第二步,我必须从“Build Phases / Run Script / Input Files”部分中删除依赖框架,以便进行“carthage copy-frameworks”。 - Brian Kendig
2
另外,我刚刚通过艰难的方式学到的一课是:确保将步骤2-3应用于每个构建目标。否则,如果您切换到一个不需要更改构建设置的不同目标,则您正在查看的代码将不是正在运行的代码。 - Brian Kendig

0

对我来说,这与开发Pod一样有效,Xcode 8.3.3和Carthage 0.24.0都可以实现:

  1. 在应用程序路径中,rm -rf Carthage
  2. 指向Cartfile中适当的分支或标记
  3. carthage update --use-submodules(生成.gitmodules并将repo克隆到Carthage/Checkouts
  4. 在Xcode下的项目 -> Build Phases -> Run Script中,如果有carthage update --cache-builds,请将其注释掉。
  5. 切换到常规选项卡并从嵌入式二进制文件中删除lib
  6. 右键单击项目,将文件添加到应用程序...,从Carthage/Checkouts添加lib
  7. 在项目 -> 常规 中重新添加库,选择上一个步骤中添加的库。

应用现在应该使用本地库进行构建。 确保您的.gitignore包括Carthage/{Build,Checkouts}.gitmodules


这将清除您所有的Carthage依赖项,大多数情况下,人们只想在“开发模式”下拥有1个或几个pods。使用CocoaPods,您可以为各个pods指定本地路径。 - Gobe
哎呀!你说得完全正确。我在那个项目中仍然只有一个Carthage库,没有考虑到这一点。 - Toerndev

0

这篇答案是对这里提出的解决方案的一个成功实现的总结。

一种更简洁的解决方案是在Cartfile中使用本地路径来处理依赖项

环境

  • Xcode 10.1
  • macOS 10.13.6

步骤1. 符号链接

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

此链接使您的开发框架可以进行版本控制的更改。

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

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

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

此链接使得您可以从开发框架和主应用程序中访问由Carthage构建的所有框架。

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

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

第二步. 替换框架

2.1Xcode > 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)指向的目录中找到)

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

2.4Xcode > YOUR_MAIN_APP > General > Linked Frameworks and Libraries中添加Xcode自动检测到的新开发框架。

2.5Xcode > YOUR_MAIN_APP > Build Phases > Target Dependencies 中添加$(DEVELOPING_FRAMEWORK_NAME).framework作为目标依赖项。

2.6 通过在 Xcode > YOUR_MAIN_APP > Build Phases > Run Script of Carthage Embed Framework 中添加新的输入文件 $(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

参考资料

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接