iOS自动打包

首先感谢CaryaLiu's Blog关于iOS自动打包并发布的博文,让我打开了新世界的大门。

之前的打包模式

最开始刚到这个公司的时候,同事是这样打包的。
测试:给我测试机打个包,测试一下。
开发:好。
(然后一台台手机拿过来,插到电脑上,biubiubiu,一台台装上去。。

开发:你说的bug改完了,我给你打个新包吧。
(然后一台台手机拿过来,插到电脑上,biubiubiu,一台台装上去。。还好公司穷,测试机就一台,还是测试自己的hhhh但是其他同事啊领导想要的时候,又得一台台拿过来一个个插一遍运行一遍)

之后大概一年前,我们发现了“蒲公英”这个平台,开始了AD-Hot模式的打包,相对于之前有人要装就得把手机拿过来插一遍要省事一些了。
从“biubiubiu每台手机插一遍”到了“我点点点,导出,上传,,,,啊好了,你们要装新版本的话从蒲公英下啊”“蒲公英有新版本了,你们看到APP内提示直接升级就可以啦”这样的。但是这样也有麻烦的地方,如果只改了一点点小bug但是又要打包的时候,那我们又要开始“点点点,导出,上传”每次至少耗时5分钟,时间虽然不多,但是操作还是略繁琐,特别是那等待时间,只能傻傻的等。
测试:打包好了嘛?
我:还没,等会。
测试:打包好了没?
我:还没,在缓冲。
测试:好了没啊,我要开始测了啊。
我:快了,在上传了。
虽然,蒲公英节省了安装的时间,但是我们打包的时间相应增加了。
既然安卓能有自动打包的工具,那么为什么iOS不能有呢?怀着这样的心情,昨天用了一天时间查阅相关资料和方法,找到了一个可行的方法,并成功打了一个包,虽然自动上传到蒲公英失败了。等研究了Python再看看上传时候弄错了什么。
顺便,同时在蒲公英上发现了新大陆,蒲公英API介绍

我们要明白,我们的可视化操作,在代码层都是能找到相应代码进行操作的,那么,我们在Xcode里点点点导出ipa包的时候,Xcode做了什么呢?
没错,xcodebuild命令。
为了避免错误操作对公司重要工程造成莫名其妙的影响,我们先创建一个test的项目,随便写点什么甚至空白也行。
cd到相应目录,试一下xcodebuild命令。

巴拉巴拉跳出一大堆打印,剔除无用信息之后,如下
=== BUILD TARGET xcodebuildTest OF PROJECT xcodebuildTest WITH THE DEFAULT CONFIGURATION (Release) ===

Check dependencies
Write auxiliary files
//一大堆依赖文件

Create product structure
/bin/mkdir -p /Users/TyW/Documents/GitHub/xcodebuildTest/build/Release-iphoneos/xcodebuildTest.app
·
·
·
·
Validate build/Release-iphoneos/xcodebuildTest.app
    cd /Users/TyW/Documents/GitHub/xcodebuildTest
    export PATH="/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin:/Applications/Xcode.app/Contents/Developer/usr/bin:/Library/Frameworks/Python.framework/Versions/3.5/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Users/TyW/.rvm/bin"
    export PRODUCT_TYPE=com.apple.product-type.application
    builtin-validationUtility /Users/TyW/Documents/GitHub/xcodebuildTest/build/Release-iphoneos/xcodebuildTest.app -validate-for-store

** BUILD SUCCEEDED **

哈?什么,这样就已经** BUILD SUCCEEDED **了,回到响应目录一看,还真的多了一个文件夹

刚才xcodebuild出来的文件夹.png

既然已经build出了.app文件,那么接下来将.app文件转换成.ipa文件

//在终端输入以下命令
xcrun -sdk iphoneos -v PackageApplication ./build/Release-iphoneos/xcodebuildTest.app -o ~/Desktop/xcodebuildTest.ipa

就看到唰唰唰一排打印过后,在桌面看到.ipa文件,但是也看到终端中有这样的提示warning: PackageApplication is deprecated, usexcodebuild -exportArchiveinstead.,这告诉我们PackageApplication的方式已经废弃了,应该用xcodebuild -exportArchive代替。
那么,经过上述的步骤,最简单的工程已经能快速打包了,那么像正常的工程很多framework很多pod的是否也可以打包了呢。一试便知。

同样cd到相应目录,键入xcodebuild命令,
唰唰唰打印了三分钟,最终

** BUILD FAILED **


The following build commands failed:
    Ld build/PaopaoRunning.build/Release-iphoneos/PaopaoRunning.build/Objects-normal/armv7/xxxx normal armv7
    Ld build/PaopaoRunning.build/Release-iphoneos/PaopaoRunning.build/Objects-normal/arm64/xxxx normal arm64

果不其然,打包失败了,按照理解是这两种编码方式没能适配,那么,我们还是来看一下xcodebuild的帮助文档吧,应该能找到相关的设置的,毕竟咱们全新的空白文档是能够打包成功的。
然后我们的目标是没有蛀牙,啊不对,是用ad-hot模式打包出ipa并上传到蒲公英。

阅读xcodebuild帮助并了解

在终端输入man xcodebuild命令查看其man page,蹦出来老长一篇文章,如下,


XCODEBUILD(1)             BSD General Commands Manual            XCODEBUILD(1)

NAME
     xcodebuild -- build Xcode projects and workspaces

SYNOPSIS
     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 ...]

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

     xcodebuild -version [-sdk [sdkfullpath | sdkname]] [infoitem]

     xcodebuild -showsdks

     xcodebuild -showBuildSettings
                [-project name.xcodeproj | [-workspace name.xcworkspace -scheme schemename]]

     xcodebuild -list [-project name.xcodeproj | -workspace name.xcworkspace]

     xcodebuild -exportArchive -archivePath xcarchivepath -exportPath
                destinationpath -exportOptionsPlist path

     xcodebuild -exportLocalizations -project name.xcodeproj -localizationPath
                path [[-exportLanguage language] ...]
     xcodebuild -importLocalizations -project name.xcodeproj -localizationPath
                path

