fastlane:
自动化打包使用最多就是Fastlane中gym这个Action, 转为打包而生, 安装gym这个组件:
sudo gem install gym
sudo gem install gym复制代码
cd项目根目录, 创建自动打包脚本:
vim gym.sh复制代码
输入脚本内容:
vim gym.sh
输入脚本内容:
#计时
SECONDS=0
#假设脚本放置在与项目相同的路径下复制代码project_path=$(pwd)复制代码#取当前时间字符串添加到文件结尾复制代码now=$(date +"%Y_%m_%d_%H_%M_%S")复制代码#指定项目的scheme名称
scheme="CIProjectTest"
#指定要打包的配置名
configuration="development"
#指定打包所使用的输出方式,目前支持app-store, package, ad-hoc, enterprise, development, 和developer-id,即xcodebuild的method参数复制代码
export_method='development'
# #指定项目地址
project_path="CIProjectTest.xcodeproj"
#使用了workspace的
#workspace_path="$project_path/CIProjectTest.xcworkspace"
#指定输出路径
output_path="project_path/APP"
#指定输出归档文件地址
archive_path="$output_path/CIProjectTest${now}.xcarchive"
#指定输出ipa地址
ipa_path="$output_path/CIProjectTest${now}.ipa"
#指定输出ipa名称
ipa_name="CIProjectTest${now}.ipa"
#获取执行命令时的commit message
commit_msg="$1"
#输出设定的变量值
echo "===workspace path: ${workspace_path}==="
echo "===archive path: ${archive_path}==="
echo "===ipa path: ${ipa_path}==="
echo "===export method: ${export_method}==="
echo "===commit msg: $1==="
#先清空前一次build
gym --project ${project_path} --scheme ${scheme} --clean --configuration ${configuration} --archive_path ${archive_path} --export_method ${export_method} --output_directory ${output_path} --output_name ${ipa_name}
#输出总用时
echo "===Finished. Total time: ${SECONDS}s==="
把如上脚本中Xitu改成你的项目名称即可. 为脚本执行提升权限:
chmod +x gym.sh
执行一下脚本看一下打包效果:
./gym.sh
执行结果:
===workspace path: ===
===archive path: project_path/APP复制代码#指定输出归档文件地址/CIProjectTest.xcarchive===
===ipa path: project_path/APP复制代码#指定输出归档文件地址/CIProjectTest.ipa===
===export method: development===
===commit msg: ===
[WARNING] You are calling gym directly. Usage of the tool name without the `fastlane` prefix is deprecated in fastlane 2.0
Please update your scripts to use `fastlane gym --project CIProjectTest.xcodeproj --scheme CIProjectTest --clean --configuration development --archive_path project_path/APP\复\制\代\码\#\指\定\输\出\归\档\文\件\地\址/CIProjectTest.xcarchive --export_method development --output_directory project_path/APP\复\制\代\码\#\指\定\输\出\归\档\文\件\地\址 --output_name CIProjectTest.ipa` instead.
[12:42:41]: $ xcodebuild -showBuildSettings -scheme CIProjectTest -project CIProjectTest.xcodeproj -configuration development
[12:42:43]: Couldn't find specified configuration 'development'.
+----------------------+------------------------------------------------------+
| Summary for gym 2.0.0 |
+----------------------+------------------------------------------------------+
| project | CIProjectTest.xcodeproj |
| scheme | CIProjectTest |
| clean | true |
| archive_path | project_path/APP复制代码#指定输出归档文件地址/CIPro |
| | jectTest.xcarchive |
| export_method | development |
| output_directory | project_path/APP复制代码#指定输出归档文件地址 |
| output_name | CIProjectTest |
| destination | generic/platform=iOS |
| silent | false |
| use_legacy_build_api | false |
| buildlog_path | ~/Library/Logs/gym |
| xcode_path | /Applications/Xcode.app |
+----------------------+------------------------------------------------------+
[12:42:43]: $ set -o pipefail && xcodebuild -scheme CIProjectTest -project CIProjectTest.xcodeproj -destination 'generic/platform=iOS' -archivePath project_path/APP\复\制\代\码\#\指\定\输\出\归\档\文\件\地\址/CIProjectTest.xcarchive clean archive | tee /Users/hanxiaomaoaichiyu/Library/Logs/gym/CIProjectTest-CIProjectTest.log | xcpretty
[12:42:44]: ▸ --- xcodebuild: WARNING: Using the first of multiple matching destinations:
[12:42:44]: ▸ { platform:iOS, id:dvtdevice-DVTiPhonePlaceholder-iphoneos:placeholder, name:Generic iOS Device }
[12:42:44]: ▸ { platform:iOS, id:dvtdevice-DVTiPhonePlaceholder-iphoneos:placeholder, name:Generic iOS Device }
[12:42:44]: ▸ { platform:iOS, id:dvtdevice-DVTiPhonePlaceholder-iphoneos:placeholder, name:Generic iOS Device }
[12:42:44]: ▸ { platform:iOS, id:dvtdevice-DVTiPhonePlaceholder-iphoneos:placeholder, name:Generic iOS Device }
[12:42:44]: ▸ { platform:iOS, id:dvtdevice-DVTiPhonePlaceholder-iphoneos:placeholder, name:Generic iOS Device }
[12:42:44]: ▸ { platform:iOS, id:dvtdevice-DVTiPhonePlaceholder-iphoneos:placeholder, name:Generic iOS Device }
[12:42:44]: ▸ { platform:iOS, id:dvtdevice-DVTiPhonePlaceholder-iphoneos:placeholder, name:Generic iOS Device }
[12:42:44]: ▸ { platform:iOS, id:dvtdevice-DVTiPhonePlaceholder-iphoneos:placeholder, name:Generic iOS Device }
[12:42:44]: ▸ --- xcodebuild: WARNING: Using the first of multiple matching destinations:
[12:42:44]: ▸ { platform:iOS, id:dvtdevice-DVTiPhonePlaceholder-iphoneos:placeholder, name:Generic iOS Device }
[12:42:44]: ▸ { platform:iOS, id:dvtdevice-DVTiPhonePlaceholder-iphoneos:placeholder, name:Generic iOS Device }
[12:42:44]: ▸ { platform:iOS, id:dvtdevice-DVTiPhonePlaceholder-iphoneos:placeholder, name:Generic iOS Device }
[12:42:44]: ▸ { platform:iOS, id:dvtdevice-DVTiPhonePlaceholder-iphoneos:placeholder, name:Generic iOS Device }
[12:42:44]: ▸ { platform:iOS, id:dvtdevice-DVTiPhonePlaceholder-iphoneos:placeholder, name:Generic iOS Device }
[12:42:44]: ▸ { platform:iOS, id:dvtdevice-DVTiPhonePlaceholder-iphoneos:placeholder, name:Generic iOS Device }
[12:42:44]: ▸ { platform:iOS, id:dvtdevice-DVTiPhonePlaceholder-iphoneos:placeholder, name:Generic iOS Device }
[12:42:44]: ▸ { platform:iOS, id:dvtdevice-DVTiPhonePlaceholder-iphoneos:placeholder, name:Generic iOS Device }
[12:42:44]: ▸ Cleaning CIProjectTest/CIProjectTest [Debug]
[12:42:44]: ▸ Check Dependencies
[12:42:44]: ▸ Clean Succeeded
[12:42:44]: ▸ Building CIProjectTest/CIProjectTest [Release]
[12:42:44]: ▸ Check Dependencies
[12:42:44]: ▸ Compiling ViewController.m
[12:42:45]: ▸ Compiling main.m
[12:42:45]: ▸ Compiling AppDelegate.m
[12:42:45]: ▸ Linking CIProjectTest
[12:42:45]: ▸ Compiling Main.storyboard
[12:42:48]: ▸ Compiling LaunchScreen.storyboard
[12:42:48]: ▸ Processing Info.plist
[12:42:48]: ▸ Generating 'CIProjectTest.app.dSYM'
[12:42:49]: ▸ Touching CIProjectTest.app
[12:42:49]: ▸ Signing /Users/hanxiaomaoaichiyu/Library/Developer/Xcode/DerivedData/CIProjectTest-btrafzeldmokembbscuselscflvq/Build/Intermediates.noindex/ArchiveIntermediates/CIProjectTest/InstallationBuildProductsLocation/Applications/CIProjectTest.app
[12:42:49]: ▸ Touching CIProjectTest.app.dSYM
[12:42:49]: ▸ Archive Succeeded
[12:42:49]: Successfully stored the archive. You can find it in the Xcode Organizer.
[12:42:49]: Generated plist file with the following values:
[12:42:49]: ▸ -----------------------------------------
[12:42:49]: ▸ {
[12:42:49]: ▸ "method": "development"
[12:42:49]: ▸ }
[12:42:49]: ▸ -----------------------------------------
[12:42:49]: $ /usr/bin/xcrun /Users/hanxiaomaoaichiyu/.rvm/gems/ruby-2.4.0@global/gems/gym-2.0.0/lib/assets/wrap_xcodebuild/xcbuild-safe.sh -exportArchive -exportOptionsPlist '/var/folders/42/vxjhp2bj1c1c01xtrphffxgh0000gn/T/gym_config20180715-4420-jc6y1v.plist' -archivePath project_path/APP\复\制\代\码\#\指\定\输\出\归\档\文\件\地\址/CIProjectTest.xcarchive -exportPath '/var/folders/42/vxjhp2bj1c1c01xtrphffxgh0000gn/T/gym_output20180715-4420-1kjdl1i'
[12:42:52]: Compressing 2 dSYM(s)
[12:42:52]: $ cd '/Users/hanxiaomaoaichiyu/Desktop/test/CIProjectTest2/project_path/APP复制代码#指定输出归档文件地址/CIProjectTest.xcarchive/dSYMs' && zip -r '/Users/hanxiaomaoaichiyu/Desktop/test/CIProjectTest2/project_path/APP复制代码#指定输出归档文件地址/CIProjectTest.app.dSYM.zip' *.dSYM
[12:42:52]: ▸ adding: 7153F36C-634D-31BF-BBAF-4FE0BA80C65A.dSYM/ (stored 0%)
[12:42:52]: ▸ adding: 7153F36C-634D-31BF-BBAF-4FE0BA80C65A.dSYM/Contents/ (stored 0%)
[12:42:52]: ▸ adding: 7153F36C-634D-31BF-BBAF-4FE0BA80C65A.dSYM/Contents/Info.plist (deflated 52%)
[12:42:52]: ▸ adding: 7153F36C-634D-31BF-BBAF-4FE0BA80C65A.dSYM/Contents/Resources/ (stored 0%)
[12:42:52]: ▸ adding: 7153F36C-634D-31BF-BBAF-4FE0BA80C65A.dSYM/Contents/Resources/7153F36C-634D-31BF-BBAF-4FE0BA80C65A.plist (deflated 21%)
[12:42:52]: ▸ adding: 7153F36C-634D-31BF-BBAF-4FE0BA80C65A.dSYM/Contents/Resources/DWARF/ (stored 0%)
[12:42:52]: ▸ adding: 7153F36C-634D-31BF-BBAF-4FE0BA80C65A.dSYM/Contents/Resources/DWARF/CIProjectTest (deflated 85%)
[12:42:52]: ▸ adding: CIProjectTest.app.dSYM/ (stored 0%)
[12:42:52]: ▸ adding: CIProjectTest.app.dSYM/Contents/ (stored 0%)
[12:42:52]: ▸ adding: CIProjectTest.app.dSYM/Contents/Info.plist (deflated 52%)
[12:42:52]: ▸ adding: CIProjectTest.app.dSYM/Contents/Resources/ (stored 0%)
[12:42:52]: ▸ adding: CIProjectTest.app.dSYM/Contents/Resources/DWARF/ (stored 0%)
[12:42:52]: ▸ adding: CIProjectTest.app.dSYM/Contents/Resources/DWARF/CIProjectTest (deflated 62%)
[12:42:52]: Successfully exported and compressed dSYM file
[12:42:52]: Successfully exported and signed the ipa file:
[12:42:52]: /Users/hanxiaomaoaichiyu/Desktop/test/CIProjectTest2/project_path/APP复制代码#指定输出归档文件地址/CIProjectTest.ipa
===Finished. Total time: 13s===
hanxiaomaoaichiyudeMacBook-Pro:CIProjectTest2 hanxiaomaoaichiyu$
经过572s,development版本的ipa文件打包成功,我们在项目根目录下找到App目录:

会发现如上三个文件. ok.至此自动化打包ipa文件流程完成. 关于gym这个action调用强烈推荐看一下官方文档的调用参数,对你调试过程会非常有帮助.
网友评论