xcodebuild:从命令行部署 iOS 应用程序

2019-05-09 16:01:23 浏览数 (1)

作者:Shashikant Jagtap 时间:2017 年 6 月 4 日 原文:https://medium.com/xcblog/xcodebuild-deploy-ios-app-from-command-line-c6defff0d8b8

image.png

将 iOS 应用程序部署到 iTunes Connect 涉及各种各样的事情,这是耗时且脆弱的活动。iOS 开发人员使用 Xcode 构建,测试,存档和上传应用程序到 iTunes Connect 是非常常见的做法。幸运的是,Apple 有命令行工具来完成所有这些工作,其中一个最受欢迎的实用工具是 xcodebuild。Apple Developer 工具上有一个名为 Fastlane 花哨包装器,可用于 iOS 应用程序的脚本部署。您可能想知道为什么我们需要使用命令行来部署 iOS 应用程序。你能想象没有 Xcode 的一天吗?或者您能想到从没有 GUI 访问权限的服务器部署应用程序吗?或者如果你没有 Ruby 的 脚本技能怎么办?使用Fastlane?

我们必须知道在构建,测试,存档和上传应用程序时幕后发生的事情。我们应该知道用于所有这些活动的本机 Apple 开发人员工具。通过学习命令行交互,我们可以获得以下好处

  • 深入了解构建,部署 iOS 应用程序时使用的底层 Apple 技术。
  • 易于为持续集成或基于云的服务器自动执行 iOS 开发任务
  • 更好地了解 Fastlane 在后台运行的工具。

在这篇文章中,我们将看到如何构建,测试,存档和部署示例 iOS 应用程序到 iTunes Connect。

先决条件

为了理解命令行部署过程,我们应该提前设置以下内容。

  • 使用 Xcode 工作区的示例应用程序 例如 CLI.xcworkspace
  • 具有发布配置的 Xcode 方案:CLI-Release
  • 在 iTunes Connect 中进行生产的证书,AppID,配置文件设置。使用 Apple 的 文档 设置所有内容。我们将假设本教程的配置文件 CLI 分发配置文件。
  • macOS 与钥匙串中的分发证书

我们将介绍 iOS 应用程序的循环,从分析 app 到使用 xcodebuild 部署到 iTunes Connect 。

Analysing 分析

在构建和测试 iOS 应用程序之前要做的一件明智的事情是对源代码执行静态分析。该 xcodebuild 有清理和分析的源代码,任何常见的语法错误的能力。我们可以通过我们的 Xcode 项目,例如 CLI.xcodeproj

代码语言:javascript复制
$ xcodebuild -project CLI.xcodeproj -scheme CLI -sdk iphonesimulator10.3 clean analyze

Build 构建

我们可以使用 xcodebuild'build'动作构建一个 iOS 应用程序,为我们的 iOS 应用程序生成派生数据。构建应用程序后,它可以在模拟器内运行,也可以由测试包使用。

为运行而构建

我们可以使用简单的命令简单地构建我们的应用程序以在模拟器内运行

代码语言:javascript复制
$ xcodebuild -scheme CLI -workspace CLI.xcworkspace/ build

这将在〜/ Library / Developer / Xcode / DerivedData / 目录中创建一个派生数据。我们可以传递各种选项来覆盖默认设置,以便我们可以控制工件,例如 - destination 或 - derivedDataPath 等

构建用于测试

Xcode 8 引入了这个很好的功能,允许构建一次并使用派生数据. xctestrun 文件来测试不同目的地的多个时间。

我们可以使用命令构建测试:

代码语言:javascript复制
$ xcodebuild build-for-testing -workspace CLI.xcworkspace -scheme
              CLI -destination generic/platform=iOS

现在,我们可以使用无需构建测试的操作来运行测试,而无需构建应用程序。

Testing 测试

Apple 有 XCTest 框架来执行 iOS 应用程序的单元和 UI 测试。我们可以更新我们的发布方案以包括测试套件。假设我们的'CLI'方案配置为运行测试,那么我们可以运行与方案相关的测试

代码语言:javascript复制
$ xcodebuild -scheme CLI -workspace CLI.xcworkspace/ test

这将构建我们的方案并开始执行特定测试的测试。

不构建的测试

如果您使用上面提到的 “build-for-testing” 选项构建应用程序,我们可以使用相同的派生数据在多个目标上执行测试。

代码语言:javascript复制
$ xcodebuild test-without-building -workspace CLI.xcworkspace
              -scheme CLI -destination 'platform=iOS
              Simulator,name=iPhone 7' -destination
              'platform=iOS,name=My iPad'

这将执行 iPhone 和 iPad 的测试。我们不必构建应用程序两次以在不同目的地上运行测试。

Archiving 存档

大多数 iOS 工程师发现归档 iOS 应用程序的过程非常痛苦,因为它涉及处理配置文件,证书和构建配置。为了将应用程序上传到 iTunes Connect 或将其部署到配置的设备上,我们需要为 通用 iOS 设备目标 构建和应用,并以 IPA 格式导出。

让我们使用具有通用 iOS 设备目标的发布配置方案'CLI'构建我们的应用程序。

代码语言:javascript复制
$ xcodebuild -workspace CLI.xcworkspace 
            -scheme CLI 
            -destination generic/platform=iOS build

xcodebuild 有一个新的 - exportArchive 选项来创建一个更像 Xcode Organizer 的 IPA。

有两个步骤

  1. 使用 xcodebuild 存档构建存档
  2. 使用 xcodebuild -exportArchive 创建. ipa

我们现在构建这样的存档:

代码语言:javascript复制
$ xcodebuild -workspace CLI.xcworkspace -scheme CLI -sdk iphoneos -configuration AppStoreDistribution archive -archivePath $PWD/build/CLI.xcarchive

我们现在导出. ipa 像这样:

代码语言:javascript复制
$ xcodebuild -exportArchive -archivePath $PWD/build/CLI.xcarchive -exportOptionsPlist exportOptions.plist -exportPath $PWD/build

这两个命令创建文件 build/myApp.xcarchive 和 build/myApp.ipa

请注意,上面的命令需要 - exportOptionsPlist 参数,该参数指向带有导出选项的. plist 文件。有关可以放入该 plist 的完整列表,请运行 xcodebuild -help。该文件的最小内容如下所示:

代码语言:javascript复制
<?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' 的 Application loader 应用程序的命令行界面。Xcode 提供了 altool 的二进制文件,因此无需单独下载。二进制文件通常位于路径中

代码语言:javascript复制
/Applications/Xcode.app/Contents/Applications/Application Loader.app/Contents/Frameworks/ITunesSoftwareService.framework/Support/altool

将该二进制文件导出到

USERNAME 和 $PASSWORD,我们需要上传 Apple ID 用户名和密码。

代码语言:javascript复制
$ altool --upload-app -f "CLI.ipa" -u $USERNAME -p $PASSWORD

您可以在 Apple 官方文档中探索 “altool” 的其他命令行选项。上传需要花费大量时间,但请耐心等待,并将您的 IPA 上传到 iTunes 连接。

接下来是什么

现在,我们已成功将 IPA 上传到 iTunes Connect,我们可以分发到 testFlight 进行内部测试或将其提交给 Apple 以便从 iTunes Connect 进行审核

0 人点赞