一般項(xiàng)目到了測(cè)試階段,給內(nèi)部非iOS開(kāi)發(fā)人員分發(fā)測(cè)試包就成了必不可少的工作。常用的打包方式是使用Xcode->Product->Archive,但是真的是太慢了。
使用Xcode生成打包測(cè)試包并上傳FTP
1.打開(kāi)項(xiàng)目設(shè)置頁(yè)面選擇Build Phases
2.點(diǎn)左上角+號(hào),選擇New Run Script Phase
3.新增以下指令
# Type a script or drag a script file from your workspace to insert its path.
# 文件夾名稱
FILENAME="IpaBuild"
# 測(cè)試包腳本名字
BUILDNAME="ipaBuild"
# 上傳FTP腳本名字
FTPNAME="ipaUpload"
# 測(cè)試包并上FTP腳本名字
BUILDWITHFTPNAME="ipaBuildAndUpload"
# 項(xiàng)目構(gòu)建目錄
PRODUCTS_PATH="${BUILT_PRODUCTS_DIR}"
# 項(xiàng)目目錄
TARGET_APP_PATH="$PRODUCTS_PATH/${TARGET_NAME}.app"
# 打包項(xiàng)目名字
#APPNAME="${TARGET_NAME}"
APPNAME="appstore"
# FTP上傳-項(xiàng)目根目錄
UPLOADFILENAMEBEFORE="${SRCROOT}"
# FTP上傳-包
UPLOADFILENAME="/$BUILDNAME/$APPNAME.ipa"
# FTP地址
HOST="xxx.xxx.x.xx"
# FTP賬號(hào)
USERNAME="xxx"
# FTP密碼
PASSWORD="xxx"
# FTP路徑
HOSTFILEPATH="/xxx/xxx/xxx/"
# 每次構(gòu)建都清理目錄
rm -rf $FILENAME
mkdir -p $FILENAME
# 測(cè)試包腳本
cd $FILENAME
touch $BUILDNAME.command
chmod +x $BUILDNAME.command
echo "#!/bin/bash" >> $BUILDNAME.command
echo 'cd `dirname $0`;' >> $BUILDNAME.command
echo "mkdir Payload;" >> $BUILDNAME.command
echo "echo =============================打包中=============================;" >> $BUILDNAME.command
echo "${BUILT_PRODUCTS}"
echo "cp -rf $TARGET_APP_PATH Payload;" >> $BUILDNAME.command
echo "zip -r -q $APPNAME.ipa Payload;" >> $BUILDNAME.command
echo "rm -rf Payload;" >> $BUILDNAME.command
echo "echo =============================打包完成=============================;" >> $BUILDNAME.command
echo "exit;" >> $BUILDNAME.command
# 上傳FTP腳本
cd $FILENAME
touch $FTPNAME.command
chmod +x $FTPNAME.command
echo "#!/usr/bin/expect -f" >> $FTPNAME.command
echo "set uploadFileNameBefore $UPLOADFILENAMEBEFORE" >> $FTPNAME.command
echo "set uploadFileName $UPLOADFILENAME" >> $FTPNAME.command
echo "set host $HOST" >> $FTPNAME.command
echo "set username $USERNAME" >> $FTPNAME.command
echo "set password $PASSWORD" >> $FTPNAME.command
echo "spawn sftp $USERNAME@$HOST" >> $FTPNAME.command
echo 'expect {
"(yes/no)?" {send "yes\r"; exp_continue}
"password:" {send "'$PASSWORD'\r"}
}' >> $FTPNAME.command
echo 'expect "sftp>"' >> $FTPNAME.command
echo 'send "cd '$HOSTFILEPATH'\r"' >> $FTPNAME.command
echo 'expect "sftp>"' >> $FTPNAME.command
echo 'send "put '$UPLOADFILENAMEBEFORE''$UPLOADFILENAME'\r"' >> $FTPNAME.command
echo 'expect "sftp>"' >> $FTPNAME.command
echo 'send "bye\r"' >> $FTPNAME.command
echo "expect eof" >> $FTPNAME.command
# 測(cè)試包并上FTP腳本
cd $FILENAME
touch $BUILDWITHFTPNAME.command
chmod +x $BUILDWITHFTPNAME.command
echo "#!/bin/bash" >> $BUILDWITHFTPNAME.command
echo 'cd `dirname $0`;' >> $BUILDWITHFTPNAME.command
echo "mkdir Payload;" >> $BUILDWITHFTPNAME.command
echo "echo =============================打包中=============================;" >> $BUILDWITHFTPNAME.command
echo "${BUILT_PRODUCTS}"
echo "cp -rf $TARGET_APP_PATH Payload;" >> $BUILDWITHFTPNAME.command
echo "zip -r -q $APPNAME.ipa Payload;" >> $BUILDWITHFTPNAME.command
echo "rm -rf Payload;" >> $BUILDWITHFTPNAME.command
echo "echo =============================打包完成=============================;" >> $BUILDWITHFTPNAME.command
echo "open $UPLOADFILENAMEBEFORE/$FILENAME/$FTPNAME.command" >> $BUILDWITHFTPNAME.command
echo "exit;" >> $BUILDWITHFTPNAME.command
效果
command + r 之后項(xiàng)目目錄下會(huì)生成ipaBulid目錄(或你自定義)

image.png
生成了三個(gè)文件
- ipaBuild 單純打測(cè)試包
- ipaUpload 單純上傳FTP
-
ipaBuildAndUpload 打測(cè)試包并上傳
image.png
點(diǎn)擊對(duì)應(yīng)腳本就可以執(zhí)行
注意
- 這個(gè)是打測(cè)試包的
- 不要選擇模擬器運(yùn)行
