这篇答案是对这里提出的解决方案的一个成功实现的总结。
一种更简洁的解决方案是在Cartfile中使用本地路径来处理依赖项。
环境
步骤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.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)
指向的目录中找到)
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
作为目标依赖项。
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