iOS多應用自動打包


多應用自動打包

前言

網上很多文章都是陳詞濫調,老黃歷啦,在XCode多次更新后,那些腳本,那些命令已經不管用啦。

本文是基於XCode8.3版本的。

需求描述

要求做一個工具,可以批量打上百個應用,這些應用有不同的icon,啟動圖,bundleID,第三方賬號,和其他一些業務相關的差異。

做起來~

重簽名打包是有多種方法實現的。

我原來是用xcodebuild命令直接打出ipa包,然后重簽名再導出的。

但執行xcrun -sdk iphoneos PackageApplication命令時發現,新版OS X已經沒有PackageApplication工具了。

所以采用了以下方法:編譯出xcarchive包,再使用xcodebuild導出ipa。

編譯

xcodebuild -quiet -workspace xxx.xcworkspace -scheme xxx -configuration Release clean -sdk iphoneos -archivePath xxx.xcarchive archive

修改

修改bundleID等Info.plist中的內容:

簡單的數據格式:

defaults write ${InfoPlistPath} key value

復雜的數據格式:

defaults write $InfoPlistPath "CFBundleURLTypes" -array-add "<dict>
			<key>CFBundleTypeRole</key>
			<string>Editor</string>
			<key>CFBundleURLSchemes</key>
			<array>
				<string>xxx</string>
			</array>
		</dict>"	

修改icon等資源文件

使用cp命令替換

重簽名

一段題外話:由於某些錯誤,我打出了可以安裝成功的adhoc包,但是檢查證書才發現,是用的dev證書簽名的,也是夠神奇的了。

XCode8.3會在導出時自動根據bundleid重簽名,但問題是不會自動修改包里的embedded.mobileprovision文件(也就是配置文件),會導致在使用Application Loader上傳包時,報錯說配置文件與簽名證書不符。

我嘗試過直接使用cp替換配置文件,但在導出時,它又給我換回去了。。。

所以采取了先重簽名再導出的方法。

security cms -D -i "embedded.mobileprovision" > t_entitlements_full.plist
/usr/libexec/PlistBuddy -x -c 'Print:Entitlements' t_entitlements_full.plist > entitlements.plist
Entitlements=entitlements.plist

codesign -f -s "$tcertificationname" --entitlements $Entitlements ${tapppackagepath}

注意:--entitlements $Entitlements這個參數十分重要,對應的是一個plist文件,但不能通過手動編輯的方式生成這個文件,必須通過命令(好神奇吧)。

關於entitlements后續更新。

導出

defaults write ${exportoptionsplistpath} "teamID" "${tteamid}"
defaults write ${exportoptionsplistpath} "export_method" "${texportmethod}"
defaults write ${exportoptionsplistpath} "uploadSymbols" -bool true

xcodebuild  -exportArchive -exportOptionsPlist ${exportoptionsplistpath} -archivePath xxx.xcarchive -exportPath

-exportOptionsPlist參數是新出的,目前已知的參數有:

  • teamID
  • export_method:值為ad-hoc或者app-store,如果找不到該參數,就會使用dev證書簽名。。。
  • uploadSymbols


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM