前言
这个系列讲主要介绍一些提高iOS开发效率的命令行工具,利用这些方便的命令,我们可以写出各种脚本用来提高我们的生产力,本篇主要介绍,利用脚本实现工程Archive,Export出Release包,然后上传到AppStore。
与传统的打包上传操作相比,我们只需要在命令行之行脚本命令即可,大大的提高了工作效率,并且,个人感觉,通过命令行上传包到AppStore的过程会更快一些(通常在试用xcode upload或者Application Loader要等很久),
并且由于使用脚本,我们可以很容易的实现批量打包上传AppStore。在这一点上节省的人力尤为明显
本系列不是专业的shell 脚本教程,而是更加面向功能,所以一些shell的用法可能并不专业,所以如果你看到本文的Shell写法感到不适,
来打我啊!可以只参考思路哈。
Archive
通过xcodebuild 命令行工具实现,xcodebuild是xcode提供的命令行工具,我们在xcode中的大部分编译操作,都能通过这个命令行工具实现
Archive命令
1 | xcodebuild archive |
参数
1 | -workspace 指定workspace -workspace xxx.xcworkspace |
完整用例
1 | xcodebuild archive -workspace xxx.xcworkspace -scheme "targetScheme" -archivePath Archive/test |
在当前目录的Archive文件夹里面就会出现 test.Archive文件
Export
有了archive文件,接下来需要从archive文件里Export出Release包,相当于下图的操作
同样使用xcodebuild 命令行工具进行导出
Export 命令
1 | xcodebuild -exportArchive |
参数
1 | -archivePath 指定archive 文件的路径 -archivePath out/xxx.xcarchive |
export plist配置文件介绍
导出时需要通过-exportOptionsPlist
制定一个plist配置文件,改配置文件包含以下属性
1 | - method: (String) The method of distribution, which can be set as any of the following: |
这里导出到App Store使用如下配置
1 | "1.0" encoding="UTF-8" xml version= |
注意 不需要使用 teamId
开始用 -exportOptionsPlist 导出的时候 报错,无法导出 最后删除 plist 里面的teamId 导出成功
完整命令
1 | xcodebuild -exportArchive -archivePath /Users/name/Desktop/xxx/Archive/test.xcarchive |
上传到AppStore
其实到了目前这一步,已经节省了我们很多工作量了,我们只需要拿到导出的ipa文件用 Application Loader上传即可。但是本着极客的心态,我们必须尝试用脚本实现。
上传到AppStore 我们无法通过xcodebuild实现,这里借助了一个非常好用的命令行工具shenzhen
该工具提供了多种发布ipa包的方式,包括发布到AppStore,蒲公英,fir等等
发布到AppStore命令
1 | ipa distribute:itunesconnect |
参数
1 | -a itunesconnect 账号 |
完整命令
1 | ipa distribute:itunesconnect -a me@email.com -p myitunesconnectpassword -i appleid -f xxxx/test.ipa --upload |
Shell脚本
上面把核心功能都实现了,接下来就是怎么组装成一个Shell脚本,并且方便批量化投入使用了。
全局变量
1 | #当前路径 |
尤其是读取命令行输入的四个参数,可以用来分别控制本次命令,组合执行 archive,export,upload,三种命令。
另外看到 下面的写法
1 | WORKSPACE_PATH=`ls | grep 'xcworkspace'` |
两个`号用来执行一段shell命令,其执行结果保存到WORKSPACE_PATH中
获取输入参数
1 | while getopts ":uaew" OPTION |
upload.plist
由于上传的时候需要体统itunesconnect 账号密码,以及appid所以,这里我创建了一个上传的配置文件,以对应的scheme名字为key 保存itunesconnect 账号密码,以及appid
然后通过/usr/libexec/PlistBuddy
来读取plist文件的内容
主循环
1 | for scheme in ${BUILD_SCHEME[*]} |
当两个’ ‘引号包裹起来的语句如果包含$xx 引用变量,这个变量是不会被解开的
1 | PARA="test" |