關(guān)于xocde自動化打包香缺,其實網(wǎng)上的內(nèi)容很多手销,自己在網(wǎng)上也找到了很多歇僧,大部分都是很正確的图张,這里我就只說下workspace的打包。
步驟:
1.首先運行到你的project目錄下诈悍。cd?/Users/admin/Desktop/project
2.clear你的項目祸轮。xcodebuild clean 或者usr/bin/xcodebuild clean
3.build你的項目。xcodebuild -workspace 或者usr/bin/xcodebuild?-workspace項目名稱.xcworkspace -scheme scheme名稱(大部分跟項目名稱是一樣的侥钳,只要你沒改的話) -sdk iphoneos -configuration Release -derivedDataPath build ? ?
這個命令會在你的項目列表下創(chuàng)建一個build的目錄适袜,如果你不想創(chuàng)建在這里的話,你可以在derivedDataPath后面空格之后輸入你的想保存build文件的路徑地址舷夺。
4.打包成ipa苦酱。xcrun或者usr/bin/xcrun -sdk iphoneos PackageApplication -v 第三步build成功的(項目名稱.app)文件路徑 -o 保存ipa的路徑(如:/Users/admin/Desktop/xxx.ipa)
注意:
這里Xcode8.3之后沒有PackageApplication文件,需要下載之后復(fù)制在:右鍵 Xcode.app -> 顯示包內(nèi)容 -> Contents -> Developer -> platforms -> iPhoneOS.platform -> Developer -> usr -> bin给猾,進入這個目錄之后疫萤,將下載的PackageApplication復(fù)制到這個目錄。
之后執(zhí)行命令:cd 到這個目錄下 ?之后 chmod +x?PackageApplication賦予這個文件你執(zhí)行的權(quán)利敢伸。
先上一份打包ipa腳本代碼:
#項目地址
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
接下來就是.app企業(yè)簽名過程:
其實上面:
?#編譯 build
xcodebuild -workspace projectName.xcworkspace -scheme?projectName?-sdk iphoneos -configuration Release -derivedDataPath build
這個步驟已經(jīng)編譯出來.app文件了扯饶,直接給這個.app文件簽名就可以了。
簽名步驟:
注:$TARGET_APP_PATH為你.app文件的路徑池颈。
1.首先你需要把你簽名的.mobileprovision文件改名為embedded.mobileprovision尾序,然后復(fù)制到.app文件里面,替換其中的embedded.mobileprovision躯砰。
cp 企業(yè)簽名embedded.mobileprovision文件的路徑 ?.app的路徑
2.如果有的話每币,刪除extension和WatchAPP.個人證書沒法簽名Extention
rm -rf "$TARGET_APP_PATH/PlugIns"
?rm -rf"$TARGET_APP_PATH/Watch"
3.如果你想更改bundleid或者version或者displayname的話,你可以直接在.app文件下面的info.plist進行更改琢歇。
/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.需要手動給.app里面所有的FrameWorks進行簽名兰怠,如果沒有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.對你的.app文件進行重簽名矿微。
codesign -fs?"iPhone Distribution:xxx?Co.,Ltd"?--no-strict --entitlements=簽名需要的plist文件路徑 $TARGET_APP_PATH
注意:其中簽名需要的plist文件路徑需要自己去創(chuàng)建痕慢,創(chuàng)建步驟如下:
獲取embedded.mobileprovision的信息的命令為:
通過下屬命令獲取里面的文件信息security cms -D -i embedded.mobileprovision/*
終端會打印出來所有信息,我們需要選擇Entitlements為key的字典,將其copy出來,
*/
copy的模塊內(nèi)容如下:
可以在xcode中,選中plist文件,右鍵,openAs--SourceCode,將內(nèi)容copy進去保存即可。
將上面的文件命名為elements.plist(任意名字都可以,為了方便理解)文件放到Payload同級目錄下(其實放哪都行,只是為了操作方便)涌矢。
接下來直接貼代碼:
#項目地址
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)證書名
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.個人證書沒法簽名Extention
? ? ? ? rm -rf"$TARGET_APP_PATH/PlugIns"
? ? ? ? rm -rf"$TARGET_APP_PATH/Watch"
? ? ? ? #----------------------------------------
? ? ? ? # 4. 更新info.plist文件 CFBundleIdentifier
? ? ? ? #? 設(shè)置:"Set : KEY Value" "目標文件路徑"
? ? ? ? /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
接下來就是自己創(chuàng)建一個.sh文件掖举,然后復(fù)制代碼進去,修改成你自己的路徑娜庇。
最后cd 到你的.sh文件目錄下塔次。
運行.sh文件:
./xxx.sh
大體上就是這樣方篮,我自己測試下完全是可以使用的。