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一样重新编译,这样你就可以测试和发布相同的二进制代码。例如,在我的脚本中(类似于上面的脚本),我以AdHoc构建的形式构建了我的发布版本,然后我将其归档为IPA进行测试,然后使用我的分发证书并创建一个zip文件,这是我发送给苹果的文件。相关的台词是:

codesign -f -vv -s "$DistributionIdentity" "$APPDIR"

其他回答

用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测试的,对我来说工作很好。

更进一步,用Xcode 7通过命令行上传到iTunesConnect ! (假设您从一个.ipa开始,该ipa已经使用正确的发布概要文件和签名标识进行了签名。)

输入altool,应用程序加载器的CLI界面(文档,第38页)。 隐藏在Xcode的深处。应用程序的结构,是一个方便的功能,让我们直接上传到ItunesConnect。

/Applications/Xcode.app/Contents/Applications/Application Loader.app/Contents/Frameworks/ITunesSoftwareService.framework/Versions/A/Support/altool

只需运行$ altool——upload-app -f file -u username [-p password]即可将你新创建的。ipa文件直接上传到苹果。 密码是可选的,如果您不使用该命令,将提示您输入密码。

如果在验证步骤中应用程序有任何问题,控制台将把它们打印出来。

如果您不想保存路径的位置,则可能必须将路径导出到altool。

export PATH=$PATH:/Applications/Xcode.app/Contents/Applications/Application\ Loader.app/Contents/Frameworks/ITunesSoftwareService.framework/Versions/A/Support/

这就是它!只需登录iTunesConnect.com,选择你的新版本测试testflight。

最后注意:如果你在启动iTunesTransporter时出现异常:Transporter not found at path: /usr/local/itms/bin/iTMSTransporter。你应该重新安装应用程序,你可以按照这个SO答案上的建议,运行一个符号链接到正确的位置:

ln -s /Applications/Xcode.app/Contents/Applications/Application\ Loader.app/Contents/itms /usr/local/itms

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

你必须使用的命令是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}"

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

如果您使用下一个工具:https://github.com/nomad/shenzhen

那么这个任务就很简单了:

which ipa 1>/dev/null 2>&1 || echo 'no shenzhen. to install use: sudo gem install shenzhen --no-ri --no-rdoc'
ipa build --verbose --scheme "${schemeName}"

Xcode 8:


音标格式:

xcodebuild -exportArchive -exportFormat IPA -archivePath MyMobileApp.xcarchive -exportPath MyMobileApp.ipa -exportProvisioningProfile 'MyMobileApp Distribution Profile'

导出存档MyMobileApp。xcarchive作为一个IPA文件到路径MyMobileApp。Ipa使用 配置文件MyMobileApp分发配置文件。

应用格式:

xcodebuild -exportArchive -exportFormat APP -archivePath MyMacApp.xcarchive -exportPath MyMacApp.pkg -exportSigningIdentity 'Developer ID Application: My Team'

导出存档MyMacApp。xcarchive作为PKG文件保存到MyMacApp路径下。PKG使用的应用程序 阳离子签名身份开发人员ID应用:我的团队。安装程序签名标识 开发人员ID安装程序:My Team隐式用于对导出的包进行签名。

Xcodebuild手册页