1. 程式人生 > >iOS工程自動打包 (Shell指令碼打包)

iOS工程自動打包 (Shell指令碼打包)

複製程式碼
  1 #!/bin/bash
  2 
  3 #--------------------------------------------
  4 # 功能:編譯xcode專案並打ipa包
  5 # 使用說明:
  6 #        編譯project
  7 #            ipa-build <project directory> [-c <project configuration>] [-o <ipa output directory>] [-t <target name>] [-n] [-p <platform identifier>]
8 # 編譯workspace 9 # ipa-build <workspace directory> -w -s <schemeName> [-c <project configuration>] [-n] 10 # 11 # 引數說明:-c NAME 工程的configuration,預設為Release。 12 # -o PATH 生成的ipa檔案輸出的資料夾(必須為已存在的檔案路徑)預設為工程根路徑下的”build/ipa-build“資料夾中
13 # -t NAME 需要編譯的target的名稱 14 # -w 編譯workspace 15 # -s NAME 對應workspace下需要編譯的scheme 16 # -n 編譯前是否先clean工程 17 # -p 平臺識別符號 18 # 作者:ccf 19 # E-mail:[email protected]
20 # 建立日期:2012/09/24 21 #-------------------------------------------- 22 # 修改日期:2013/02/18 23 # 修改人:ccf 24 # 修改內容:打包方式改為使用xcrun命令,並修改第二個引數 25 #-------------------------------------------- 26 # 修改日期:2013/04/25 27 # 修改人:ccf 28 # 修改內容:採用getopts來處理命令引數,並增加編譯前清除選項 29 #-------------------------------------------- 30 # 修改日期:2013/04/26 31 # 修改人:ccf 32 # 修改內容:增加編譯workspace的功能 33 #-------------------------------------------- 34 35 36 37 if [ $# -lt 1 ];then 38 echo "Error! Should enter the root directory of xcode project after the ipa-build command." 39 exit 2 40 fi 41 42 if [ ! -d $1 ];then 43 echo "Error! The first param must be a directory." 44 exit 2 45 fi 46 47 #工程絕對路徑 48 cd $1 49 project_path=$(pwd) 50 51 #編譯的configuration,預設為Release 52 build_config=Release 53 54 param_pattern=":p:nc:o:t:ws:" 55 OPTIND=2 56 while getopts $param_pattern optname 57 do 58 case "$optname" in 59 "n") 60 should_clean=y 61 ;; 62 "p") 63 tmp_optind=$OPTIND 64 tmp_optname=$optname 65 tmp_optarg=$OPTARG 66 67 OPTIND=$OPTIND-1 68 if getopts $param_pattern optname ;then 69 echo "Error argument value for option $tmp_optname" 70 exit 2 71 fi 72 OPTIND=$tmp_optind 73 74 platform_id=$tmp_optarg 75 76 ;; 77 "c") 78 tmp_optind=$OPTIND 79 tmp_optname=$optname 80 tmp_optarg=$OPTARG 81 OPTIND=$OPTIND-1 82 if getopts $param_pattern optname ;then 83 echo "Error argument value for option $tmp_optname" 84 exit 2 85 fi 86 OPTIND=$tmp_optind 87 88 build_config=$tmp_optarg 89 90 ;; 91 "o") 92 tmp_optind=$OPTIND 93 tmp_optname=$optname 94 tmp_optarg=$OPTARG 95 96 OPTIND=$OPTIND-1 97 if getopts $param_pattern optname ;then 98 echo "Error argument value for option $tmp_optname" 99 exit 2 100 fi 101 OPTIND=$tmp_optind 102 103 104 cd $tmp_optarg 105 output_path=$(pwd) 106 cd ${project_path} 107 108 if [ ! -d $output_path ];then 109 echo "Error!The value of option o must be an exist directory." 110 exit 2 111 fi 112 113 ;; 114 "w") 115 workspace_name='*.xcworkspace' 116 ls $project_path/$workspace_name &>/dev/null 117 rtnValue=$? 118 if [ $rtnValue = 0 ];then 119 build_workspace=$(echo $(basename $project_path/$workspace_name)) 120 else 121 echo "Error!Current path is not a xcode workspace.Please check, or do not use -w option." 122 exit 2 123 fi 124 125 ;; 126 "s") 127 tmp_optind=$OPTIND 128 tmp_optname=$optname 129 tmp_optarg=$OPTARG 130 131 OPTIND=$OPTIND-1 132 if getopts $param_pattern optname ;then 133 echo "Error argument value for option $tmp_optname" 134 exit 2 135 fi 136 OPTIND=$tmp_optind 137 138 build_scheme=$tmp_optarg 139 140 ;; 141 "t") 142 tmp_optind=$OPTIND 143 tmp_optname=$optname 144 tmp_optarg=$OPTARG 145 146 OPTIND=$OPTIND-1 147 if getopts $param_pattern optname ;then 148 echo "Error argument value for option $tmp_optname" 149 exit 2 150 fi 151 OPTIND=$tmp_optind 152 153 build_target=$tmp_optarg 154 155 ;; 156 157 158 "?") 159 echo "Error! Unknown option $OPTARG" 160 exit 2 161 ;; 162 ":") 163 echo "Error! No argument value for option $OPTARG" 164 exit 2 165 ;; 166 *) 167 # Should not occur 168 echo "Error! Unknown error while processing options" 169 exit 2 170 ;; 171 esac 172 done 173 174 175 #build資料夾路徑 176 build_path=${project_path}/build 177 #生成的app檔案目錄 178 appdirname=Release-iphoneos 179 if [ $build_config = Debug ];then 180 appdirname=Debug-iphoneos 181 fi 182 if [ $build_config = Distribute ];then 183 appdirname=Distribute-iphoneos 184 fi 185 #編譯後文件路徑(僅當編譯workspace時才會用到) 186 compiled_path=${build_path}/${appdirname} 187 188 #是否clean 189 if [ "$should_clean" = "y" ];then 190 xcodebuild clean -configuration ${build_config} 191 fi 192 193 #組合編譯命令 194 build_cmd='xcodebuild' 195 196 if [ "$build_workspace" != "" ];then 197 #編譯workspace 198 if [ "$build_scheme" = "" ];then 199 echo "Error! Must provide a scheme by -s option together when using -w option to compile a workspace." 200 exit 2 201 fi 202 203 build_cmd=${build_cmd}' -workspace '${build_workspace}' -scheme '${build_scheme}' -configuration '${build_config}' CONFIGURATION_BUILD_DIR='${compiled_path}' ONLY_ACTIVE_ARCH=NO' 204 205 else 206 #編譯project 207 build_cmd=${build_cmd}' -configuration '${build_config} 208 209 if [ "$build_target" != "" ];then 210 build_cmd=${build_cmd}' -target '${build_target} 211 fi 212 213 fi 214 215 216 #編譯工程 217 cd $project_path 218 $build_cmd || exit 219 220 #進入build路徑 221 cd $build_path 222 223 #建立ipa-build資料夾 224 if [ -d ./ipa-build ];then 225 rm -rf ipa-build 226 fi 227 mkdir ipa-build 228 229 230 231 #app檔名稱 232 appname=$(basename ./${appdirname}/*.app) 233 #通過app檔名獲得工程target名字 234 target_name=$(echo $appname | awk -F. '{print $1}') 235 #app檔案中Info.plist檔案路徑 236 app_infoplist_path=${build_path}/${appdirname}/${appname}/Info.plist 237 #取版本號 238 bundleShortVersion=$(/usr/libexec/PlistBuddy -c "print CFBundleShortVersionString" ${app_infoplist_path}) 239 #取build值 240 bundleVersion=$(/usr/libexec/PlistBuddy -c "print CFBundleVersion" ${app_infoplist_path}) 241 #取displayName 242 displayName=$(/usr/libexec/PlistBuddy -c "print CFBundleDisplayName" ${app_infoplist_path}) 243 #IPA名稱 244 ipa_name="${displayName}_${platform_id}_${bundleShortVersion}_${build_config}_${bundleVersion}_$(date +"%Y%m%d")" 245 echo $ipa_name 246 247 #xcrun打包 248 xcrun -sdk iphoneos PackageApplication -v ./${appdirname}/*.app -o ${build_path}/ipa-build/${ipa_name}.ipa || exit 249 250 if [ "$output_path" != "" ];then 251 cp ${build_path}/ipa-build/${ipa_name}.ipa $output_path/${ipa_name}.ipa 252 echo "Copy ipa file successfully to the path $output_path/${ipa_name}.ipa" 253 fi
複製程式碼

