開發時常常須要提交ipa 每次手動打包 有點麻煩git
理想的狀況時執行一條命令 就自動打包生成ipagithub
可是生成ipa以前 測試環境和正式環境一些參數是不一樣的. 好比網絡環境 確定有測試和線上接口 還有咱們用的小米推送也有測試和線上環境之分 還有證書和受權文件選擇.shell
大概研究了下 這些均可以經過修改文件內容來達到目的xcode
而修改文件內容就用 sed 強大的編輯功能網絡
課前補充知識sed命令詳解http://my.oschina.net/u/727843/blog/731288併發
參考個人配置 先貼出來 一步一步走ide
1進入項目目錄 xxxx:項目絕對路徑 獲取項目名稱工具
#指定編譯模式測試
build_model="Debug"網站
project_path="xxxxx"
cd ${project_path}
project_name=$(ls | grep xcodeproj | awk -F.xcodeproj'{print $1}')
2 info.plist 相關配置
這裏要用到/usr/libexec/PlistBuddy 專門修改.plist文件
project_infoplist_path=${project_path}/${project_name}/Info.plist
PlistBuddy="/usr/libexec/PlistBuddy
取版本號
bundleShortVersion=$(${PlistBuddy} -c"print CFBundleShortVersionString"${project_infoplist_path})
取build值
bundleShortVersion=$(${PlistBuddy} -c"print CFBundleVersion"${project_infoplist_path})
小米推送設置
MiSDKRunKey="MiSDKRun"
MiSDKRun=$(${PlistBuddy} -c"print $MiSDKRunKey"${project_infoplist_path})
#不存在添加 不一樣則修改
if [ "$MiSDKRun" = "" ]; then
#因爲沒有添加字段 和 值爲"" 空 沒法區分判斷 索性都先刪除
${PlistBuddy} -c "delete :$MiSDKRunKey" ${project_infoplist_path}
${PlistBuddy} -c"add :$MiSDKRunKey string $build_model"${project_infoplist_path}
echo"add $MiSDKRunKey"
elif [ "$MiSDKRun" != "$build_model" ]; then
${PlistBuddy} -c"set :$MiSDKRunKey $build_model"${project_infoplist_path}
echo"update $MiSDKRunKey"
fi
3修改配置文件
#自定義配置文件 路徑
configure_path="${project_name}/Classes/Tools/YXQCommon.h"
sed -i "" "s?#define REVIEW_MODE[^\n]*?#define REVIEW_MODE 0?"${configure_path}
#-i "" 是必須的 爲了備份 爲空的話就不備份
#只是改了個宏定義 根據它來判斷 用什麼接口 爲0是測試環境 1 爲正式環境
獲取大概位置 修改受權文件 證書配置
#自定義項目文件相對路徑
project=${project_name}.xcodeproj/project.pbxproj
sed 通常只支持單行 項目文件明顯是多行 就要倒找須要更改的行數範圍
這樣搜索的都是通用字符串 配置文件更改行數改變後 依然能夠搜索到所在範圍
#/End XCBuildConfiguration section 打開看.pbxproj詳情 只有這個字符串固定
#找到匹配字符串所在行
debugTag="Debug[^\n]*{"
releaseTag="Release[^\n]*{"
endTag="End XCBuildConfiguration section"
debug=`sed -n "/$debugTag/=" ${project}`
#debugTag搜索出來會有兩個結果 須要改變的行數是後面匹配到的 因此取結果的第二行
debug=`echo "$debug" | sed -n "2p"`
release=`sed -n "/$releaseTag/=" ${project}`
release=`echo "$release" | sed -n "2p"`
end=`sed -n "/$endTag/=" ${project}`
#打印行數
echo "debug = $debug release = $release end = $end"
start=$debug
end=$release
#打印行數看看
echo "start = $start end = $end"
自定義debug受權文件 自行查看 須要更換時更換
自定義debug證書 自行查看 須要更換時更換
profile="xxxxx"
identity="\"iPhone Developer: xx \(xxxxx\)\";"
#release 相關證書 受權文件也要單獨配置
sed -i "" -e "$start,$end s/\(PROVISIONING_PROFILE = \"\).*\"/\1$profile\"/g" -e "$start,$end s/\([^{]*CODE_SIGN_IDENTITY[^{]* = \)\([^{]*\)/\1$identity/" ${project}
#sed 多行匹配 多點修改 模式
#改變指定行範圍的匹配字符串 不加g 只處理第一次匹配 加上p會 多插入一行 -e 多點編輯
#這裏也要去補一下正則了 .* 任意n個非空字符 [^{]* 任意n個非{ 字符
若是有其餘須要修改的 照着修改就好了
其餘配置也可自行設置
到這裏 xcode 相關配置 修改已完成 下一步就是 打包了
#以前研究過IOS工程自動打包併發布腳本實現http://my.oschina.net/u/727843/blog/391946能夠去看看
有個更強大的工具 就是fir了http://fir.im/
自動配置itms-services://協議 只需提供ipa 還提供了一鍵打包發佈相關命令
1首先要自定義 更新log 吧
請求輸入內容 回車後繼續執行下一步
echo -n "enter chages log:"
read log
fir_log="$log \n測試\n fir auto debug"
echo -e"log is $fir_log \nnow goon."
2打包併發布到fir
#token fir 網站獲取
fir_token="xxxxx"
#自定義 ipa 保存路徑
out_path="/Users/xx/Desktop/ipa/$build_model"
#若是path 不存在建立下
if [ ! -x"$out_path" ]; then
mkdir"$out_path"
fi
#獲取當前系統時間
time=`date +%y-%m-%d:%Hh%Mm%Ss`
#根據時間 版本號等定義ipa name
name="$build_model+$project_name-$bundleShortVersion-$bundleVersion+$time"
echo"the ipa name is $name.ipa"
#fir 打包上傳命令
fir build_ipa -o ${out_path} -w -S ${project_name} -n "$name"-C ${build_model} -p -c ${fir_log} -Q -T ${fir_token}
其餘相關配置查看 fir官網https://github.com/FIRHQ/fir-cli/blob/master/README.md
3若是上傳完成後 想更改ipa 名字
echo -n"enter name (rename the ipa):"
readlog
if [ "$log" = "" ]; then
echo "input name is null"
else
cd ${out_path}
mv $name.ipa $log.ipa
echo "renamed the ipa"
fi
主要是懶 常常忘記 這些配置文件更改.
我去不能上傳附件?一鍵配置debug環境並fir打包上傳.sh
把已上命令放在一個文件裏 用終端打開執行就能夠了
終端能夠設置 exit 自動關閉窗口 當shell徹底退出後關閉
若是你會用 alfred 就更方便了