1. 程式人生 > >iOS自動化打包修改圖示及一些引數

iOS自動化打包修改圖示及一些引數

xcodebuild打包

使用xcodebuild打包有三種情況,一種是adHoc測試打包ipa,一個是上傳AppStore打包,一個企業級別打包。以下只介紹企業級別打包步驟。

一:終端分步實現如下

  1. 開啟終端,cd到當前目錄工程
  2. 在終端中輸入一下內容來完成編譯
    xcodebuild archive -workspace XXX.xcworkspace -scheme XXX -configuration Release -archivePath ./myArchivePath CONFIGURATION_BUILD_DIR ./dir ODE_SIGN_IDENTITY=證書 PROVISIONING_PROFILE=描述檔案UUID

引數說明
如果工程是勾選了Automatically manage signing,那麼就不用在配置ODE_SIGN_IDENTITY和PROVISIONING_PROFILE。假如需要在指令碼檔案中自己配置證書的話,需在工程中勾掉這個選項,手動配置證書。如下

證書選擇
證書名字在鑰匙串裡複製打包所用的證書名字即可
配置檔案UUID:首先在Finder中前往/Users/使用者名稱/Library/MobileDevice/Provisioning Profiles路徑(使用者名稱記得替換成自己的電腦名字)然後在路徑下找到當前bundleId所使用的配置檔案,檔名即為UUID。
3. 配置打包的ExportOptions.plist檔案
可以在任意一個Xcode工程中新建一個ExportOptions.plist檔案
1


如果要手動在下面.sh檔案裡面設定證書的話,ExportOptions.plist檔案要加字典provisioningProfiles,鍵值對是bundleID和對應的配置證書UUID。
4. 工程路徑下的終端中輸入xcodebuild -exportArchive -archivePath ./myArchivePath.xcarchive -exportOptionsPlist ./ExportOptions.plist -exportPath ./out ,這一步實際就是Xcode編譯號後在工程中勾選打包的選擇。只是用配置檔案的方式來抵銷手動選擇。

將上述步驟放入shell指令碼中,可以修改圖示,bundleID等

1.cd到需要自動打包的工程下
2.在終端中輸入touch xcodebuild.sh建立xcodebuild.sh指令碼檔案
3.雙擊開啟指令碼寫入下面 指令碼內容(請確保所有版本的plist配置檔案都寫好了)
4.在終端中輸入 ./xcodebuild.sh執行指令碼,按照步驟完成打包選擇(如果執行的時候出現Permission denied,請先在終端中執行chmod a+x *.檔案的字尾名 後,在執行。)
下面指令碼是需要先輸入版本號:

#
#指令碼所在的目錄必須和WorkSpace或者說工程主目錄所在的目錄在同一個目錄層級中
#指令碼所在的目錄必須和WorkSpace或者說工程主目錄所在的目錄在同一個目錄層級中

#配置引數

#workspace的名字,如果沒有則不需要
Workspace_Name="xx"

#工程名字
Project_Name="xx"

echo "place enter the version you want to export"

read version
#判斷version是否為空
if [[ -z $version ]];
then
echo "請輸入版本號"
exit 1
else
echo "版本號為 $version"
fi
#version="1.0.1"

bundleId="com.cm.sS"

appName="demo"
#配置打包方式Release或者Debug
Configuration="Release"

#基礎主路徑
BUILD_PATH=./build

echo $BUILD_PATH
#工程地址
project_path='.'
#基礎子路徑
#enterprise
ENTERPRISE_PATH=${BUILD_PATH}/${Project_Name}/enterprise
#圖示替換
#注意icon 使用Images.xcassets/AppIcon.appiconset
#launch使用Images.xcassets/LaunchImage.launchimage
#測試使用圖示icon
#resource_path=./圖示/bailu
#正式使用圖示icon
resource_path=./圖示/icon
echo $resource_path

#配置編譯檔案的存放地址
#企業
CONFIGURATION_BUILD_PATH_ENTERPRISE=${ENTERPRISE_PATH}/${Configuration}-iphoneos

#配置打包結果輸出的路徑
#企業版本
EnterprisePrijectOutPath=${ENTERPRISE_PATH}/enterpriseOut

#如果工程中配置了Automatically manage signing,那麼就不需要證書名和描述檔名,請確保工程中配置的證書名和描述檔案是你打包想要用的
#企業(enterprise)證書名#描述檔案
ENTERPRISECODE_SIGN_IDENTITY="iPhone Distribution: x x x x"
ENTERPRISEROVISIONING_PROFILE_NAME="xxxx"uuid

#載入的plist檔案
EnterpriseExportOptionsPlist="./ExportOptions.plist"

