Xcode自動(dòng)化打包ipa,.app文件自動(dòng)化企業(yè)簽名

關(guān)于xocde自動(dòng)化打包,其實(shí)網(wǎng)上的內(nèi)容很多,自己在網(wǎng)上也找到了很多,大部分都是很正確的,這里我就只說(shuō)下workspace的打包。

步驟:

1.首先運(yùn)行到你的project目錄下。cd?/Users/admin/Desktop/project

2.clear你的項(xiàng)目。xcodebuild clean 或者usr/bin/xcodebuild clean

3.build你的項(xiàng)目。xcodebuild -workspace 或者usr/bin/xcodebuild?-workspace項(xiàng)目名稱.xcworkspace -scheme scheme名稱(大部分跟項(xiàng)目名稱是一樣的,只要你沒(méi)改的話) -sdk iphoneos -configuration Release -derivedDataPath build ? ?

這個(gè)命令會(huì)在你的項(xiàng)目列表下創(chuàng)建一個(gè)build的目錄,如果你不想創(chuàng)建在這里的話,你可以在derivedDataPath后面空格之后輸入你的想保存build文件的路徑地址。

4.打包成ipa。xcrun或者usr/bin/xcrun -sdk iphoneos PackageApplication -v 第三步build成功的(項(xiàng)目名稱.app)文件路徑 -o 保存ipa的路徑(如:/Users/admin/Desktop/xxx.ipa)

注意:

這里Xcode8.3之后沒(méi)有PackageApplication文件,需要下載之后復(fù)制在:右鍵 Xcode.app -> 顯示包內(nèi)容 -> Contents -> Developer -> platforms -> iPhoneOS.platform -> Developer -> usr -> bin,進(jìn)入這個(gè)目錄之后,將下載的PackageApplication復(fù)制到這個(gè)目錄。

之后執(zhí)行命令:cd 到這個(gè)目錄下 ?之后 chmod +x?PackageApplication賦予這個(gè)文件你執(zhí)行的權(quán)利。

先上一份打包ipa腳本代碼:


#項(xiàng)目地址

PROJECTPATH='/Users/admin/Desktop/projectName'

#app的地址

TARGET_APP_PATH="$PROJECTPATH/build/Build/Products/Release-iphoneos/projectName.app"

#保存ipa地址

IPAPATH='/Users/admin/Desktop/appipa'

? ? ? ? cd $PROJECTPATH

? ? ? ? #清除

? ? ? ? xcodebuild clean

? ? ? ? #編譯 build

? ? ? ? xcodebuild -workspace projectName.xcworkspace -scheme projectName -sdk iphoneos -configuration Release -derivedDataPath build

#xcworkspace打包

? ? ? ? xcrun -sdk iphoneos PackageApplication -v $TARGET_APP_PATH -o "$IPAPATH/xxx.ipa"

?? ? ? rm -rf ./Build


接下來(lái)就是.app企業(yè)簽名過(guò)程:

其實(shí)上面:


?#編譯 build

xcodebuild -workspace projectName.xcworkspace -scheme?projectName?-sdk iphoneos -configuration Release -derivedDataPath build

這個(gè)步驟已經(jīng)編譯出來(lái).app文件了,直接給這個(gè).app文件簽名就可以了。

簽名步驟:


注:$TARGET_APP_PATH為你.app文件的路徑。


1.首先你需要把你簽名的.mobileprovision文件改名為embedded.mobileprovision,然后復(fù)制到.app文件里面,替換其中的embedded.mobileprovision。


cp 企業(yè)簽名embedded.mobileprovision文件的路徑 ?.app的路徑


2.如果有的話,刪除extension和WatchAPP.個(gè)人證書(shū)沒(méi)法簽名Extention


rm -rf "$TARGET_APP_PATH/PlugIns"

?rm -rf"$TARGET_APP_PATH/Watch"


3.如果你想更改bundleid或者version或者displayname的話,你可以直接在.app文件下面的info.plist進(jìn)行更改。


/usr/libexec/PlistBuddy -c "Set :CFBundleIdentifier $bundleId" "$TARGET_APP_PATH/Info.plist"

4.給MachO文件上執(zhí)行權(quán)限:


# 拿到MachO文件的路徑

? ? ? ? APP_BINARY=`plutil -convert xml1 -o - $TARGET_APP_PATH/Info.plist|grep -A1 Exec|tail -n1|cut -f2 -d\>|cut -f1 -d\<`

? ? ? ? #上可執(zhí)行權(quán)限

? ? ? ? chmod +x"$TARGET_APP_PATH/$APP_BINARY"


5.需要手動(dòng)給.app里面所有的FrameWorks進(jìn)行簽名,如果沒(méi)有FrameWorks文件的話就不需要重簽了。


TARGET_APP_FRAMEWORKS_PATH="$TARGET_APP_PATH/Frameworks"

? ? ? ? if [ -d "$TARGET_APP_FRAMEWORKS_PATH" ];

? ? ? ? then

? ? ? ? for FRAMEWORK in "$TARGET_APP_FRAMEWORKS_PATH/"*

? ? ? ? ? ? do

? ? ? ? ? ? #簽名

? ? ? ? ? ? /usr/bin/codesign --force --sign "iPhone Distribution:xxx?Co.,Ltd" "$FRAMEWORK"

