天天看點

Xcode多管道自動化打包

某一天,被告知客戶要使用企業賬号,要打包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檔案,然後打包時候讀取不就搞定了麼。

  1. 在plist檔案中履歷ChannelID字段,指定預設的值為App Store.
  2. 在代碼中讀取該值,并且傳遞給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];
           
  1. 然後打包導出,不就搞定了麼
#變量配置
        #循環數組,需要打包的管道名稱,以空格隔開
        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
           
  1. 接下來就是執行了,打開你的terminal,輸入 cd 工程路徑
  2. 然後回車 輸入 sh 拖入腳本,再回車,就靜靜的等待打包完成吧。