iOS 命令行打包--xcworkspace
参考:
打包的具体操作步骤:
https://www.jianshu.com/p/6a0aa8cd2e97
打包时使用到的参数详解,参考这篇:
https://debugtalk.com/post/iOS-Android-Packing-with-Jenkins-details/index.html
xcodebuild命令详解:
https://www.jianshu.com/p/770d5df137bf
注意:
补充一点:
xcodeproj和xcworkspace的区别是:xcworkspace使用了cocoapods来管理第3方库
采用Cocoapod管理项目依赖,每次拉取最新代码后直接编译可能会报错。这往往是因为其他同事更新了依赖库(新增了第三方库或升级了某些库),而本地还采用之前的第三方库进行编译,从而会出现依赖库缺失或版本不匹配等问题。
应对的做法是,在每次build之前都更新一下Cocoapod。
# Update pod repository
pod repo update
# Install pod dependencies
pod install
配置完后,先进行构建 ,可以 拉到代码 再进行第2步的修改
可以看到已经将代码 clone到本地了
在执行正式的脚本前,要做一些准备工作:
ios使用pods管理第三方库,每次构建job时,需要先更新pods库:
。和python中用pip管理第3方库类似。不更新第3方库,将导致程序中依赖第3方库的功能不可用
export LANG=en_US.UTF-8 # xcworkspace文件所在目录 TARGET_PATH="trunk/5iwork/ios" #Podfile路径 PODFILE=${WORKSPACE}/${TARGET_PATH} cd ${PODFILE} echo -e "============Update pod repository============" pod repo update echo -e "============Install pod dependencies============" echo ${PODFILE} pod install
注意这些命令要在项目目录xcworkspace文件所在目录执行
打包脚本:
## !/bin/sh ## 项目名 TARGET_NAME="cbs_new5iwork" ## xcworkspace文件所在目录 TARGET_PATH="trunk/5iwork/ios" ## Scheme名 SCHEME="cbs_new5iwork" ##======================= ## 编译类型 BUILD_TYPE=staging #jenkins布署环境,通过代码配置的:打包uat时选择的是staging|线上对应的是Release,Release包需要开发打包 #BUILD_TYPE="Release" #测试编译类型 ## 当前目录 SORCEPATH=${WORKSPACE} #jenkins job配置目录 #SORCEPATH="/Users/5i5j/Desktop" #测试路径 # workspace名 SPACE=${WORKSPACE}/${TARGET_PATH}/${TARGET_NAME}.xcworkspace ##xcarchive文件的存放路径 ARCHIVEPATH=${SORCEPATH}/build/${SCHEME}.xcarchive ## ipa文件的存放路径 EXPORTPATH=${SORCEPATH}/build/${SCHEME} ## ExportOptions.plist文件的存放路径 #EXPORTOPTIONSPLIST=$SORCEPATH/build/ExportOptions.plist EXPORTOPTIONSPLIST=${WORKSPACE}/${TARGET_PATH}/cbs_new5iwork/Resources/ExportOptions.plist ## 导出后的ipa路径 EXPORTPATHIPA=${SORCEPATH}/build/${SCHEME}/${SCHEME}.ipa ## 清理老的xcarchive文件 rm -rf ${ARCHIVEPATH} echo -e "============First Build Clean============" ## 清理缓存 xcodebuild clean -workspace ${SPACE} -scheme ${SCHEME} -configuration ${BUILD_TYPE} echo -e "============Build Clean============" ## 输出关键信息 echo -e " TARGET_NAME : ${TARGET_NAME}" echo -e " BUILD_TYPE : ${BUILD_TYPE}" echo -e " SORCEPATH : ${SORCEPATH}" echo -e " ARCHIVEPATH : ${ARCHIVEPATH}" echo -e " EXPORTPATH : ${EXPORTPATH}" echo -e " EXPORTOPTIONSPLIST : ${EXPORTOPTIONSPLIST}" echo -e "============Build Archive============" ## 导出archive包 xcodebuild archive -workspace ${SPACE} -scheme ${SCHEME} -archivePath ${ARCHIVEPATH} -configuration ${BUILD_TYPE} echo -e "============Build Archive Success============" echo -e "============Export IPA============" ## 导出IPA包 xcodebuild -exportArchive -archivePath ${ARCHIVEPATH} -exportPath ${EXPORTPATH} -exportOptionsPlist ${EXPORTOPTIONSPLIST} echo -e "============Export IPA SUCCESS============" ## 编译完成时间 20181030_0931 BUILD_DATE="$(date +'%Y%m%d_%H%M')" ## info.plist路径 PROJECT_INFOPLIST_PATH="${SORCEPATH}/${TARGET_PATH}/${TARGET_NAME}/Info.plist" ## 取版本号 BUNDLESHORTVERSION=$(/usr/libexec/PlistBuddy -c "print CFBundleShortVersionString" "${PROJECT_INFOPLIST_PATH}") ## 取build值 VERSION=$(/usr/libexec/PlistBuddy -c "print CFBundleVersion" "${PROJECT_INFOPLIST_PATH}") ## ipa更名规则 项目名V版本_年月日_时分 IPANAME="${TARGET_NAME}V${BUNDLESHORTVERSION}_${BUILD_DATE}.ipa" ## 更名后ipa路径 EXPORTPATHNEWIPA=${EXPORTPATH}/${IPANAME} echo -e "============Export end :${BUILD_DATE}============" echo -e "============IPA Old Name: ${EXPORTPATHIPA}============" echo -e "============IPA New Name: ${EXPORTPATHNEWIPA}============" ## IPA更名 cp $EXPORTPATHIPA $EXPORTPATHNEWIPA echo -e "============Create New Name Success============" ## 删除老IPA ##rm $EXPORTPATHIPA ##echo -e "============Delete Old Name Success============"