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" 只需按照以下步骤操作:
步骤:
- 将 .xcodeproj 添加到您的工作区
- 删除项目中您在步骤 1 中添加的框架的所有依赖项。(可能您可能还需要从
Build Phases -> Run Script -> Input Files
中删除它)
- 转到您想要 运行 的目标的
General
选项卡,在 Linked Frameworks and Libraries
下添加框架(它将采用从 .xcoproj 添加的框架)
- (可选)您可能需要 运行
carthage bootstrap
在要在本地添加的框架的回购中。
就是这样。
之后您将能够运行您的项目并在同一个工作区中更新框架的代码。
从 Xcode 8.3.3 和迦太基 0.24.0 开始,这对我来说和开发 pods 一样有效:
- 在应用程序路径中,
rm -rf Carthage
- 指向
Cartfile
中适当的分支或标记
carthage update --use-submodules
(生成 .gitmodules
并将 repo 克隆到 Carthage/Checkouts
)
- 在 Xcode 下的项目 -> 构建阶段 -> 运行 脚本中,注释掉以
carthage update --cache-builds
结尾的行(如果存在)。
- 更改到“常规”选项卡并从嵌入式二进制文件中删除库
- 右键单击项目,将文件添加到应用程序...,从
Carthage/Checkouts
添加库
- 在项目->常规下,重新添加库,选择您在上一步中添加的库。
应用程序现在应该使用本地库构建。确保您的 .gitignore
有 Carthage/{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.4 在Xcode > 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
为我们的 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" 只需按照以下步骤操作:
步骤:
- 将 .xcodeproj 添加到您的工作区
- 删除项目中您在步骤 1 中添加的框架的所有依赖项。(可能您可能还需要从
Build Phases -> Run Script -> Input Files
中删除它) - 转到您想要 运行 的目标的
General
选项卡,在Linked Frameworks and Libraries
下添加框架(它将采用从 .xcoproj 添加的框架) - (可选)您可能需要 运行
carthage bootstrap
在要在本地添加的框架的回购中。
就是这样。
之后您将能够运行您的项目并在同一个工作区中更新框架的代码。
从 Xcode 8.3.3 和迦太基 0.24.0 开始,这对我来说和开发 pods 一样有效:
- 在应用程序路径中,
rm -rf Carthage
- 指向
Cartfile
中适当的分支或标记
carthage update --use-submodules
(生成.gitmodules
并将 repo 克隆到Carthage/Checkouts
)- 在 Xcode 下的项目 -> 构建阶段 -> 运行 脚本中,注释掉以
carthage update --cache-builds
结尾的行(如果存在)。 - 更改到“常规”选项卡并从嵌入式二进制文件中删除库
- 右键单击项目,将文件添加到应用程序...,从
Carthage/Checkouts
添加库
- 在项目->常规下,重新添加库,选择您在上一步中添加的库。
应用程序现在应该使用本地库构建。确保您的 .gitignore
有 Carthage/{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.4 在Xcode > YOUR_MAIN_APP > General > Linked Frameworks and Libraries
.
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