如何访问我的应用程序的派生数据文件夹本身?

15

我正在将我的iOS应用程序的Firebase依赖项从CocoaPods迁移到Swift Package Manager。

Firebase的Crashlytics需要在构建应用程序时执行脚本(使用“Run Script”构建阶段)。在CocoaPods时代,我通常按照谷歌文档中所述的方式调用该脚本:"${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}构建变量(针对上面的示例,它将解析为<…>/MyApp-abcde/Build/Products),并调用dirname命令向上移动目录层次结构。

这种方法仅适用于运行应用程序。当我尝试将其存档时,${BUILD_DIR}解析为另一个路径,即<…>/MyApp-abcde/Build/Intermediates.noindex/ArchiveIntermediates/MyApp/BuildProductsPath。我尝试了一些构建变量,例如用${SYMROOT}替换${BUILD_DIR},但它们根据操作也会产生不同的路径。

那么问题来了...

是否有一种可靠的方法使用Xcode的构建变量来引用我的应用程序的派生数据文件夹的根目录(即~/Library/Developer/Xcode/DerivedData/MyApp-abcde)?

3个回答

15

你很接近了。这个应该可以解决:

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

1
你提供的路径似乎适用于“运行”和“归档”操作。非常感谢! - Yakov Manshin
对于 Xcode Server Bots(Xcode 12.4 时代),请使用:${XCS_DERIVED_DATA_DIR%/*}/Dependencies/checkouts - RobLabs

1

Crashlytics运行脚本

在Xcode中构建和运行:

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

要从CI/CD的Xcode服务器归档以进行分发:

${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

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 显然是不同的,但通过在构建时将文件复制到已知位置,您就知道如何找到它们。


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