问题描述
我正在将iOS应用的Firebase依赖关系从CocoaPods转移到Swift Package Manager。
Firebase的Crashlytics要求在构建应用程序时执行脚本(使用“运行脚本”构建阶段)。在CocoaPods时代,我曾经用documented by Google:"${PODS_ROOT}/FirebaseCrashlytics/run"
的方式来调用脚本。
切换到SPM后,${PODS_ROOT}
中将不再包含Firebase文件,并且根本没有此类变量。我知道我现在需要的文件位于DerivedData
文件夹中,尤其是在~/Library/Developer/Xcode/DerivedData/MyApp-abcde/SourcePackages/checkouts/firebase-ios-sdk/Crashlytics/run
上。问题是 MyApp-abcde
文件夹不容易引用。
A Medium post I found建议使用${BUILD_DIR}
构建变量(对于上面的示例,它将解析为<…>/MyApp-abcde/Build/Products
),并调用dirname
命令将其向上移动。目录层次结构。
此hack仅适用于运行该应用。当我尝试对其进行存档时,${BUILD_DIR}
决定使用另一条路径,即<…>/MyApp-abcde/Build/Intermediates.noindex/ArchiveIntermediates/MyApp/BuildProductsPath
。我尝试了其他一些构建变量,例如${SYMROOT}
来代替${BUILD_DIR}
,但根据操作,它们也会产生不同的路径。
所以,问题来了……
是否可以使用Xcode的构建变量可靠地引用我的应用程序的派生数据文件夹的根(即~/Library/Developer/Xcode/DerivedData/MyApp-abcde
)??
解决方法
你很接近。这应该有效:
${BUILD_DIR%Build/*}SourcePackages/checkouts/firebase-ios-sdk/Crashlytics/run
,
我正在重新整理我的答案,因为我意识到我还没有回答您的问题。
我有一个运行脚本,它将构建目标复制到一个新文件夹中。这适用于构建和存档。请注意,您需要在复制时加上-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在构建/发行方面似乎有所不同,但是通过在构建时将文件复制到已知位置,您将知道在哪里可以找到它们。