iOS技术iOS程序猿

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>

上一篇 下一篇

猜你喜欢

热点阅读