DESCRIPTION
     xcodebuild builds one or more targets contained in an Xcode project, or
     builds a scheme contained in an Xcode workspace or Xcode project.

   Usage
     To build an Xcode project, run xcodebuild from the directory containing
     your project (i.e. the directory containing the name.xcodeproj package).
     If you have multiple projects in the this directory you will need to use
     -project to indicate which project should be built.  By default,
     xcodebuild builds the first target listed in the project, with the
     default build configuration. The order of the targets is a property of
     the project and is the same for all users of the project.

     To build an Xcode workspace, you must pass both the -workspace and
     -scheme options to define the build.  The parameters of the scheme will
     control which targets are built and how they are built, although you may
     pass other options to xcodebuild to override some parameters of the
     scheme.

     There are also several options that display info about the installed ver-
     sion of Xcode or about projects or workspaces in the local directory, but
     which do not initiate an action.  These include -list,
     -showBuildSettings, -showsdks, -usage, and -version.

   Options
     -project name.xcodeproj
           Build the project name.xcodeproj.  Required if there are multiple
           project files in the same directory.

     -target targetname
           Build the target specified by targetname.

     -alltargets
           Build all the targets in the specified project.

     -workspace name.xcworkspace
           Build the workspace name.xcworkspace.

     -scheme schemename
           Build the scheme specified by schemename.  Required if building a
           workspace.

     -destination destinationspecifier
           Use the destination device described by destinationspecifier.
           Defaults to a destination that is compatible with the selected
           scheme.  See the Destinations section below for more details.

     -destination-timeout timeout
           Use the specified timeout when searching for a destination device.
           The default is 30 seconds.

     -configuration configurationname
           Use the build configuration specified by configurationname when
           building each target.

     -arch architecture
           Use the architecture specified by architecture when building each
           target.

     -sdk [sdkfullpath | sdkname]
           Build an Xcode project or workspace against the specified SDK,
           using build tools appropriate for that SDK. The argument may be an
           absolute path to an SDK, or the canonical name of an SDK.

     -showsdks
           Lists all available SDKs that Xcode knows about, including their
           canonical names suitable for use with -sdk.  Does not initiate a
           build.

     -showBuildSettings
           Lists the build settings in a project or workspace and scheme. Does
           not initiate a build. Use with -project or -workspace and -scheme.

     -list
           Lists the targets and configurations in a project, or the schemes
           in a workspace. Does not initiate a build. Use with -project or
           -workspace.

     -enableAddressSanitizer [YES | NO]
           Turns the address sanitizer on or off. This overrides the setting
           for the launch action of a scheme in a workspace.

     -enableThreadSanitizer [YES | NO]
           Turns the thread sanitizer on or off. This overrides the setting
           for the launch action of a scheme in a workspace.

     -enableCodeCoverage [YES | NO]
           Turns code coverage on or off during testing. This overrides the
           setting for the test action of a scheme in a workspace.

     -derivedDataPath path
           Overrides the folder that should be used for derived data when per-
           forming an action on a scheme in a workspace.

     -resultBundlePath path
           Writes a bundle to the specified path with results from performing
           an action on a scheme in a workspace.

     -exportArchive
           Specifies that an archive should be exported. Requires
           -archivePath, -exportPath, and -exportOptionsPlist.  Cannot be
           passed along with an action.

     -archivePath xcarchivepath
           Specifies the path for the archive produced by the archive action,
           or specifies the archive that should be exported when
           -exportArchive is passed.

     -exportPath destinationpath
           Specifies the destination for the exported product, including the
           name of the exported file.

     -exportOptionsPlist path
           Specifies options for -exportArchive.  xcodebuild -help can print
           the full set of available options.

     -exportLocalizations
           Exports localizations to XLIFF files. Requires -project and -local-
           izationPath. Cannot be passed along with an action.

     -importLocalizations
           Imports localizations from an XLIFF file. Requires -project and
           -localizationPath. Cannot be passed along with an action.

     -localizationPath
           Specifies a path to a directory or a single XLIFF localization
           file.

     -exportLanguage language
           Specifies optional ISO 639-1 languages included in a localization
           export. May be repeated to specify multiple languages. May be
           excluded to specify an export includes only development language
           strings.

     action ...
           Specify one or more actions to perform. Available actions are:

           build                  Build the target in the build root
                                  (SYMROOT).  This is the default action, and
                                  is used if no action is given.

           build-for-testing      Build the target and associated tests in the
                                  build root (SYMROOT).  This will also pro-
                                  duce an xctestrun file in the build root.
                                  This requires specifying a scheme.

           analyze                Build and analyze a target or scheme from
                                  the build root (SYMROOT).  This requires
                                  specifying a 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.

           test-without-building  Test compiled bundles. If a scheme is pro-
                                  vided with -scheme then the command finds
                                  bundles in the build root (SRCROOT).  If an
                                  xctestrun file is provided with -xctestrun
                                  then the command finds bundles at paths
                                  specified in the xctestrun file.

           install-src            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 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 tar-
           gets.  These settings will override all other settings, including
           settings passed individually on the command line.

     -xctestrun xctestrunpath
           Specifies test run parameters. Can only be used with the
           test-without-building action. Cannot be used with -workspace or
           -project.   See <x-man-page://5/xcodebuild.xctestrun> for file for-
           mat details.

     -skip-testing:test-identifier, -only-testing:test-identifier
           Constrain test actions.  -only-testing: constrains a test action to
           only  testing a specified identifier, and excluding all other iden-
           tifiers.  -skip-testing: constrains a test action to skip testing a
           specified  identifier,  but  including  all other identifiers. Test
           identifiers have the form  TestTarget[/TestClass[/TestMethod]].  An
           xcodebuild  command  can  combine  multiple constraint options, but
           -only-testing: has precedence over -skip-testing:.

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

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

     buildsetting=value
           Set the build setting buildsetting to value.

           A detailed reference of Xcode build settings can be found at:
           <https://developer.apple.com/documentation/DeveloperTools/
           Reference/XcodeBuildSettingRef/>

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

     -toolchain [identifier | name]
           Use a given toolchain, specified with either an identifier or name.

     -quiet
           Do not print any output except for warnings and errors.

     -verbose
           Provide additional status output.

     -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.


     -license
           Show the Xcode and SDK license agreements. Allows for accepting the
           license agreements without launching Xcode itself, which is  useful
           for headless systems. Must be run as a privileged user.

     -usage
           Displays usage information for xcodebuild.

   Destinations
     The  -destination  option  takes  as its argument a destination specifier
     describing the device (or devices) to use as a destination.   A  destina-
     tion  specifier  is  a single argument consisting of a set of comma-sepa-
     rated key=value pairs.  The -destination option may be specified multiple
     times  to  cause  xcodebuild  to perform the specified action on multiple
     destinations.

     Destination specifiers may include the platform key to specify one of the
     supported  destination platforms.  There are additional keys which should
     be supplied depending on the platform of the device you are selecting.

     Some devices may take time to look up.  The  -destination-timeout  option
     can be used to specify the amount of time to wait before a device is con-
     sidered unavailable.  If unspecified, the default timeout is 30  seconds.

     Currently, xcodebuild supports these platforms:

     macOS              The  local  Mac, referred to in the Xcode interface as
                        My Mac, and which supports the following key:

                        arch  The architecture  to  use,  either  x86_64  (the
                              default) or i386.

     iOS                An iOS device, which supports the following keys:

                        id    The identifier of the device to use, as shown in
                              the Devices window. A valid  destination  speci-
                              fier  must  provide  either  id or name, but not
                              both.

                        name  The name of the device to use. A valid  destina-
                              tion  specifier  must provide either id or name,
                              but not both.

     iOS Simulator      A simulated iOS device, which supports  the  following
                        keys:

                        id    The  identifier  of the simulated device to use,
                              as shown in the Devices window. A valid destina-
                              tion  specifier  must provide either id or name,
                              but not both.

                        name  The name of the simulated device to use. A valid
                              destination  specifier must provide either id or
                              name, but not both.

                        OS    When specifying the simulated  device  by  name,
                              the  iOS version for that simulated device, such
                              as 6.0, or the string latest  (the  default)  to
                              indicate  the  most  recent  version of iOS sup-
                              ported by this version of Xcode.


     watchOS            A watchOS app is  always  built  and  deployed  nested
                        inside  of an iOS app. To use a watchOS device as your
                        destination, specify a scheme which is  configured  to
                        run  a WatchKit app, and specify the iOS platform des-
                        tination that is paired with the  watchOS  device  you
                        want to use.

     watchOS Simulator  A  watchOS  Simulator app is always built and deployed
                        nested inside of  an  iOS  Simulator  app.  To  use  a
                        watchOS  Simulator device as your destination, specify
                        a scheme which is configured to run  a  WatchKit  app,
                        and  specify  the  iOS  Simulator platform destination
                        that is paired with the watchOS Simulator  device  you
                        want to use.

     tvOS               A tvOS device, which supports the following keys:

                        id    The identifier of the device to use, as shown in
                              the Devices window. A valid  destination  speci-
                              fier  must  provide  either  id or name, but not
                              both.

                        name  The name of the device to use. A valid  destina-
                              tion  specifier  must provide either id or name,
                              but not both.

     tvOS Simulator     A simulated tvOS device, which supports the  following
                        keys:

                        id    The  identifier  of the simulated device to use,
                              as shown in the Devices window. A valid destina-
                              tion  specifier  must provide either id or name,
                              but not both.

                        name  The name of the simulated device to use. A valid
                              destination  specifier must provide either id or
                              name, but not both.

                        OS    When specifying the simulated  device  by  name,
                              the tvOS version for that simulated device, such
                              as 9.0, or the string latest  (the  default)  to
                              indicate  the  most  recent version of tvOS sup-
                              ported by this version of Xcode.

     Some actions (such as building) may be performed without an actual device
     present.   To  build against a platform generically instead of a specific
     device, the destination specifier  may  be  prefixed  with  the  optional
     string "generic/", indicating that the platform should be targeted gener-
     ically.  An example of a generic destination is the "Generic iOS  Device"
     destination  displayed  in  Xcode's  UI  when  no  physical iOS device is
     present.


   Exporting Archives
     The -exportArchive option specifies that xcodebuild should export the ar-
     chive   specified   by   -archivePath  using  the  options  specified  by
     -exportOptionsPlist.  xcodebuild -help can print the full set  of  avail-
     able  inputs to -exportOptionsPlist.  The exported product will be placed
     at the path specified by -exportPath.

   Environment Variables
     The following environment variables affect the execution of xcodebuild:

     XCODE_XCCONFIG_FILE
                     Set to a path to a file, build settings in that file will
                     be loaded and used when building all targets.  These set-
                     tings will override all other  settings,  including  set-
                     tings  passed individually on the command line, and those
                     in the file passed with the -xcconfig option.

   Exit Codes
     xcodebuild exits with codes defined by sysexits(3).  It  will  exit  with
     EX_OK on success.  On failure, it will commonly exit with EX_USAGE if any
     options appear malformed, EX_NOINPUT if any input files cannot be  found,
     EX_IOERR  if  any files cannot be read or written, and EX_SOFTWARE if the
     commands given to xcodebuild fail.  It may exit with other codes in  less
     common scenarios.


