某一天,被告知客戶要使用企業賬号,要打包100多個iOS用戶端的管道包。剛聽到這個消息時候,我是崩潰的。然後還是得打,不是麼?
如果手動打然後一個一個導出來,第一反應就是這TM手都得斷吧。跟同僚商議一下過後,我說想試試寫個腳本來實作自動打包,這樣就省去了麻煩,恩 開搞!
首先語言選擇,Mac下不是經常跟shell打交道麼,是以就找到了一篇文章,鳥哥的linux私房菜,快速過目
http://vbird.dic.ksu.edu.tw/linux_basic/0340bashshell-scripts.php#script,然後開搞。
首先明确打包需要的管道ID,使用UMeng和JPush的都可能見到過ChannelID,那就是修改那個東西就行了。使用Shell修改Xcode工程的plist檔案,然後打包時候讀取不就搞定了麼。
- 在plist檔案中履歷ChannelID字段,指定預設的值為App Store.
- 在代碼中讀取該值,并且傳遞給Umeng的統計.
//友盟統計
//channelId配置到plist檔案,便于打管道包和修改
NSString *channelId;
NSBundle *bundle = [NSBundle mainBundle];
NSString *channelIdString = [bundle pathForResource:@"info"ofType:@"plist"];
if (channelIdString && [[NSFileManager defaultManager] fileExistsAtPath:channelIdString])
{
NSDictionary *dic = [NSDictionary dictionaryWithContentsOfFile:channelIdString];
channelId = [dic objectForKey:@"ChannelID"];
}
if (!channelId || channelId.length == )
{
channelId = @"";
}
[MobClick startWithAppkey:kUmengAppKey reportPolicy:BATCH channelId:channelId];
- 然後打包導出,不就搞定了麼
#變量配置
#循環數組,需要打包的管道名稱,以空格隔開
channelArray=("channelID1" "channelID2")
projectName="工程名字"
schemaName="工程Schema名字"
channelIDPlistFilePath="指向存儲ChannelID的plist檔案路徑"
provisoningProfileName="release的provisoningProfile名字"
#擷取目前路徑
projectPath=$PWD
echo $projectPath
echo $projectName
echo $schemaName
for ((i=;i<${#channelArray[@]};i++))
do
echo ${channelArray[$i]}
#清除上次編譯
xcodebuild clean -project $projectName.xcodeproj -configuration Release -alltargets
#修改plist檔案中的key CHANNELID,key隻需要和下面的保持一緻
/usr/libexec/PlistBuddy -c "set :ChannelID ${channelArray[$i]}" $channelIDPlistFilePath
#編譯
xcodebuild archive -project $projectName.xcodeproj -scheme $schemaName -archivePath $projectName.xcarchive
#生成ipa
xcodebuild -exportArchive -archivePath $projectName.xcarchive -exportPath $projectName_${channelArray[$i]} -exportFormat ipa -exportProvisioningProfile "$provisoningProfileName"
done
- 接下來就是執行了,打開你的terminal,輸入 cd 工程路徑
- 然後回車 輸入 sh 拖入腳本,再回車,就靜靜的等待打包完成吧。