【发布时间】:2013-01-16 10:36:09
【问题描述】:
我们有一个相当大的代码库,需要很长时间来清理构建。每当我们归档构建(Product->Archive)时,归档过程首先清除所有,然后构建。
这似乎不必要且耗时,我们希望能够在没有干净构建的情况下创建存档。增量构建应该没问题。
有人知道如何在 XCode 归档过程中禁用“全部清除”步骤吗?非常感谢,我在这方面的搜索只提供了有关如何更快构建的建议(这对我们没有用的建议)。
【问题讨论】:
我们有一个相当大的代码库,需要很长时间来清理构建。每当我们归档构建(Product->Archive)时,归档过程首先清除所有,然后构建。
这似乎不必要且耗时,我们希望能够在没有干净构建的情况下创建存档。增量构建应该没问题。
有人知道如何在 XCode 归档过程中禁用“全部清除”步骤吗?非常感谢,我在这方面的搜索只提供了有关如何更快构建的建议(这对我们没有用的建议)。
【问题讨论】:
是的,有可能。
正如我所怀疑的那样,这可以从命令行完成。我们花了一段时间才弄清楚这一点。这是我们的 TeamCity 构建脚本的摘录。基本上你生成一个构建(干净或增量是你的选择),然后从构建中生成和 .ipa。这是一个选项(开发者身份和配置文件 ID 当然被删除了):
export CODESIGN_ALLOCATE="/Applications/Xcode.app/Contents/Developer/usr/bin/codesign_allocate"
xcodebuild -project <PROJECT NAME>.xcodeproj -target <PROJECT NAME> -configuration Release -sdk iphoneos -arch armv7 ONLY_ACTIVE_ARCH=NO CONTRIB_PATH=%system.agent.home.dir%/Contrib2 CODE_SIGN_IDENTITY="iPhone Developer: <DEV NAME> (ID)"
PROVISIONING_PROFILE=<PROFILE ID>
rm -rf Payload
mkdir Payload
cp -R build/Release-iphoneos/ Payload/
rm ~/<PROJECT NAME>.ipa
xcrun -sdk iphoneos PackageApplication -v Payload/<PROJECT NAME>.app -o ~/<PROJECT NAME>.ipa --sign "iPhone Developer: <DEV NAME> (ID)" --embed ~/Library/MobileDevice/Provisioning\ Profiles/<PROFILE ID>.mobileprovision
【讨论】:
PackageApplication 在 Xcode 8.3 中消失了,你知道是否有一种新方法可以在没有干净构建的情况下创建 .ipa?
如何设置一个持续集成服务器,以便每次提交都可以触发一个导致归档构建的过程。 . . (希望在先运行测试等之后),以及发布 API 文档等。
它仍然需要相同的时间,但由于它在每次签入代码后在后台运行,并且最新的候选版本始终可用 - 您可能不会注意到。
否则,您会遇到头疼的问题,即必须在发布模式下进行开发而不是调试等 - 它根本行不通。
这是一个 (OSX) 项目的示例,其中包含可由持续集成服务器运行的构建脚本。我用的是 Bamboo,但如果你想要一些免费的东西,还有 Jenkins:
https://github.com/jasperblues
在上述项目中,每个成功的构建(每当有人提交代码时触发)都会将 API 文档和测试覆盖率报告发布到 github 页面。 . .对于 iOS 项目,您也可以让它进行归档。
【讨论】:
增量构建不适合存档。清理的重点是因为有时您可能会在清理修复的增量构建中遇到问题。这是在开发过程中可以接受的问题,但 Archive 是为分发构建而设计的,分发构建根本不应该有这种风险。
更不用说,您的正常构建过程是构建一个 Debug 构建,而 Archive 将构建一个 Release 构建,因此无论如何您都需要重新构建大部分应用程序(自上次 Release 构建以来发生的任何变化)。
【讨论】: