xcodebuild、xcrun和 altool

什么是 Xcode Command Line Tools

  Xcode Command Line Tools 是一个独立的小型包,让开发者可以在 macOS 中进行命令行开发。它由安装在/Library/Developer/CommandLineTools目录中的 macOS SDK 和命令行工具(例如 Clang)组成。安装方式如下:

  • 安装 Xcode
  • 从 苹果开发者官网下载
  • 通过运行 xcode-select --install 安装

xcode-select

什么是xcode-select

  xcode-select 用于管理开发者到底使用哪一个 developer 工具目录,它可以使得开发者轻松地在不同版本的 Xcode 之间切换工具,并且在 Xcode 移动时更新其路径。关于 xcode-select更多信息可以参照手册页

xcode-select 的使用

  • xcode-select -- switch [Xcode.app path]

    通过指定 Xcode.app 的路径选择想要使用的 command line developer tools

  • xcode-select -p

    输出当前选择的路径

  • xcode-select -r

    重置到默认的 command line developer tools

Xcodebuild

什么是 xcodebuild

  xcodebuild 是一个命令行工具,允许开发者从命令行对 Xcode 项目和工作区执行构建、查询、分析、测试和归档操作。它可以对 Project 中的 Target、 Workspace 或者 Project 中的 Scheme 进行操作。xcodebuild 提供了几个选项来执行这些操作,如其手册页所示。默认情况下, xcodebuild 将命令的输出保存在 Xcode -> Preferences -> LocationsDerived DataArchives 中。

xcodebuild 的使用

要构建 Xcode 工程,需要在工程文件夹所在目录运行 xcodebuild 命令。

action

  在执行 xcodebuild 大部分命令时,会需要指定的 action。下面是常用的 action

action 描述
build 默认的 action,未指定 action 时会使用 build,构建工程生成 Product
archive 编译、归档生成 .xcarchive 包,可以指定输出路径
Clean 从构建根目录中删除 Product 目录 和 临时文件

构建Project

xcodebuild [-project name.xcodeproj]
                [[-target targetname] ... | -alltargets]
                [-configuration configurationname]
                [-sdk [sdkfullpath | sdkname]] [action ...]
                [buildsetting=value ...] [-userdefault=value ...]
                
xcodebuild [-project name.xcodeproj] -scheme schemename
                [[-destination destinationspecifier] ...]
                [-destination-timeout value] [-configuration configurationname]
                [-sdk [sdkfullpath | sdkname]] [action ...]
                [buildsetting=value ...] [-userdefault=value ...]

  • clean

    xcodebuild clean -project name.xcodeproj -target targetName
    
  • build

    在构建 project 时,默认 xcodebuild 会构建 project 中 target 列表中的第一个以及默认的 configuration

    xcodebuild build -project name.xcodeproj
    
  • archive

    归档,将工程编译生成一个 .xcarchive 文件,-archivePath指定输出目录路径。

    xcodebuild archive -project name.xcodeproj -scheme scheme -archivePath 希望输出的位置
    

构建 Workspace

 xcodebuild -workspace name.xcworkspace -scheme schemename
                [[-destination destinationspecifier] ...]
                [-destination-timeout value] [-configuration configurationname]
                [-sdk [sdkfullpath | sdkname]] [action ...]
                [buildsetting=value ...] [-userdefault=value ...]

  要构建 Workspace,必须同时通过 -workspace-scheme 定义构建的选项。Scheme 中的参数将会控制构建每一个 target 如何构建,关于 Scheme 可以查看。下面是构建 Workspace 最基础的命令举例:

xcodebuild clean -workspace ${workspace_name}.xcworkspace -scheme ${scheme_name} 
xcodebuild archive -workspace MyWorkspace.xcworkspace -scheme MyScheme

构建过程中常用到的选项

  除了 -workspace-project-target-scheme 以外,还有一些其它的选项可能会用到,如下:

  • -configuration

    指定构建配置。一般的,多 Scheme 情况下不需要用到这个参数,因为每个 Scheme 都有对应的 Build Configuration,仅在单个 Scheme 的情况下,需要指定 Configuration 时可以用这个选项,比如 Debug、Release等等。

  • -sdk

    指定 sdk 路径。当电脑中有多个 Xcode 版本时,一般情况会用默认 Xcode Command Line Tool 的 sdk,可以通过 -showsdks 获取其它 sdk 路径后,在作为 -sdk 的 Value。

  • -arch

    指定架构类型 architecture,比如arm64

  • -allowProvisioningUpdates

    允许更新描述文件。需要配置 Xcode->Preferences->Account

  • -xcconfig

    指定 xcconfig 文件。xcconfig 的内容会覆盖其它的 Build Settings

  • buildsetting=value

