【问题标题】:Is there any way to override build settings per person in Xcode?有没有办法在 Xcode 中覆盖每个人的构建设置?
【发布时间】:2013-06-16 03:15:33
【问题描述】:

我正在开发一个通过 REST API 连接到多个服务的 iPhone 应用程序。

每个服务(开发、生产等)都有一些服务器, 我想切换这些服务器以通过编译器标志连接而不修改 foo.xcodeproj/project.pbxproj。

我在一个由 6 名开发人员组成的团队中,每个人都想连接到不同的服务器组合, 但是如果我将这些配置包含在由 git 管理的 project.pbxproj 中,那将是一团糟。

所以我需要用一个不受 git 管理的文件来更改编译器标志。

理想情况下,我想要 Django 中的本地设置机制。 有什么方法可以用 Xcode 做到这一点吗?

谢谢!非常感谢任何建议。

【问题讨论】:

  • 你能设置 6 个不同的目标,它们有自己的构建设置,它们在项目中使用相同的文件。它可能会变得很棘手,但添加文件的每个人都可以确保将它们添加到所有目标中,并且它应该可以工作。
  • 感谢您的快速回复!但我不想这样做,因为我们已经有 3 个目标(iPhone、iPad 和另外一个)。 1个项目文件中的18个目标将是一团糟......

标签: xcode xcode4


【解决方案1】:

您可以使用构建配置 (.xcconfig) 文件来创建不同的服务器组合。以下是关于如何为您的项目进行配置的很好的解释:How can I use .xcconfig files in Xcode 4?

每个用户都可以拥有自己的 .xcconfig 文件,您可以将这些 .xcconfig 文件添加到 .gitignore

【讨论】:

  • 感谢您的信息!关闭了。但似乎 local.xcconfig 必须包含在 xcodeproj 中才能将文件指定为基本配置。我认为这意味着 local.xcconfig 应该在 git 上进行管理。它是否正确?我该如何处理这个问题?
  • 你说得对,local.xcconfig 文件包含在 xcodeproj 中,但它不需要在 git 中。即使该文件不在工作区中,XCode 也能够构建(当然,只有当它在 Xcode 中的项目构建设置中具有所需的所有设置时)
  • 嗯,如果我不将local.xcconfig添加到git并将其指定为基本配置,其他成员将无法构建,因为他们没有local.xcconfig。 Xcode 会抱怨“local.xcconfig: No such file or directory”。我该怎么办?
  • 我的理解是 XCode 会覆盖 .xcconfig 文件中的项目设置。它将使用 XCode 中定义的设置来处理此文件中缺少的设置。如果该文件不存在,那么它将尝试仅使用 XCode 设置进行构建。
  • 啊,是的,Xcode 确实覆盖了设置。但它不会跳过 .xcconfig 文件。因此,如果 xcodeproj 中不存在 .xcconfig 文件,它将失败。我用 Xcode 4.6.3 进行了测试。你使用的是哪个 Xcode?​​span>
【解决方案2】:

让您的编译器标志不受源代码控制是一个巨大的危险信号。你如何保证你的应用程序的一致构建。 // 结束肥皂盒

回答

我将为生产和开发服务器创建用户定义的构建设置。还有一个运行脚本来设置要在应用程序 info.plist 中使用的服务器

  • 添加构建设置 REST_Server


  • 添加运行脚本以更新 info.plist


# ---------------------------- IMPORTANT ----------------------------
# You must set RESTServer to something like 'Set by build script' in the file
# file '<Project Name>-Info.plist' in the 'Supporting Files' group
# -------------------------------------------------------------------
#
# determin server based on user name
#

SERVER=${REST_Server}

# Only use developer servers for debug never for release
if [ "$CONFIGURATION" != "Debug" ] ; then
    exit
fi

if [ "$USER" == "gdunham" ] ; then
    SERVER="gld.nextbigthing.com"
fi

if [ "$USER" == "jashmun" ] ; then
    SERVER="jda.nextbigthing.com"
fi

echo $SERVER

#
# Set the server info in plist file in the build product not the source tree
#
/usr/libexec/PlistBuddy -c "Set :RESTServer $SERVER" "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}"
  • 将占位符添加到 info.plist

有关所有血腥细节,请参阅我在 GitHub 上的演示项目 https://github.com/GayleDDS/DemoMultiDeveloper

【讨论】:

  • “让你的编译器标志不受源代码控制是一个巨大的危险信号。你如何保证你的应用程序的一致构建。”我不认为这有那么危险。我只想覆盖几个设置参数。当然,应该管理基本设置。制作 local_settings.py 以覆盖参数是使用 Django 进行 Web 应用程序开发的普通方法。不管怎样,你的建议太棒了!这几乎正​​是我想做的!我不知道 PlistBuddy。酷!
猜你喜欢
  • 1970-01-01
  • 2016-03-12
  • 2011-03-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-25
  • 2017-03-04
  • 2018-10-05
相关资源
最近更新 更多