相關推薦

iOS工程自動打包 Shell指令碼打包

1 #!/bin/bash 2 3 #-------------------------------------------- 4 # 功能:編譯xcode專案並打ipa包 5 # 使用說明: 6 # 編譯project 7 # ipa-b

kettle檔案自動化部署shell指令碼執行

shell指令碼(crontab 定期執行),呼叫kitchen 和 pan 去執行,job和transformation檔案。 crontab -l 檢視 crontab -e 編輯 格式自己定義 詳情見這裡 http://www.cnblogs.com/cocowoo

iOS利用Shell指令碼自動打包專案工程生成ipa

剛剛進入一家遊戲公司,今天在研究iOS利用指令碼打包專案工程。用xcode打包速度慢而且繁瑣,所以選擇指令碼來做,在這裡分享一下。 打包方法 一.通過Xcode 其實當我們Xcode點選了build或者執行comand+R之後,Xcode自己執行的

IOS工程自動打包併發布指令碼實現

作者:webfrogs 轉載請註明出處。 前言 IOS的開發過程中,當需要給測試人員釋出測試包的時候,直接使用xcode來做的效率是非常低下的。尤其是當有一點小改動需要重新出包時,那簡直是個折磨的人的工作。通過一番研究後,遂決定寫一系列指令碼,以代替人工完成打

關於python指令碼完整打包釋出包括外部傳參的批處理指令碼shell指令碼編寫