指定 Build settings 中的内容。例如: ARCHS=arm64,和 xcconfig 文件的写法一样

Export

  Export 主要是的对生成的 .xcarchive 文件进行进一步的处理,根据 ExportOptions.plist 生成相应的 ipa,相应的命令如下:

xcodebuild -exportArchive -archivePath  -exportPath  -exportOptionsPlist 

  其中,ExportOptions.plist 中包含了分发方法:app-storead-hocenterprisedevelopment,以及分发选项和分发签名选项。可以通过 xcodebuild -help 查看文件可用的 Key

Available keys for -exportOptionsPlist:
 
    compileBitcode : Bool
         ...
    embedOnDemandResourcesAssetPacksInBundle : Bool
         ...
    iCloudContainerEnvironment
         ...
    manifest : Dictionary
         ...
    method : String
         ...
    onDemandResourcesAssetPacksBaseURL : String
         ...
    teamID : String
         ...
    thinning : String
         ...
    uploadBitcode : Bool
         ...
    uploadSymbols : Bool
         ...

  当然最便捷的办法就是通过 Xcode 导出一次 ipa 包,在输出的文件夹内存放了对应的 ExportOptions.plist文件。

Other Options

  还有几个选项可以显示有关已安装设备的信息、Xcode 版本 以及关于 Project 或 Workspace 的信息

  • -list;
  • -showBuildSettings
  • -showdestinations,
  • -showsdks
  • -version

xcrun

  xcrunCommand Line Tools 中的一员。它的作用类似 RubyGem 里的 bundle ,用于控制执行环境。其作用是根据 xcode-select 设置的默认目录定位或者执行开发命令行工具,因此系统中如果安装了多个版本的Xcode,推荐使用 xcrun

当与 --find参数一起使用时,如 xcrun --find clang 会输出工具 clang 所在位置的绝对路径。

在没有 --find 的情况下使用,则需要 command 的名称和将使用提供的参数执行,如 xcrun xcodebuild -list

altool

  altool 同样是 Xcode Command Line Tools 用于验证构建版本或将有效构建版本自动上传至 App Store。可以通过xcrun --find altool 查找其位置:

/Applications/Xcode.app/Contents/Developer/usr/bin/altool

altool 参数

  altool 分为两步,验证指定的 App,上传指定的 App,可以查看其手册页:

位置 详细说明
--validate-app 要验证指定的 App。
--upload-app--upload-package 要上传指定的 App。
-f file 正在验证或上传的 App 的路径和文件名。
-u username 用户名。
-p password App 专用密码。
--apiKey apiKey,私钥文件AuthKey_.p8,存储位置 ~/.private_keys
--apiIssuer Issuer ID ,在 App Store Connect -> 用户和访问 -> 密钥 查看 Issuer ID

用户认证信息的获取

  altool 在上传时需要开发者的用户名 username 和 App 专用密码 password 或者使用 apiKeyapiIssuer 用于认证用户信息。

  • App 专用密码的获取

    1. 登录 appleid.apple.com。
    2. 在“登录和安全”部分中,点按“App 专用密码”。
    3. 点按“生成 App 专用密码”或点按
      蓝色加号图标

      ,然后按照屏幕上的步骤操作。

  • apiKeyapiIssuer 的获取

    1. 使用开发者账号访问 https://appstoreconnect.apple.com 登录 App Store Connect 首页,点击【用户与访问】
    2. 选择【密钥】生成 AuthKey_.p8密钥下载保存(只能下载一次),api_key 填入 --apiKey 参数,
    3. 在终端复制执行 cd ~ && mkdir .private_keys创建隐藏文件夹,再将下载的 AuthKey_.p8文件复制或移动到~/.private_keys隐藏文件夹下

altool 的使用

  • 验证 App

    xcrun altool --validate-app -f  file_path --type  "{macos | ios |
         appletvos}" {-u  username [-p  password] |  --apiKey api_key
         --apiIssuer  issuer_id}
    
  • 上传 App

    • 使用 --upload-package

      xcrun altool --upload-package  file_path --type  {macos | ios |
             appletvos} --asc-public-id  id --apple-id id --bundle-version
             version --bundle-short-version-string string --bundle-id id {-u
             username [-p  password] |  --apiKey api_key --apiIssuer
             issuer_id}
      
    • 使用 --upload-app

      xcrun altool --upload-app -f file_path --type  "{macos | ios |
      appletvos}" {-u  username [-p  password] |  --apiKey api_key
      --apiIssuer  issuer_id}  [DEPRECATED use --upload-package]
      

你可能感兴趣的:(xcodebuild、xcrun和 altool)