构建时将文件复制到 Xcode 项目的根目录

Posted

技术标签:

【中文标题】构建时将文件复制到 Xcode 项目的根目录【英文标题】:Copy file to root of Xcode project when building 【发布时间】:2016-01-12 03:52:22 【问题描述】:

我正在尝试在我的 ios 应用中实施 Google Analytics (GA)。我有两个不同的目标,它们具有不同的 GA 跟踪 ID。 GA 要求将GoogleService-Info.plist(无法重命名)文件放置在应用文件夹结构的根目录中。此文件包含跟踪 ID。但是,由于我有两个不同的目标,我需要有两个不同的跟踪 ID。

我不能将两个文件命名为具有不同目标的同名文件。

那么,有没有办法在构建过程中将另一个文件复制到根目录中。已经尝试过这个和类似的,但似乎不起作用:

有什么建议吗?

【问题讨论】:

【参考方案1】:

脚本:

PLIST_FILE="CustomGoogleService-Info.plist"
PLIST_PATH="$PROJECT_DIR/path/To/Plist/Here/$PLIST_FILE"
cp "$PLIST_PATH" "$CONFIGURATION_BUILD_DIR/$CONTENTS_FOLDER_PATH/GoogleService-Info.plist"

说明:

将此脚本添加到Build Phases 的末尾 将名称 CustomGoogleService-Info.plist 更改为您自己的名称 将pathToPlistHere更改为CustomGoogleService-Info.plist所在的正确路径(从您的项目目录开始) 您的项目中不应包含 GoogleService-Info.plist 文件 - 脚本会为您创建它。 在运行时喝杯咖啡

您可能有兴趣阅读Apple's Xcode Build Setting Reference

或者: 您可以有 2 个名称为 GoogleService-Info.plist 的文件,但将每个文件保存在单独的目录中。然后您可以将每个添加到相应的目标。没有任何脚本。

【讨论】:

另一种方法的好提示! 非替代方式更好,imo。如果您有一个目标,但有多种配置(例如 dev、beta、prod),它也可以工作。 如何只为特定方案/配置添加构建脚本? @AlexW,他可能会想到类似if [ "$CONFIGURATION" == "Debug" ]; then .... fi ps: ahoj。 这里文件没有被复制。我仍然看到旧文件。尝试删除,强制复制。但没有任何想法?【参考方案2】:

我一直都是正确的,但是 Destination 应该设置为 Wrapper 并且子路径为空。也不需要将它们放在目标中。

这个解释了目的地选项:xcode copy files build phase - what do the destination options mean exactly?

【讨论】:

以上是关于构建时将文件复制到 Xcode 项目的根目录的主要内容,如果未能解决你的问题,请参考以下文章

Xcode 构建后复制文件操作

将整个目录复制到输出文件夹,维护文件夹结构?

如何在构建时将其他文件包含到 C# 的输出目录中?

让 NuGet 包输出文件

在 NuGet 安装时将文件复制到 Android 项目

子目录中的资源文件被复制到 app bundle 的根目录