【问题标题】:What's the equivalent of "development pods" under Carthage?Carthage 下的“开发舱”相当于什么?
【发布时间】:2017-12-17 10:29:57
【问题描述】:

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

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

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

如何在 Carthage 下设置等效的开发 pod?

【问题讨论】:

标签: ios cocoapods carthage


【解决方案1】:

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

更干净的解决方案是using local paths for dependencies in 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. 框架替换

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,将$(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

【讨论】:

    【解决方案2】:

    这对我来说和开发 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 下的项目 -> 构建阶段 -> 运行脚本中,注释掉以 carthage update --cache-builds 结尾的行(如果存在)。
    5. 切换到常规选项卡并从嵌入式二进制文件中删除 lib
    6. 右键单击项目,将文件添加到应用程序...,从Carthage/Checkouts 添加库
    7. 在项目 -> 常规下,重新添加库,选择您在上一步中添加的库。

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

    【讨论】:

    • 这将清除 所有 您的 Carthage 依赖项,在“开发模式”下,您很可能只想拥有 1 个或几个 pod。使用 CocoaPods,您可以指定单个 pod 的本地路径。
    • 糟糕!你完全正确。我在那个项目中仍然只有 1 个 Carthage 库并且没有考虑这一点。
    【解决方案3】:

    我相信 Carthage还没有类似于“开发 pod”的东西。

    但您可以按照以下步骤模拟“开发 pod”:

    步骤:

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

    就是这样。

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

    【讨论】:

    • 做到了!非常感谢!请注意 - 对于第 2 步,在我的项目中,我必须从 carthage copy-frameworks 的 Build Phases / Run Script / Input Files 部分中删除依赖项的框架。
    • 另外,我刚刚学到了一个教训:确保将步骤 2-3 应用于每个构建目标。否则,如果您切换到未更改构建设置的其他目标,您正在查看的代码将不是正在运行的代码。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-05-15
    • 2012-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多