#要替換的icons素材
icons=([email protected] [email protected] [email protected] [email protected] [email protected] [email protected] [email protected] [email protected])
launchs=([email protected] [email protected] [email protected] [email protected] [email protected] [email protected])


#首先清除原來的資料夾
rm -rf ${BUILD_PATH}
#建立資料夾,路徑需要一層一層建立,不然會建立失敗
mkdir ${BUILD_PATH}
mkdir ${ENTERPRISE_PATH}
#編譯檔案
mkdir ${CONFIGURATION_BUILD_PATH_ENTERPRISE}
#打包輸出的檔案
mkdir ${EnterprisePrijectOutPath}
#copy
mkdir ${DSYM_COPY_PATH_ENTERPRISE}


#---------------------------------------------------------------------------------------------------------------------------------

prepare(){

plist_path="${project_path}/${Project_Name}/Info.plist"
echo $plist_path

#替換displayName以及bundleId
sed -i '' "/CFBundleDisplayName/{n;s/<string>.*<\/string>/<string>${appName}<\/string>/;}" $plist_path
sed -i '' "/CFBundleName/{n;s/<string>.*<\/string>/<string>${appName}<\/string>/;}" $plist_path
sed -i '' "/CFBundleIdentifier/{n;s/<string>.*<\/string>/<string>${bundleId}<\/string>/;}" $plist_path
sed -i '' "/CFBundleShortVersionString/{n;s/<string>.*<\/string>/<string>${version}<\/string>/;}" $plist_path
sed -i '' "/CFBundleVersion/{n;s/<string>.*<\/string>/<string>${version}<\/string>/;}" $plist_path

#m為下列while迴圈的引數
m=0
while [[ m -lt ${#icons[@]} ]]; do
icon=${icons[m]}
echo "${icon}"
let m++
#替換圖示、啟動圖
cp "${resource_path}/${icon}" "${project_path}/${Project_Name}/Images.xcassets/AppIcon.appiconset/${icon}"
done

n=0
while [[ n -lt ${#launchs[@]} ]]; do
launch=${launchs[n]}
echo "${launch}"
let n++
#替換圖示、啟動圖
cp "${resource_path}/${launch}" "${project_path}/${Project_Name}/Images.xcassets/LaunchImage.launchimage/${launch}"
done


}
prepare

#exit 1
#
#xcodebuild archive -workspace ${Project_Name}.xcworkspace -scheme $Project_Name -configuration $Configuration -archivePath ${ENTERPRISE_PATH}/$Project_Name-enterprise.xcarchive

xcodebuild archive -workspace ${Project_Name}.xcworkspace -scheme $Project_Name -configuration $Configuration -archivePath ${ENTERPRISE_PATH}/$Project_Name-enterprise.xcarchive
CODE_SIGN_IDENTITY="${ENTERPRISECODE_SIGN_IDENTITY}" PROVISIONING_PROFILE="${ENTERPRISEROVISIONING_PROFILE_NAME}" PRODUCT_BUNDLE_IDENTIFIER=${bundleId}

xcodebuild -exportArchive -archivePath ${ENTERPRISE_PATH}/$Project_Name-enterprise.xcarchive -exportOptionsPlist $EnterpriseExportOptionsPlist -exportPath ${EnterprisePrijectOutPath}


manifestplist_path="${EnterprisePrijectOutPath}/manifest.plist"
echo $plist_path

#替換displayName以及bundleId
sed -i '' "/title/{n;s/<string>.*<\/string>/<string>${appName}<\/string>/;}" $manifestplist_path
sed -i '' "/bundle-identifier/{n;s/<string>.*<\/string>/<string>${bundleId}<\/string>/;}" $manifestplist_path
m=0

#建立copy資料夾
mkdir ${DSYM_COPY_PATH_ENTERPRISE}
# 選擇是壓縮還是複製,複製的方法可以用於上傳檔案到指定伺服器,比如上傳到git
# zip -r 目標路徑  原始檔路徑 ,開始壓縮dSYM檔案
zip -r ${DSYM_ZIP_PATH_ENTERPRISE} ${DSYM_PATH_ENTERPRISE}
# cp -r 原始檔路徑 目標路徑 , 把壓縮包拷貝到指定地方
cp -r ${DSYM_ZIP_PATH_ENTERPRISE} ${DSYM_COPY_PATH_ENTERPRISE}
# 將 dSYM 包裡的 demo 檔案 上傳到指定地點
TARGET_PATH=${DSYM_COPY_PATH}/${Project_Name}.app.dSYM/Contents/Resources/DWARF/${Project_Name} cp ${TARGET_PATH} ${EXPORT_DIR}

echo "打包完成"