11

我正在将我的 iOS 应用程序的 Firebase 依赖项从 CocoaPods 转移到 Swift 包管理器。

Firebase 的 Crashlytics 需要在构建应用程序时执行脚本(使用运行脚本构建阶段)。回到 CocoaPods 时代,我曾经以Google 记录的方式调用脚本:"${PODS_ROOT}/FirebaseCrashlytics/run".

在我切换到 SPM 后,Firebase 文件不再存在${PODS_ROOT},并且根本没有这样的变量可用。我知道我需要的文件现在位于DerivedData文件夹中,特别是位于~/Library/Developer/Xcode/DerivedData/MyApp-abcde/SourcePackages/checkouts/firebase-ios-sdk/Crashlytics/run. 问题是,MyApp-abcde文件夹不容易被引用。

我发现的一篇 Medium 帖子建议使用${BUILD_DIR}build 变量(关于上面的示例,它会解析为<…&gt;/MyApp-abcde/Build/Products),并调用该dirname命令来向上移动目录层次结构。

此 hack 仅适用于运行应用程序。当我试图归档它时,${BUILD_DIR}解析到另一条路径,即<…&gt;/MyApp-abcde/Build/Intermediates.noindex/ArchiveIntermediates/MyApp/BuildProductsPath. 我尝试了更多的构建变量,例如${SYMROOT}, 代替${BUILD_DIR},但它们也会根据操作产生不同的路径。

那么,问题来了……</p>

有没有办法使用 Xcode 的构建变量可靠地引用我的应用程序的派生数据文件夹的根(即~/Library/Developer/Xcode/DerivedData/MyApp-abcde) ?

4

3 回答 3

10

你很亲密。这应该有效:

${BUILD_DIR%Build/*}SourcePackages/checkouts/firebase-ios-sdk/Crashlytics/run
于 2020-12-22T14:43:09.610 回答
1

Crashlytics 运行脚本

从 Xcode 构建和运行:

${BUILD_DIR%Build/*}SourcePackages/checkouts/firebase-ios-sdk/Crashlytics/run

要从 CI/CD 上的 Xcode Server 归档以进行分发:

${XCS_DERIVED_DATA_DIR%/*}/Dependencies/checkouts/firebase-ios-sdk/Crashlytics/run

同时为两者工作:

if [[ "${XCS_DERIVED_DATA_DIR}" == "" ]]; then
  ${BUILD_DIR%Build/*}SourcePackages/checkouts/firebase-ios-sdk/Crashlytics/run
else
  ${XCS_DERIVED_DATA_DIR%/*}/Dependencies/checkouts/firebase-ios-sdk/Crashlytics/run
fi
于 2021-10-25T19:37:00.803 回答
0

我正在修改我的答案,因为我意识到我没有回答你的问题..

我有一个运行脚本,将构建目标复制到一个新文件夹中。这适用于构建和存档。请注意,您需要 -L 在副本上遵循符号链接

# Copy the built framework into a sibling to the project folder
if [[ "$CONFIGURATION" == "Debug" ]]; then
  mkdir -p "$PROJECT_DIR/../../iwins-ios-sdk/debug"
  rm -rf "$PROJECT_DIR/../../iwins-ios-sdk/debug/IWiNS_SDK.framework"
  cp -LR "$BUILD_DIR/Debug-iphoneos/IWiNS_SDK.framework" "$PROJECT_DIR/../../iwins-ios-sdk/debug"
else
  mkdir -p "$PROJECT_DIR/../../iwins-ios-sdk/release"
  rm -rf "$PROJECT_DIR/../../iwins-ios-sdk/release/IWiNS_SDK.framework"
  cp -LR "$BUILD_DIR/Release-iphoneos/IWiNS_SDK.framework" "$PROJECT_DIR/../../iwins-ios-sdk/release"
fi

此外,您可以在此处找到所有构建环境变量: https ://gist.github.com/gdavis/6670468

因此,看起来 $BUILD_DIR 对于构建/发布来说是不同的,但是通过在构建时将文件复制到已知位置,您将知道在哪里可以找到它们。

于 2020-11-09T22:28:55.887 回答