本文由 简悦SimpRead 转码,原文地址 medium.com
将一个iOS应用部署到iTunes Connect涉及到各种事情,而且很耗时,......
将iOS应用程序部署到iTunes Connect涉及到各种事情,而且是耗时和脆弱的活动。iOS开发者使用Xcode来构建、测试、归档和上传应用到iTunes Connect是非常普遍的做法。幸运的是,苹果有命令行工具来完成这些事情,其中最受欢迎的工具是xcodebuild。在苹果开发工具上有一个叫Fastlane的花式包装,它可以用来对iOS应用程序进行脚本部署。你可能想知道为什么我们需要使用命令行来部署iOS应用程序。你能想象没有Xcode的日子吗?或者你能想到从服务器上部署一个应用程序,而你没有GUI权限吗?或者如果你没有Ruby的脚本技能来使用Fastlane怎么办?
我们必须知道当我们构建、测试、存档和上传应用程序时,幕后发生了什么。我们应该知道用于所有这些活动的本地苹果开发者工具。通过学习命令行交互,我们可以获得以下好处
- 深入了解在构建和部署iOS应用程序时使用的底层苹果技术。
- 易于为持续集成或基于云的服务器自动化iOS开发任务。
- 更好地了解Fastlane等工具在后台做什么。
在这篇文章中,我们将看到如何构建、测试、归档和部署一个iOS应用样本到iTunes Connect.
前提条件
为了理解命令行部署过程,我们应该提前设置好以下内容。
- 带有Xcode工作区的样本应用程序。例如CLI.xcworkspace
- 带有Release配置的Xcode方案。CLI-Release
- 在iTunes Connect中为生产设置证书、AppID、供应档案。使用苹果的文档来设置所有的东西。在本教程中,我们将假设供应配置文件CLI分配配置文件。
- macOS的钥匙串里有分销证书。
我们将使用xcodebuild涵盖iOS应用的周期,从分析应用到部署到iTunes Connect。
分析
在构建和测试iOS应用之前,我们要做的一件明智的事情就是对源代码进行静态分析。xcodebuild有一个清理和分析源代码的能力,以解决任何常见的语法错误。我们可以通过我们的Xcode项目,例如CLI.xcodeproj
$ xcodebuild -project CLI.xcodeproj -scheme CLI -sdk iphonesimulator10.3 clean analyze
构建
我们可以使用xcodebuild'build'动作建立一个iOS应用,为我们的iOS应用生成衍生数据。一旦应用程序被构建,它可以在模拟器中运行,也可以被测试捆绑使用。
构建用于运行
我们可以简单地通过使用简单的命令来构建我们的应用程序,以便在模拟器中运行
$ xcodebuild -scheme CLI -workspace CLI.xcworkspace/ build
这将在~/Library/Developer/Xcode/DerivedData/目录下创建一个衍生数据。我们可以通过各种选项来覆盖默认设置,这样我们就可以控制工件,例如-destination或-derivedDataPath等。
为测试而构建
Xcode 8引入了这个很好的功能,允许构建一次并使用派生数据.xctestrun文件在不同的目的地多次测试。
我们可以使用命令来构建测试。
$ xcodebuild build-for-testing -workspace CLI.xcworkspace -scheme
CLI -destination generic/platform=iOS
现在,我们可以使用test-without-building动作来运行测试,而无需构建应用程序。
测试
苹果有XCTest框架来执行iOS应用程序的单元和UI测试。我们可以更新我们的发布方案以包括测试套件。假设我们的 "CLI "方案被配置为运行测试,那么我们可以使用以下方法运行与方案相关的测试
$ xcodebuild -scheme CLI -workspace CLI.xcworkspace/ test
这将建立我们的方案并开始执行该特定测试的测试。
测试-不构建
如果你使用上面提到的'build-for-testing'选项构建应用程序,我们可以使用相同的派生数据在多个目的地执行测试。
$ xcodebuild test-without-building -workspace CLI.xcworkspace
-scheme CLI -destination 'platform=iOS
Simulator,name=iPhone 7' -destination
'platform=iOS,name=My iPad'
这将在iPhone和iPad上执行测试。我们不必为在不同的目的地运行测试而建立两次应用程序。
归档
大多数iOS工程师发现归档iOS应用程序的过程是非常痛苦的,因为它涉及到处理配置文件、证书和构建配置。为了将应用上传到iTunes Connect或部署到已配置的设备上,我们需要为通用的iOS设备目的地构建应用,并将其导出为IPA格式。
让我们用发布配置方案 "CLI "构建我们的应用程序,并使用通用的iOS设备目的地。
$ xcodebuild -workspace CLI.xcworkspace \
-scheme CLI \
-destination generic/platform=iOS build
xcodebuild有一个新的-exportArchive选项,可以创建一个更像Xcode Organizer的IPA。
有两个步骤
- 用xcodebuild archive建立一个档案
- 用xcodebuild -exportArchive创建.ipa
我们现在像这样建立档案:
$ xcodebuild -workspace CLI.xcworkspace -scheme CLI -sdk iphoneos -configuration AppStoreDistribution archive -archivePath $PWD/build/CLI.xcarchive
我们现在像这样导出.ipa:
$ xcodebuild -exportArchive -archivePath $PWD/build/CLI.xcarchive -exportOptionsPlist exportOptions.plist -exportPath $PWD/build
这两条命令创建了build/myApp.xcarchive和build/myApp.ipa文件。
注意,上述命令需要一个-exportOptionsPlist参数,该参数指向一个带有导出选项的.plist文件。要想知道在plist中可以放什么,请运行xcodebuild -help 。该文件的最小内容是这样的。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>method</key>
<string>app-store</string>
<key>teamID</key>
<string>YOUR_TEN_CHARACTER_TEAM_ID</string>
</dict>
</plist>
如果我们成功地运行这个命令,我们将使用配置配置文件 "CLI Distribution Profile "创建IPA文件。最后,我们将有我们的IPA,CLI.ipa二进制文件准备上传到iTunes Connect。
上传IPA到iTunes Connect
部署应用程序的最后一步是将二进制文件上传到iTunes Connect。通常Xcode有'Application Loader'应用程序来执行这个任务。幸运的是,我们有名为 "altool "的应用程序加载器的命令行界面。altool的二进制文件与Xcode一起出现,所以不需要单独下载它。该二进制文件通常位于以下路径中
/Applications/Xcode.app/Contents/Applications/Application\ Loader.app/Contents/Frameworks/ITunesSoftwareService.framework/Support/altool`
把这个二进制文件导出到$PATH是个好主意,这样就可以从任何地方访问它。我们可以使用这个二进制文件将我们的IPA上传到iTunes Connect。我们需要我们的Apple ID用户名和密码来上传,假设我们在钥匙串里有这些凭证,或者把它作为ENV变量$USERNAME和$PASSWORD。
$ altool --upload-app -f "CLI.ipa" -u $USERNAME -p $PASSWORD
你可以在苹果官方文档上探索 "altool "的其他命令行选项。这将需要大量的时间来上传,但要有耐心,并享受你的IPA上传至iTunes连接。
下一步
现在,我们已经成功地将IPA上传到iTunes Connect,我们可以分发到testFlight进行内部测试,或者从iTunes Connect提交给苹果进行审查。
在这个阶段,你可能对苹果用来构建、归档和部署iOS应用到iTunes Connect的内部工具有了简单的了解。还有其他各种开源的包装工具可以让我们的生活更轻松,比如Fastlane、ios-deploy等。如果你认为有遗漏的地方,请评论
祝您持续交付愉快!
喜欢这篇来自XCBlog的文章_ XCTEQ ?你可能也会喜欢我们的一些服务,如客座博客或移动DevOps(CI/CD)或测试自动化。了解我们的 服务s,在 Github 或在 Twitter , Facebook, Youtube , LinkedIn跟随我们。下载我们的 XCBlog iOS应用程序以离线阅读博客。

XCTEQ有限公司。移动DevOps、CI/CD和自动化
XCTEQ _是一家专门从事移动DevOps、CI/CD、移动、基于AI/ML的测试自动化的公司 查看XCTEQ的产品和服务 www.xcteq.co.uk_ 或写信给我们 info@xcteq.co.uk..