在python處理簡單問題的過程中常常需要對Python指令碼打包成exe的可執行程式。並且要可移植。而最常用的方法則是用pyinstaller在dos視窗下進行打包。因為常常需要對exe檔案進行傳送外部引數由此路徑會發生錯誤。此時最為簡單的方法則是用文字編輯器開啟,修改編碼方式。詳細過程如

ubuntu16.04通過Jenkins+shell指令碼打包docker映象並推送到映象

實驗環境 系統版本:16.04-4.4.0-21-generic Jenkins版本:v2.140 Docker版本:18.09.0 Harbor版本:v1.5.3(centos7-3.10) 注:由於Harbor是基於Docker Registry V2版本,所以就要求Docker版本不小於1.1

Xcode自動打包傻瓜式教程

logo.jpg目錄常用打包方式自動打包流程過程圖解xcodebuild使用指令碼檔案解讀一個普通的專案,從打包到上傳(或匯出ipa),耗時基本在10-30分鐘或者更長時間,且中間得有人工看守(其實就是Next step),如果通過指令碼執行自動打包,方便不方便的先放一邊,逼格是不是一下子就提上來了,下面這篇

運維中的日誌切割操作梳理Logrotate/python/shell指令碼實現

對於Linux系統安全來說,日誌檔案是極其重要的工具。不知為何,我發現很多運維同學的伺服器上都執行著一些諸如每天切分Nginx日誌之類的CRON指令碼,大家似乎遺忘了Logrotate,爭相發明自己的輪子,這真是讓人沮喪啊!就好比明明身邊躺著現成的性感美女,大家卻忙著自娛自樂,罪過!logrotate程式是一

自動rman備份計劃指令碼原始碼

根據自己對rman的理解,實踐後可行的指令碼,每月1日0級備份,每週末一級備份,每週除週末二級備份 [[email protected] ~]# crontab -l -u oracle 59 2 1 * * /home/oracle/rman/rmback

iOS Xib自動佈局

使用Xib可以實現控制元件的螢幕適配,但是並不是十全十美。因為我們使用Xib新增約束的時候,比如說距離左邊多少距離,這是設定的一個確定的阿拉伯數字,是絕對的,並不是設定的一個比例,在不同的機型上面,裝置的尺寸寬高不一定,Xib以絕對的阿拉伯數字新增約束並不能做到完美的螢幕適配

C# winform 安裝程式打包自定義操作

(一),安裝程式 以前用vs製作過安裝程式,現在把步驟寫出來,有幫助的大家一定要頂哦 第一步:建立工程 1.開啟vs,新建專案->其他專案型別->安裝和部署(這個子項下面有安裝專案和Web安裝專案等,安裝專案就是普通的桌面程式安裝,Web安裝就是安裝網

猜拳遊戲shell指令碼

read -p "是否開始遊戲(y/n)" a; while [ $a == y ] ;do read -p " * * * * * * * * 石頭(0) * * 剪刀(1)

Linux系統中執行.shShell指令碼檔案

      其中,以絕對路徑執行方法:       (1)./home/test/shell/hello.sh,可以這樣執行是因為當前登入使用者是root,當前路徑是在/下,. 代表當前路徑。       (2)/home/test/shell/hello

python打包.py轉換exe

Python是一個指令碼語言,被直譯器解釋執行。它的釋出方式: .py檔案:對於開源專案或者原始碼沒那麼重要的,直接提供原始碼,需要使用者自行安裝Python並且安裝依賴的各種庫。(Python官方的各種安裝包就是這樣做的) .pyc檔案:有些公司或個人因為機密或者各

linux和Windows檔案不相容shell指令碼執行錯誤 $'\r': command not found

背景 將linux通過samba服務對映到windows平臺,在win平臺下建立一個指令碼,然後切換到linux下執行,報錯$’\r’: command not found。 原因 win平臺下的換行是:回車符 + 換行符,也就是\r\n。unix下是換行符\n。linux下

Ubuntu 設定桌布自動切換的shell指令碼

系統:ubuntu-16.04 右鍵桌面->更改桌面背景,如下圖所示,在右側縮圖中帶有小鐘表圖示的就表示為動態切換的桌布: 系統是通過讀取這個檔案來進行動態桌布切換的: /usr/share/backgrounds/contest/xenial.xml 檔

mysql xtrabackup自動增量備份shell指令碼

#!/bin/sh #victory chen   INNOBACKUPEX=innobackupex INNOBACKUPEXFULL=/usr/bin/$INNOBACKUPEX TODAY=`date +%Y%m%d%H%M%S` USEROPTIONS="--user

Linux————Linux下批量建立使用者並設定密碼shell指令碼

在這裡分為兩種情況 1.有規則給定使用者名稱 2.給定無規則使用者名稱 3.刪除 一:以下是建立給定使用者名稱: 首先得給出給定使用者名稱,並逐個建立 for user in {u1,u2,u3,u

為升級後的Linux核心打包適用於ubuntu

打包替換核心 打包替換新核心使用的是make-kpkg命令,所以此方法只適合支援make-kpkg命令的系統版本,一般適合Ubuntu、Debian等系統,不適合RedHat系統。 1、定製核心 #make mrprobe ,清理原始碼樹。 #make menuco