EXAMPLES
     xcodebuild clean install

              Cleans the build directory; then builds and installs the first
              target in the Xcode project in the directory from which
              xcodebuild was started.

     xcodebuild -project MyProject.xcodeproj -target Target1 -target Target2
              -configuration Debug

              Builds the targets Target1 and Target2 in the project
              MyProject.xcodeproj using the Debug configuration.

     xcodebuild -target MyTarget OBJROOT=/Build/MyProj/Obj.root
              SYMROOT=/Build/MyProj/Sym.root

              Builds the target MyTarget in the Xcode project in the directory
              from which xcodebuild was started, putting intermediate files in
              the directory /Build/MyProj/Obj.root and the products of the
              build in the directory /Build/MyProj/Sym.root.

     xcodebuild -sdk macosx10.6

              Builds the Xcode project in the directory from which xcodebuild
              was started against the macOS 10.6 SDK.  The canonical names of
              all available SDKs can be viewed using the -showsdks option.

     xcodebuild -workspace MyWorkspace.xcworkspace -scheme MyScheme

              Builds the scheme MyScheme in the Xcode workspace
              MyWorkspace.xcworkspace.


     xcodebuild archive -workspace MyWorkspace.xcworkspace -scheme MyScheme

              Archives the scheme MyScheme in the Xcode workspace
              MyWorkspace.xcworkspace.

     xcodebuild build-for-testing -workspace MyWorkspace.xcworkspace -scheme
              MyScheme -destination generic/platform=iOS

              Build tests and associated targets in the scheme MyScheme in the
              Xcode workspace MyWorkspace.xcworkspace using the generic iOS
              device destination. The command also writes test parameters from
              the scheme to an xctestrun file in the built products directory.

     xcodebuild test-without-building -workspace MyWorkspace.xcworkspace
              -scheme MyScheme -destination 'platform=iOS
              Simulator,name=iPhone 5s' -destination 'platform=iOS,name=My
              iPad'

              Tests the scheme MyScheme in the Xcode workspace
              MyWorkspace.xcworkspace using both the iOS Simulator and the
              device named iPhone 5s for the latest version of iOS. The com-
              mand assumes the test bundles are in the build root (SYMROOT).
              (Note that the shell requires arguments to be quoted or other-
              wise escaped if they contain spaces.)

     xcodebuild test-without-building -xctestrun MyTestRun.xctestrun
              -destination 'platform=iOS Simulator,name=iPhone 5s'
              -destination 'platform=iOS,name=My iPad'

              Tests using both the iOS Simulator and the device named iPhone
              5s.  Test bundle paths and other test parameters are specified
              in MyTestRun.xctestrun.  The command requires project binaries
              and does not require project source code.


     xcodebuild test -workspace MyWorkspace.xcworkspace -scheme MyScheme
              -destination 'platform=macOS,arch=x86_64'

              Tests the scheme MyScheme in the Xcode workspace
              MyWorkspace.xcworkspace using the destination described as My
              Mac 64-bit in Xcode.

     xcodebuild -exportArchive -archivePath MyMobileApp.xcarchive -exportPath
              ExportDestination -exportOptionsPlist 'export.plist'

              Exports the archive MyMobileApp.xcarchive to the path
              ExportDestination using the options specified in export.plist.

     xcodebuild -exportLocalizations -project MyProject.xcodeproj
              -localizationPath MyDirectory -exportLanguage zh-hans
              -exportLanguage es-MX

              Exports two XLIFF files to MyDirectory from MyProject.xcodeproj
              containing development language strings and translations for
              Simplified Chinese and Mexican Spanish.

     xcodebuild -exportLocalizations -project MyProject.xcodeproj
              -localizationPath MyDirectory

              Export a single XLIFF file to MyDirectory from
              MyProject.xcodeproj containing only development language
              strings. (In this case, the -exportLanguage parameter has been
              excluded.)

     xcodebuild -importLocalizations -project MyProject.xcodeproj
              -localizationPath MyLocalizations.xliff


     xcodebuild -importLocalizations -project MyProject.xcodeproj
              -localizationPath MyLocalizations.xliff

              Imports localizations from MyLocalizations.xliff into
              MyProject.xcodeproj.  Translations with issues will be reported
              but not imported.

