iOS 自动化打包
2020-10-22 本文已影响0人
南枫小谨
1. 自动化打包脚本
* echo "准备开始打ipa包...................."
*
*
* # *************** base config **********************
*
* # path 项目工程路径
* WORKSPACE=`XXXXXXXX`
* #项目名称
* PROJ_NAME= "XXXXXXXX"
* #工程环境路径WORKSPA
* WORKSPATH_PATH=$WORKSPACE/ios
* #证书名称
* CODESIGN="iPhone Distribution: XXXXXXXXXXX"
* #描述文件UUID
* CODE_SIGN_IDENTITY="XXXXXXXXXXXXXX"
* #描述文件Name
* CODE_SIGN_IDENTITY_NAME="XXXXXXXX"
* #描述文件TeamName
* DEVELOPMENT_TEAM="XXXXXXXXX"
* bunddle id
* BUNDLE_IDENTIFIER="com.XXX.XXX.XXXX"
* APP名字 版本 支持的 SDK版本
* APPName="XXXXXX"
* T_VERSION=1.0.0
* SDK=iphoneos13.2
* TARGET=${PROJ_NAME}
*
* #********************* plist change *********************
*
* # 获取文件中字符匹配行号
* function getMatchLineNumAddOne(){
* fn=$1 #搜索文件名
* myPattern=$2 #匹配字符串
* tmpFn="tmp.sh" #缓存匹配行号临时文件
*
* awk '/'${myPattern}'/{print NR}' $fn>$tmpFn
* lineNum=`awk '//{print $1}' ${tmpFn}`
* lineNum2=`expr ${lineNum} + 1`
* rm -rf $tmpFn
* echo $lineNum2
* }
* function getMatchLineNumAddTwo(){
* fn=$1 #搜索文件名
* myPattern=$2 #匹配字符串
* tmpFn="tmp.sh" #缓存匹配行号临时文件
*
* awk '/'${myPattern}'/{print NR}' $fn>$tmpFn
* lineNum=`awk '//{print $1}' ${tmpFn}`
* lineNum2=`expr ${lineNum} + 2`
* rm -rf $tmpFn
* echo $lineNum2
* }
*
* function replaceCharacter(){
*
* cd $WORKSPATH_PATH/${PROJ_NAME}.xcodeproj
* fn="project.pbxproj"
*
* #修改描述文件与签名
* #sed -i "" "s/PROVISIONING_PROFILE = \".*\"/PROVISIONING_PROFILE = \"${PROVISONING_PROFILE}\"/g" $fn
* #sed -i "" "s/\"PROVISIONING_PROFILE\[sdk=iphoneos\*]\" = \".*\"/\"PROVISIONING_PROFILE\[sdk=iphoneos\*]\" = \"${PROVISONING_PROFILE}\"/g" $fn
* sed -i "" "s/CODE_SIGN_IDENTITY = \".*\"/CODE_SIGN_IDENTITY = \"${CODESIGN}\"/g" $fn
* sed -i "" "s/\"CODE_SIGN_IDENTITY\[sdk=iphoneos\*]\" = \".*\"/\"CODE_SIGN_IDENTITY\[sdk=iphoneos\*]\" = \"${CODESIGN}\"/g" $fn
* sed -i "" "s/PRODUCT_BUNDLE_IDENTIFIER = .*/PRODUCT_BUNDLE_IDENTIFIER = ${BUNDLE_IDENTIFIER};/g" $fn
*
* #该命令行为爱加密编译参数,需要打包的电脑集成爱加密后,替换了编译器才能执行,否则build会报错
* #sed -i "" "s/OTHER_CFLAGS = \".*\"/OTHER_CFLAGS = (\"-DSQLITE_HAS_CODEC\",\"-mllvm\",\"-cxf\",\"-mllvm\",\"-equ\",\"-mllvm\",\"-fcf\",\"-mllvm\",\"-chenxify-prob=10\",\"-mllvm\",\"-falsify-loop=2\",\"-mllvm\",\"-falsify-prob=20\",)/g" $fn
*
*
* cd $WORKSPATH_PATH/${PROJ_NAME}
* fn="Info.plist"
*
* #修改appid,程序显示名称,程序版本号
* myPattern="CFBundleIdentifier"
* lineNum_AppId=$(getMatchLineNumAddOne $fn $myPattern)
* sed -i "" "${lineNum_AppId}s/<string>.*<\/string>/<string>${BUNDLE_IDENTIFIER}<\/string>/g" $fn
*
* myPattern="CFBundleShortVersionString"
* lineNum=$(getMatchLineNumAddOne $fn $myPattern)
* sed -i "" "${lineNum}s/<string>.*<\/string>/<string>${T_VERSION}<\/string>/g" $fn
*
* myPattern="CFBundleVersion"
* lineNum=$(getMatchLineNumAddOne $fn $myPattern)
* sed -i "" "${lineNum}s/<string>.*<\/string>/<string>${T_VERSION}<\/string>/g" $fn
*
* myPattern="CFBundleVersion"
* lineNum=$(getMatchLineNumAddOne $fn $myPattern)
* sed -i "" "${lineNum}s/<string>.*<\/string>/<string>${T_VERSION}<\/string>/g" $fn
*
* #修改app显示名字
* myPattern="CFBundleDisplayName"
* lineNum=$(getMatchLineNumAddOne $fn $myPattern)
* sed -i "" "${lineNum}s/<string>.*<\/string>/<string>${APPName}<\/string>/g" $fn
*
* # Xcode设置中的URL Types 的Identiffier
* #myPattern="CFBundleURLName"
* #lineNum=$(getMatchLineNumAddOne $fn $myPattern)
* #sed -i "" "${lineNum}s/<string>.*<\/string>/<string>${BUNDLE_IDENTIFIER}<\/string>/g" $fn
* #
* ## Xcode设置中的URL Types 的URL Schemes
* #myPattern="CFBundleURLSchemes"
* #lineNum=$(getMatchLineNumAddTwo $fn $myPattern)
* #sed -i "" "${lineNum}s/<string>.*<\/string>/<string>ac${BUNDLE_IDENTIFIER}<\/string>/g" $fn
*
*
* echo "print $fn start..."
* #cat $fn
* echo "print $fn end."
*
*
* #cd $WORKSPACE/${PROJ_NAME}/启动加载区
* #fn="Global.h"
* #
* ## 修改配置环境变量
* #sed -i "" "s/\#define APPFLAG.*/\#define APPFLAG ${APPFLAG}/g" $fn
* #
* #sed -i "" "s/\#define ENVIRONMENT.*/\#define ENVIRONMENT ${ENVIRONMENT}/g" $fn
* #
* #sed -i "" "s/\#define VERSIONCONTROLFLAG.*/\#define VERSIONCONTROLFLAG ${VERSIONCONTROLFLAG}/g" $fn
* #
* #sed -i "" "s/\#define DEVICESNFLAG.*/\#define DEVICESNFLAG ${DEVICESNFLAG}/g" $fn
* #
* ##cat $fn
* #
* #cd $WORKSPACE/${PROJ_NAME}/www/assets/config
* #fn="base.js"
*
* # 修改HTML文件环境
* #myPattern="define[[:space:]]APPFLAG"
* #lineNum=$(getMatchLineNumAddOne $fn $myPattern)
* #sed -i "" "s/section:.*/section: '${JS_ENVIRONMENT}',/g" $fn
* #cat $fn
*
* # 修改APP显示的包名(多语言版)
* #fn="InfoPlist.strings"
* #cd $WORKSPACE/${PROJ_NAME}/Supporting\ Files/en.lproj
* #sed -i "" "s/\"CFBundleDisplayName\".*/\"CFBundleDisplayName\" = \"${APPName}\";/g" $fn
* #cd $WORKSPACE/${PROJ_NAME}/Supporting\ Files/zh-Hans.lproj
* #sed -i "" "s/\"CFBundleDisplayName\".*/\"CFBundleDisplayName\" = \"${APPName}\";/g" $fn
* }
*
*
* # ************** compile ************************
*
*
* #build的路径
* BUILD_PATH=$WORKSPATH_PATH
*
* echo "第一步,进入项目工程文件: $BUILD_PATH"
*
* cd $BUILD_PATH
* ls
*
* echo "第二步,执行build clean命令"
*
* xcodebuild clean
*
* echo "第三步,执行cofig命令"
*
* replaceCharacter
* echo "第4步,执行编译生成.app命令"
*
* cd $BUILD_PATH
*
* pod install
*
* echo "pod install Sucess>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>."
*
* xcodebuild archive -workspace ${PROJ_NAME}.xcworkspace -scheme ${PROJ_NAME} -sdk $SDK -configuration Release -archivePath "${BUILD_PATH}/archive/${PROJ_NAME}.xcarchive" CODE_SIGN_IDENTITY="${CODESIGN}" PROVISIONING_PROFILE="${CODE_SIGN_IDENTITY}"
* echo "compile Sucess>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>."
*
* #xcodebuild -exportArchive -exportFormat IPA -archivePath "${BUILD_PATH}/archive/${PROJ_NAME}.xcarchive" -exportPath "${BUILD_PATH}/archive/${PROJ_NAME}.ipa" -exportProvisioningProfile "${CODE_SIGN_IDENTITY_NAME}"
*
* echo "IPA Sucess>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>."
* #xcodebuild archive -workspace $PROJ_NAME.xcworkspace -scheme $PROJ_NAME -configuration Release -archivePath archive包存储路径 CODE_SIGN_IDENTITY=证书 PROVISIONING_PROFILE=描述文件UUID
* echo "在项目工程文件内生成一个build子目录,里面有${PROJ_NAME}.App程序"
*
* echo "第5步, 导出ipa包"
*
* #.app生成后的路径
* app_name_path=$BUILD_PATH/build/Build/Products/Release-iphoneos/${PROJ_NAME}.app
* #.ipa生成后的路径
* ipa_name_path=$BUILD_PATH/build/Build/Products/Release-iphoneos/${PROJ_NAME}.ipa
* __EXPORT_OPTIONS_PLIST=$WORKSPATH_PATH/${PROJ_NAME}/ExportOptionsPro.plist
*
* #生成ipa包
* #xcrun -sdk iphoneos PackageApplication -v $app_name_path -o $ipa_name_path
* xcodebuild -exportArchive -archivePath "${BUILD_PATH}/archive/${PROJ_NAME}.xcarchive" -exportPath ${ipa_name_path} -exportOptionsPlist ${__EXPORT_OPTIONS_PLIST}
* echo "制作ipa包完成......................."
*
2. exportOptionsPlist 配置
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>compileBitcode</key>
<false/>
<key>destination</key>
<string>export</string>
<key>method</key>
<string>enterprise</string> // 可根据打包种类自行修改
<key>provisioningProfiles</key>
<dict>
<key>com.XXXX.XXX.XXXX</key> // bundleid
<string>XXXXXXX</string> // 符号表名字
</dict>
<key>signingCertificate</key>
<string>iPhone Distribution</string> // 类型
<key>signingStyle</key>
<string>manual</string>
<key>stripSwiftSymbols</key>
<true/>
<key>teamID</key>
<string>XXXXXX</string> // teamID
<key>uploadSymbols</key>
<true/>
<key>uploadBitcode</key>
<true/>
</dict>
</plist>