Xcode 3.2在Build菜单下提供了一个很棒的新功能,“Build and Archive”,它可以生成一个适合Ad Hoc分发的。ipa文件。你也可以打开管理器,选择“存档应用程序”和“向iTunesConnect提交应用程序”。

有没有办法从命令行(作为构建脚本的一部分)使用“构建和存档”?我假设xcodebuild会以某种方式涉及到,但手册页似乎没有说任何关于这方面的内容。

Michael Grinich要求澄清;以下是你不能用命令行构建的功能,这些功能你只能在“构建和存档”之后用Xcode的管理器实现。

You can click "Share Application..." to share your IPA with beta testers. As Guillaume points out below, due to some Xcode magic, this IPA file does not require a separately distributed .mobileprovision file that beta testers need to install; that's magical. No command-line script can do it. For example, Arrix's script (submitted May 1) does not meet that requirement. More importantly, after you've beta tested a build, you can click "Submit Application to iTunes Connect" to submit that EXACT same build to Apple, the very binary you tested, without rebuilding it. That's impossible from the command line, because signing the app is part of the build process; you can sign bits for Ad Hoc beta testing OR you can sign them for submission to the App Store, but not both. No IPA built on the command-line can be beta tested on phones and then submitted directly to Apple.

我希望有人能来证明我是错的:这两个功能在Xcode GUI中都很好用,不能从命令行复制。


当前回答

用Xcode 9和Swift更新我的答案

存档

xcodebuild -workspace <ProjectName>/<ProjectName>.xcworkspace \
  -scheme <schemeName> clean archive -configuration release \
  -sdk iphoneos -archivePath <ProjectName>.xcarchive

IPA输出(请注意输出选项plist)

xcodebuild -exportArchive -archivePath  <ProjectName>.xcarchive \
  -exportOptionsPlist  <ProjectName>/exportOptions.plist \
  -exportPath  <ProjectName>.ipa

对于那些不了解exportOptions.plist的人, https://blog.bitrise.io/post/new-export-options-plist-in-xcode-9


那些在CI/CD工具(如teamcity/jenkins)中使用此工具构建项目的人,请确保您在构建代理中安装了正确的Xcode用于存档和导出。

您可以使用以下两个选项中的任何一个。

使用xcodebuild的完整路径,

/Applications/Xcode 9.3.1.app/Contents/Developer/usr/bin/xcodebuild

使用xcode-select,

xcode-select -switch /Applications/Xcode 9.3.1.app

以下是我以前的回答

下面是创建存档和IPA示例的命令行脚本。 我有一个iPhone xcode项目,位于Desktop/MyiOSApp文件夹。

依次执行以下命令:

cd /Users/username/Desktop/MyiOSApp/

xcodebuild -scheme MyiOSApp archive \
  -archivePath /Users/username/Desktop/MyiOSApp.xcarchive

xcodebuild -exportArchive -exportFormat ipa \
  -archivePath "/Users/username/Desktop/MyiOSApp.xcarchive" \
  -exportPath "/Users/username/Desktop/MyiOSApp.ipa" \
  -exportProvisioningProfile "MyCompany Distribution Profile"

这是用Xcode 5测试的,对我来说工作很好。

其他回答

我发现了如何从命令行自动化构建和归档过程,我刚刚写了一篇博客文章来解释如何实现这一点。

你必须使用的命令是xcrun:

/usr/bin/xcrun -sdk iphoneos PackageApplication \
-v "${RELEASE_BUILDDIR}/${APPLICATION_NAME}.app" \
-o "${BUILD_HISTORY_DIR}/${APPLICATION_NAME}.ipa" \
--sign "${DEVELOPER_NAME}" \
--embed "${PROVISONING_PROFILE}"

你可以在文章中找到所有的细节。如果你有任何问题,不要犹豫,尽管问。

尝试xctool,它是苹果xcodebuild的替代品,可以更容易地构建和测试iOS和Mac产品。它对持续集成特别有帮助。它有一些额外的功能:

运行与Xcode.app相同的测试。 构建和测试结果的结构化输出。 人性化的,ansi彩色输出。

3号非常有用。我不知道是否有人能读懂xcodebuild的控制台输出,我不能,通常它给了我一行5000+字符。比论文还难读。

xctool: https://github.com/facebook/xctool

你是指验证/共享/提交选项吗?我认为这些都是Xcode特有的,不适合命令行构建工具。

如果有点聪明的话,我打赌你可以编写一个脚本来为你做这件事。看起来它们只是存储在~/Library/MobileDevice/Archived Applications/中,有一个uuddi和一个plist。我也无法想象反向工程验证器会有那么难。

我感兴趣的自动化过程是将构建版本发送给beta测试人员。(因为App Store很少提交,所以我不介意手动完成,特别是因为我经常需要添加新的描述文本。)通过使用Xcode的CLI执行伪Build+Archive,我可以从每次代码提交中触发自动构建,创建带有嵌入式配置文件的IPA文件,并将其通过电子邮件发送给测试人员。

在Xcode 4.2中,你可以使用-scheme标志来做到这一点:

xcodebuild -scheme <SchemeName> archive

执行此命令后,档案文件将显示在Xcode管理器中。

为了改进Vincent的回答,我写了一个脚本:xcodearchive 它允许您通过命令行存档(生成ipa)您的项目。 可以把它看作xcodebuild命令的姐妹,但用于归档。

代码可在github: http://github.com/gcerquant/xcodearchive

该脚本的一个选项是启用dSYM符号在时间戳存档中的存档。没有理由不再保留这些符号,也没有理由不再标记以后可能收到的崩溃日志。