SEE ALSO
     ibtool(1), sysexits(3), xcode-select(1), xcrun(1), xed(1)

     Xcode Builds Settings Reference <https://developer.apple.com/
     documentation/DeveloperTools/Reference/XcodeBuildSettingRef/>

macOS                            June 20, 2016                           macOS

稍微概括下就是SYNOPSIS列举了下常用的xcodebuild命令,随后DESCRIPTION开始简要介绍xcodebuild命令,并且提供了若干注意点:
1.If you have multiple projects in the this directory you will need to use -project to indicate which project should be built.By default, xcodebuild builds the first target listed in the project, with the default build configuration.当我们的工程文件包含多个项目时,需要使用-project来指明build的项目,如.xcodeproj.xcworkspace的区别。如果不指定则默认是-list下的第一个target,并且使用默认打包配置。
2.To build an Xcode workspace, you must pass both the -workspace and -scheme options to define the build. The parameters of the scheme will control which targets are built and how they are built, although you may pass other options to xcodebuild to override some parameters of the scheme.需要配置-scheme来控制那些targets会被build按照什么样的方式打包
3.同时也有一些指令并不会打包,如These include -list, -showBuildSettings, -showsdks, -usage, and -version.
后面全是一大堆的指令介绍,就不一一解释了,稍微看一眼,试一下就知道啥用处了。直到我看到了EXAMPLES,这正是我想要的。
🌰中有一个

 xcodebuild -exportArchive -archivePath MyMobileApp.xcarchive -exportPath  ExportDestination -exportOptionsPlist 'export.plist'
              Exports the archive MyMobileApp.xcarchive to the path
              ExportDestination using the options specified in export.plist.

