藤原とうふ店(自家用)

iOS 自动打包工具 -- xcodebuild

2017-06-14  本文已影响510人  bonoCat

iOS 自动打包工具 -- xcodebuild


由于公司产品发布需要由运维人员进行负责,所以准备弄一个打包工具,虽然也有一些比较好的工具 shenzhen,但也是基于
xcodebuild,既然如此,何不自己写一套呢?虽然简单,但也会很实用~

主要从下面几个方面入手

xcodebuild 参数分析

基本描述

xcodebuild -- build Xcode projects and workspaces

通过 xcodebuild 来构建 Xcode 项目。如果当前目录下有多个,可以使用 -project 来指定具体工程,默认情况下构建第一个。
如果是构建是 workspace 的,就需要使用 -workspace 和 -scheme 这两个命令构建
使用 -version, -showsdks, and -usage 可以看一些信息

$ xcodebuild BDLifeManageProject.xcworkspace -version
  Xcode 8.3.2
  Build version 8E2002
$ xcodebuild BDLifeManageProject.xcworkspace -showsdks
  iOS SDKs:
    iOS 10.3                        -sdk iphoneos10.3

iOS Simulator SDKs:
    Simulator - iOS 10.3            -sdk iphonesimulator10.3

macOS SDKs:
    macOS 10.12                     -sdk macosx10.12

tvOS SDKs:
    tvOS 10.2                       -sdk appletvos10.2

tvOS Simulator SDKs:
    Simulator - tvOS 10.2           -sdk appletvsimulator10.2

watchOS SDKs:
    watchOS 3.2                     -sdk watchos3.2

watchOS Simulator SDKs:
    Simulator - watchOS 3.2         -sdk watchsimulator3.2
$ xcodebuild BDLifeManageProject.xcworkspace -usage
   Usage:
       xcodebuild [-project <projectname>] [[-target <targetname>]...|-alltargets] [-configuration <configurationname>] [-arch <architecture>]... [-sdk [<sdkname>|<sdkpath>]] [-showBuildSettings] [<buildsetting>=<value>]... [<buildaction>]...
       xcodebuild [-project <projectname>] -scheme <schemeName> [-destination <destinationspecifier>]... [-configuration <configurationname>] [-arch <architecture>]... [-sdk [<sdkname>|<sdkpath>]] [-showBuildSettings] [<buildsetting>=<value>]... [<buildaction>]...
       xcodebuild -workspace <workspacename> -scheme <schemeName> [-destination <destinationspecifier>]... [-configuration <configurationname>] [-arch <architecture>]... [-sdk [<sdkname>|<sdkpath>]] [-showBuildSettings] [<buildsetting>=<value>]... [<buildaction>]...
       xcodebuild -version [-sdk [<sdkfullpath>|<sdkname>] [<infoitem>] ]
       xcodebuild -list [[-project <projectname>]|[-workspace <workspacename>]] [-json]
       xcodebuild -showsdks
       xcodebuild -exportArchive -archivePath <xcarchivepath> -exportPath <destinationpath> -exportOptionsPlist <plistpath>
       xcodebuild -exportLocalizations -localizationPath <path> -project <projectname> [-exportLanguage <targetlanguage>...]
       xcodebuild -importLocalizations -localizationPath <path> -project <projectname>