? ? ? ? ? ? done

? ? ? ? fi


6.對(duì)你的.app文件進(jìn)行重簽名。


codesign -fs?"iPhone Distribution:xxx?Co.,Ltd"?--no-strict --entitlements=簽名需要的plist文件路徑 $TARGET_APP_PATH


注意:其中簽名需要的plist文件路徑需要自己去創(chuàng)建,創(chuàng)建步驟如下:

獲取embedded.mobileprovision的信息的命令為:

通過(guò)下屬命令獲取里面的文件信息security cms -D -i embedded.mobileprovision/*

終端會(huì)打印出來(lái)所有信息,我們需要選擇Entitlements為key的字典,將其copy出來(lái),

*/

copy的模塊內(nèi)容如下:

可以在xcode中,選中plist文件,右鍵,openAs--SourceCode,將內(nèi)容copy進(jìn)去保存即可。

將上面的文件命名為elements.plist(任意名字都可以,為了方便理解)文件放到Payload同級(jí)目錄下(其實(shí)放哪都行,只是為了操作方便)。

接下來(lái)直接貼代碼:


#項(xiàng)目地址

PROJECTPATH='/Users/liu/Desktop/projectName'

#app的地址

TARGET_APP_PATH="$PROJECTPATH/build/Build/Products/Release-iphoneos/projectName.app"

#保存ipa地址

IPAPATH='/Users/admin/Desktop/appipa'

#企業(yè)(enterprise)證書(shū)名

CODE_SIGN_NAME="iPhone Distribution: xxx Co.,Ltd"

#mobileprovision文件

mobile_provision="/Users/admin/Desktop/IR/embedded.mobileprovision"

#簽名embedded.plist路徑

embedded_plist_path="/Users/admin/Desktop/IR/embedded.plist"

#? ? ? ? ? 打包

? ? ? ? cd $PROJECTPATH

? ? ? ? #清除

? ? ? ? xcodebuild clean

? ? ? ? #打包

? ? ? ? #編譯 build

? ? ? ? xcodebuild -workspace D9Lottery.xcworkspace -scheme D9Lottery -sdk iphoneos -configuration Release -derivedDataPath build

###########################

#? ? ? .app文件簽名

? ? ? ? #cp -r $TARGET_APP_PATH "/Users/wz/Desktop/appipa"

? ? ? ? cp $mobile_provision $TARGET_APP_PATH

? ? ? ? printMessage"復(fù)制embedded.mobileprovision"

? ? ? ? #----------------------------------------

? ? ? ? # 3. 刪除extension和WatchAPP.個(gè)人證書(shū)沒(méi)法簽名Extention

? ? ? ? rm -rf"$TARGET_APP_PATH/PlugIns"

? ? ? ? rm -rf"$TARGET_APP_PATH/Watch"

? ? ? ? #----------------------------------------

? ? ? ? # 4. 更新info.plist文件 CFBundleIdentifier

? ? ? ? #? 設(shè)置:"Set : KEY Value" "目標(biāo)文件路徑"

? ? ? ? /usr/libexec/PlistBuddy -c"Set :CFBundleIdentifier $bundleId" "$TARGET_APP_PATH/Info.plist"

? ? ? ? #----------------------------------------

? ? ? ? # 5. 給MachO文件上執(zhí)行權(quán)限

? ? ? ? # 拿到MachO文件的路徑

? ? ? ? APP_BINARY=`plutil -convert xml1 -o - $TARGET_APP_PATH/Info.plist|grep -A1 Exec|tail -n1|cut -f2 -d\>|cut -f1 -d\<`

? ? ? ? #上可執(zhí)行權(quán)限

? ? ? ? chmod +x"$TARGET_APP_PATH/$APP_BINARY"

? ? ? ? #----------------------------------------

? ? ? ? # 6. 重簽名第三方 FrameWorks

? ? ? ? TARGET_APP_FRAMEWORKS_PATH="$TARGET_APP_PATH/Frameworks"

? ? ? ? if [ -d "$TARGET_APP_FRAMEWORKS_PATH" ];

? ? ? ? then

? ? ? ? for FRAMEWORK in "$TARGET_APP_FRAMEWORKS_PATH/"*

? ? ? ? ? ? do

? ? ? ? ? ? #簽名

? ? ? ? ? ? /usr/bin/codesign --force --sign"${CODE_SIGN_NAME}""$FRAMEWORK"

? ? ? ? ? ? done

? ? ? ? fi

? ? ? ? #簽名

? ? ? ? ? ? codesign -fs"${CODE_SIGN_NAME}"--no-strict --entitlements=$embedded_plist_path $TARGET_APP_PATH

###########################

? ? ? ? #xcworkspace打包

? ? ? ? xcrun -sdk iphoneos PackageApplication -v $TARGET_APP_PATH -o"$IPAPATH/$ipaName"

?? ? ? rm -rf ./Build


最后上一條查看.app文件簽名信息命令:

codesign -vv -d Example.app


接下來(lái)就是自己創(chuàng)建一個(gè).sh文件,然后復(fù)制代碼進(jìn)去,修改成你自己的路徑。

最后cd 到你的.sh文件目錄下。

運(yùn)行.sh文件:


./xxx.sh


大體上就是這樣,我自己測(cè)試下完全是可以使用的。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容