由於公司有批量打包的需要,只是渠道號不一樣,網上搜索一番,大致有兩個方式:a) 從源程序一次性打出所有渠道的ipa包,大概的思路就是利用腳本循環執行打包過程,而每次打包前都通過腳本修改項目中存放渠道號的文件為當前循環的最新渠道號,讓后逐個打包。b) 提供一個ipa格式的母包 從母包生成其它所有的渠道包,可能你會問:用一個包生成其他的包可行么??
原因是這樣的:因為每個渠道只是渠道號發生變化,而其他的內容又不會發生變化,而我們的渠道號又是存儲在Info.plist這個文件中的,所以只要改變母包中的Info.plist文件的內容即可,而ipa包又是同zip格式進行壓縮,所以基本思路就是通過zip先對母包進行解壓,然后改變Info.plist的內容 最后再用zip進行壓縮成相應的渠道包即可。
通過從母包打出其他渠道的包這種方法:得到以下好處
i. 降低了rd ,qa的工作量。
ii. 讓測試發布程序時的風險得到了控制。
iii. 提高了打包發布工作效率。(幾十個包 只需短短的幾分鍾)。
iv. 提高了自動化。
v. 不依賴mac 以及xcode環境 直接在linux 下即可完成 從母包生成其它包
具體代碼如下:(可以用xcode 創建.sh文件)
#可以直接把把編輯好的Script.sh 文件拖到終端上 回車 或者終端輸入 ./Script.sh
#遇到權限問題可以執行 chmod 777 Script.sh
#!/bin/sh
CONFIG_ROOT_PATH="/Users/hezhujin/Desktop/"#.ipa母包的路徑
cd $CONFIG_ROOT_PATH
sourceipaname="wgc_ios.ipa" #ipa母包的名字
appname="wgc_ios.app" #解壓后Payload目錄項.app文件名需要根據自己的項目修改
distDir="/Users/hezhujin/Desktop/Qa" #打包后文件存儲目錄
rm -rdf "$distDir "
mkdir "$distDir"
unzip $sourceipaname #解壓母包文件
for ((i=1001;i<1011;i++))
do
cd Payload
cd $appname
targetName="wgc_ios"
/usr/libexec/PlistBuddy -c "set :kChannelNumber ${i}" Info.plist #修改Info.plist文件的kChannelNumber 對應的值,Info.plist中必須先存在這個Key 才能修改
cd ../..
zip -r "${targetName}_${i}.ipa" Payload #打成其他渠道的包
mv "${targetName}_${i}.ipa" $distDir #移動打好的包到目標路徑
done
rm -rdf Payload
///////////////////////////////////////////////////////////////////
以下是用數組形式循環指定的渠道號 非遞增形式
#!/bin/sh
CONFIG_ROOT_PATH="/Users/hezhujin/Desktop/"
cd $CONFIG_ROOT_PATH
sourceipaname="wgc_ios.ipa"
appname="wgc_ios.app" #加壓后Pauload目錄項.app文件名需要根據自己的項目修改
distDir="/Users/hezhujin/Desktop/Qa" #打包后文件存儲目錄
rm -rdf "$distDir "
mkdir "$distDir"
unzip $sourceipaname #解壓母包文件
kChannelNumber=("aaa" "bbb" "ccc")
for ((i=0;i<${#kChannelNumber};i++))
do
cd Payload
cd $appname
ipafilename=${kChannelNumber[$i]}
targetName="wgc_ios"
/usr/libexec/PlistBuddy -c "set :kChannelNumber ${kChannelNumber[$i]}" Info.plist
cd ../..
zip -r "${targetName}_${ipafilename}.ipa" Payload #打成其他渠道的包
mv "${targetName}_${ipafilename}.ipa" $distDir
done
rm -rdf Payload
///////////////////////////////////////////////////////////////////
以下是不建議的方法:每次包都是重新編譯的方法
#!/bin/sh
# Script.sh
# shell
#
# Created by hezhujin on 15/3/4.
# Copyright (c) 2015年 hezhujin. All rights reserved.
#!/bin/sh
CONFIG_ROOT_PATH="/Users/hezhujin/Desktop/wgc_ios"
cd $CONFIG_ROOT_PATH
#循環數
CHANNELID=("aa" "bb" "cc")
for ((i=0;i<${#CHANNELID};i++))
do
#刪除
rm -rf "/Users/hezhujin/Desktop/wgc_ios/build/"
#清除
xcodebuild -target wgc_ios clean
#修改plist
/usr/libexec/PlistBuddy -c "set :CHANNELID ${CHANNELID[$i]}" /Users/hezhujin/Desktop/wgc_ios/wgc_ios/Info.plist
#/usr/libexec/PlistBuddy -c "Set :CFBundleShortVersionString 1.0.4" /Users/hezhujin/Desktop/wgc_ios/wgc_ios/Info.plist
#打包
xcodebuild -target wgc_ios -configuration Distribution -sdk iphoneos build
#生成ipa
xcrun -sdk iphoneos PackageApplication -v "/Users/hezhujin/Desktop/wgc_ios/build/Release-iphoneos/wgc_ios.app" -o "/Users/hezhujin/Desktop/wgc_ios/wgc_ios_${CHANNELID[$i]}.ipa"
done