可选参数

     -project projectname
           如果在当前目录有多个 project 文件,使用 projectname 来指定

     -target targetname
            由于一个 project 可以包含多个 target,所以需要使用 -target 指定

     -alltargets
            编译在 project 下面所有的 target
           Build all the targets in the specified project.

     -workspace workspacename
            编译 指定的 workspace 

     -scheme schemename
           在编译workspace时,需要使用-scheme指定的 scheme 来编译

     -destination destinationspecifier
           用于区分目标设备,默认是与当前选中 scheme 匹配的那个

     -destination-timeout timeout
           在查找目标设备的时候设置超时时间,默认30秒

     -configuration configurationname
            使用 configuration 来编译的时候通过 configurationname 来指定每个 target 的配置  debug ? release

     -arch architecture
           在构建每一个 target 的时候,指定架构体系 arm64 armv7 armv7s

     -sdk [<sdkfullpath> | <sdkname>]
           编译 Xcode 的 project 或者 workspace 相关的 SDK

     -showsdks
           显示出所有 Xcode 中的SDK

     -list
           列举出 project 下的 targets 和 configurations,或者 workspace 下的 schemes

     -derivedDataPath path
           在 workspace 中 build 时候就会使用这个文件来代替源数据
           覆盖这个文件的话

     -resultBundlePath path
     
            在 workspace 中 构建时,将 bundle 写入指定的 地址

     -exportArchive
            指定一个被导出的 archive 文件。
            需要和 -exportFormat,-archivePath和-exportPath 配合使用,不能在编译时单独使用。 

     -exportFormat format
           指定导出 archive 的形式: IPA(iOS archives
           only)、PKG (Mac archives only)、 APP, 不指定将会尝试使用 IPA 或 PKG

     -archivePath xcarchivepath
           指定 archive 路径
     
     -exportPath destinationpath
            指定导出的目标文件路径。 

     -exportProvisioningProfile profilename
            导出 archive 时指定 Profile
    
     -exportSigningIdentity identityname
          导出 archive 时指定应用签名,有可能会从 -exportProvisioningProfile 得出
     
     -exportInstallerIdentity identityname
           导出 archive 时使用安装的签名ID

     -exportWithOriginalSigningIdentity
          指定创建可被导出的 archive 文件时所使用的签名文件。

     buildaction ...
           Specify a build action (or actions) to perform on the target. Available build actions are:

           build    默认编译的动作,编译根对象 (SYMROOT)

           analyze     编译并且分析根环境(SYMROOT)下的一个 target 或者 scheme。需要指定一个 scheme。 

           archive     Archive a scheme from the build root (SYMROOT).  This requires specifying a scheme.
            
           test        Test a scheme from the build root (SYMROOT).  This requires specifying a scheme and
                       optionally a destination.

           installsrc  Copy the source of the project to the source root (SRCROOT).

           install     Build the target and install it into the target's installation directory in the dis-tribution distribution
                       tribution root (DSTROOT).

           clean       Remove build products and intermediate files from the build root (SYMROOT).

     -xcconfig filename
           Load the build settings defined in filename when building all targets.  These settings will over-ride override
           ride all other settings, including settings passed individually on the command line.

     -dry-run, -n
           Print the commands that would be executed, but do not execute them.

     -skipUnavailableActions
           Skip build actions that cannot be performed instead of failing. This option is only honored if
           -scheme is passed.

     setting=value
           Set the build setting setting to value.

     -userdefault=value
           Set the user default default to value.

     -version
           Display version information for this install of Xcode. Does not initiate a build. When used in
           conjunction with -sdk, the version of the specified SDK is displayed, or all SDKs if -sdk is
           given no argument.  Additionally, a single line of the reported version information may be
           returned if infoitem is specified.

     -usage
           Displays usage information for xcodebuild.

xcodebuild 具体使用命令

通过官方的 xcodebuild 可以得到我们所需要的命令

project:

 xcodebuild [-project <projectname>] -scheme <schemeName> [-destination <destinationspecifier>]... [-configuration <configurationname>] [-arch <architecture>]... [-sdk [<sdkname>|<sdkpath>]] [-showBuildSettings] [<buildsetting>=<value>]... [<buildaction>]...
 xcodebuild -workspace <workspacename> -scheme <schemeName> [-destination <destinationspecifier>]... [-configuration <configurationname>] [-arch <architecture>]... [-sdk [<sdkname>|<sdkpath>]] [-showBuildSettings] [<buildsetting>=<value>]... [<buildaction>]...
       

由于公司项目配置比较简单,这边将它进行简化,提取出最简单的即可:

构建工程

 xcodebuild [-project <projectname>] -scheme <schemeName>  [-configuration <configurationname>] [<buildaction>]...
 
 xcodebuild -workspace <workspacename> -scheme <schemeName>  [-configuration <configurationname>] [<buildaction>]...

输出


 xcodebuild -exportArchive -archivePath <xcarchivepath> -exportPath <destinationpath> -exportOptionsPlist <plistpath>

exportOptionsPlist

主要包含了一个method,可以设置的值为:ad-hoc 、app-store、development ,根据设置的值,采用不同的证书进行打包

为了打包方便,使用plist文件进行管理,只包含 export_method 信息

参数说明下:
projectname: 为工程名称
schemeName: 为所选 scheme 的名称
configurationname: debug 还是 release
buildaction : 主要使用的是 archive 和 clean

最终能得到以下命令

# clean
xcodebuild -workspace <workspacename> -scheme <schemeName> [-configuration <configurationname>] clean

# archive
    ##project
 xcodebuild [-project <projectname>] -scheme <schemeName>  [-configuration <configurationname>] -archivePath <xcarchivepath>  archive
    ##workspace
 xcodebuild -workspace <workspacename> -scheme <schemeName>  [-configuration <configurationname>] archive
 
#export
 xcodebuild -exportArchive -archivePath <xcarchivepath> -exportPath <destinationpath> -exportOptionsPlist <plistpath>

由于项目是 workspace 的,所以试下 -workspace 情况


xcodebuild -workspace BDLifeManageProject.xcworkspace -scheme BDLifeManageProject -configuration release clean

** CLEAN SUCCEEDED **

 xcodebuild -workspace BDLifeManageProject.xcworkspace -scheme BDLifeManageProject  -configuration release -archivePath /Users/dingding/Desktop/outPath/BDLifeManageProject.xcarchive archive
 
** ARCHIVE SUCCEEDED **

 xcodebuild -exportArchive -archivePath /Users/dingding/Desktop/outPath/BDLifeManageProject.xcarchive -exportPath /Users/dingding/Desktop/outPath/ -exportOptionsPlist /Users/dingding/Desktop/outPath/DevelopmentExportOptionsPlist.plist

** EXPORT SUCCEEDED **

导出ipa.jpeg

通过以上 xcodebuild 命令可以实现打包

最终成品 Autopackage 点此下载

上一篇下一篇

猜你喜欢

热点阅读