前面使用PackageApplication时候出现的waining出现过的建议中的,-exportArchive的用法。
然后按照这个用法试着配了下,然而都不成功,幸好找到了CaryaLiu的博文,接下来就转头研究他提供的脚本的用法。

CaryaLiu的打包脚本

1.从CaryaLiu的github上下载到本地,将其中的autobuild文件保存到项目目录下,与.xcworkspace文件统计。
2.cd到刚才移过去的工程目录下的autobuild文件,输入python autobuild.py -w ../xxx.xcworkspace -s xxx
3.桌面出现了以前打包会出现的带日期的文件夹,内部一个ipa文件。
4.将这个ipa文件上传到蒲公英,能够正常安装和使用。
#######遇到的问题
ImportError: No module named requests

使用 sudo easy_install -U requests 安装就好了。
但是注意的是一定要挂VPN下载,不然下一下午也下不好~没错,我就傻乎乎挂着下了一下午,临下班回过神,怎么还没好。登了下VPN,呼呼几分钟就好了。。

仍然有的问题:说好的上传到蒲公英呢。。居然失败了。
再详细的研究请移步原文:iOS自动打包并发布脚本.
PS:python好溜,加入学习计划,嗯哼。

参考资料:
[iOS]从零开始写个自动打包IPA脚本
【iOS打ipa包】:使用终端实现自动打包
iOS自动打包并发布脚本

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,128评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,316评论 3 388
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,737评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,283评论 1 287
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,384评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,458评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,467评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,251评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,688评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,980评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,155评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,818评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,492评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,142评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,382评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,020评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,044评论 2 352

推荐阅读更多精彩内容