天天看點

xcode自動打ipa包腳本 前言 編寫 使用 總結

前言

使用xcode進行IOS開發的時候,很多時候我們需要将工程打包成ipa檔案,而xcode本身并沒有這些功能。但是通過安裝xcode的“Command Line Tools”這個工具,我們可以使用xcodebuild這個指令來對工程進行打包。然而這麼打包出來的檔案是以”.app”字尾的。其實将其做成ipa檔案也非常的簡單,隻要建立一個名為“Payload”的檔案夾,将這個app檔案放到裡面,并将Payload檔案夾壓縮,将其字尾名改為ipa即可。借助shell腳本,我們可以讓其自動完成這一過程。

編寫

下面是shell腳本内容:

#!/bin/bash

#--------------------------------------------
# 功能:為xcode工程打ipa包
# 作者:ccf
# E-mail:[email protected]
# 建立日期:2012/09/24
#--------------------------------------------


#參數判斷
if [ $# != 2 ] && [ $# != 1 ];then
	echo "Number of params error! Need one or two params!"
	echo "1.path of project(necessary) 2.name of ipa file(optional)"
	exit
elif [ ! -d $1 ];then
	echo "Params Error!! The first param must be a dictionary."
	exit
fi

#工程絕對路徑
cd $1
project_path=$(pwd)
#build檔案夾路徑
build_path=${project_path}/build

#工程配置檔案路徑
project_name=$(ls | grep xcodeproj | awk -F.xcodeproj '{print $1}')
project_infoplist_path=${project_path}/${project_name}/${project_name}-Info.plist
#取版本号
bundleShortVersion=$(/usr/libexec/PlistBuddy -c "print CFBundleShortVersionString" ${project_infoplist_path})
#取build值
bundleVersion=$(/usr/libexec/PlistBuddy -c "print CFBundleVersion" ${project_infoplist_path})
#取bundle Identifier字首
#bundlePrefix=$(/usr/libexec/PlistBuddy -c "print CFBundleIdentifier" `find . -name "*-Info.plist"` | awk -F$ '{print $1}')


#IPA名稱
if [ $# = 2 ];then
ipa_name=$2
fi


#編譯工程
cd $project_path
xcodebuild || exit

#打包
cd $build_path
target_name=$(basename ./Release-iphoneos/*.app | awk -F. '{print $1}')
if [ $# = 1 ];then
ipa_name="${target_name}_${bundleShortVersion}_build${bundleVersion}_$(date +"%Y%m%d")"
fi

if [ -d ./ipa-build ];then
	rm -rf ipa-build
fi
mkdir -p ipa-build/Payload
cp -r ./Release-iphoneos/*.app ./ipa-build/Payload/
cd ipa-build
zip -r ${ipa_name}.ipa *
rm -rf Payload
           

将shell腳本儲存,命名為“ipa-build”,然後為其添加可執行權限,指令如下:

chmod +x ipa-build
           

這裡提供shell腳本下載下傳,下載下傳完後,隻需要為其增加可執行權限即可。下載下傳點這裡

使用

使用非常簡單,ipa-build執行需要兩個參數,第一個參數是IOS工程所在的根目錄(必須),第二個參數就是生成ipa檔案的檔案名(不需要帶字尾名ipa),第二個參數是可選的,如果不輸入,則ipa檔案生成預設格式:(targetname)_(version)_build(buildversion)_yyyyMMdd.ipa 括号裡分别代表所對應的值,yyyyMMdd是目前日期格式。如果未将ipa-build加入環境變量中,使用時需要使用絕對路徑。例如:需要打包的工程根路徑為:~/iphone/HuaRongDao,而ipa-build放在了 ~/shell 路徑下,要生成名為“HuaRongDao.ipa”的檔案,則使用如下指令:

~/shell/ipa-build ~/iphone/HuaRongDao HuaRongDao
           

指令執行完成後,會在工程目錄下生成一個名為“build”的檔案夾,打包好的ipa就放在build檔案夾下的“ipa-build”檔案夾中。

總結

寫這麼一個腳本,主要是受到了一篇文章的啟發,是一篇為IOS增加DailyBuild的文章,靈活開發目前還沒有接觸,不過那篇文章的部落格很不錯。文章位址:《給iOS工程增加Daily Build》。 文章中還有一個很有意思的地方,就是通過itms-services協定來安裝ipa,已經嘗試了,很有用,可以友善測試人員測試,并且可以給越獄手機做自動更新軟體功能。待整理後,會寫一篇文章來總結。

通過使用shell腳本,确實可以減少很多的工作量。腳本目前還有很多可以完善的地方,同時在做這個腳本的時候,也發現自己的linux知識上的不足,看來要多充充電了。