1、前言
iTunes 12.7 之前,可以下載下傳ipa應用包、打開ipa包,也生成ipa檔案!但是在這12.7之後,關于ipa的所有功能已經移除,如果還想下載下傳ipa包,可以參考我之前的文章:解決 iTunes 12.7 無法下載下傳 AppStore應用的IPA包問題,今天我們主要來說說制作ipa檔案的功能。

20180831-iTunes12.7-new-change.png
20180831-iTunes12.7.png
2、ipa檔案結構
其實ipa檔案可以了解為一個zip的壓縮檔案,是以解壓ipa檔案後,得到ipa的目錄
ipafilename/Payload/xxx.app
,以微信示例:
20180831-ipa-file-path.png
是以,如果我們編譯的項目,想生成ipa檔案,以前是拖拽到iTunes就會自動生成ipa檔案,現在不行了,根據這個原理,我們在Xcode中編譯生成的
.app
目錄,按照前面說的目錄結構,進行壓縮就行啦!
3、bash腳本
- 生成.app目錄内容: 20180831-Xcode-build-app.png
shell技巧1 - 生成ipa檔案
- 執行shell腳本生成ipa檔案: 20180831-bash-make-ipa-file.png
shell技巧1 - 生成ipa檔案 - 生成成功後,自動打開ipa檔案所在目錄: 20180831-make-ipa-finish.png
shell技巧1 - 生成ipa檔案
4、全部代碼
具體的代碼,可參考我的Github代碼:
- iHTCboy/iShell: Shell腳本程式設計技巧,總結一些常用的提高效率的方法。
#!/bin/bash
# 定義用到的變量
projectAppPath=""
outputPath=""
ipaFileName=""
# 定義讀取輸入字元的函數
getProjectAppPath() {
# 輸出換行,友善檢視
echo "\n================================================"
# 監聽輸入并且指派給變量
read -p " Enter .app path: " projectAppPath
# 如果為空值,從新監聽
if test -z "$projectAppPath"; then
getprojectAppPath
fi
}
getOutputPath() {
# 輸出換行,友善檢視
echo "\n================================================"
# 監聽輸入并且指派給變量
read -p " Enter output path: " outputPath
if test -z "$outputPath"; then
# 如果沒有輸出路徑,預設輸出到桌面
outputPath="Desktop"
fi
}
getipaFileName() {
# 輸出換行,友善檢視
echo "\n================================================"
# 監聽輸入并且指派給變量
read -p " Enter ipa FileName: " ipaFileName
if test -z "$ipaFileName"; then
getipaFileName
fi
}
# 執行函數,給變量指派
getProjectAppPath
getOutputPath
getipaFileName
# 切換到目前使用者的home目錄,友善建立桌面目錄
cd ~
# 在輸出路徑下建立 Payload 檔案夾
mkdir -p "${outputPath}/Payload"
# 将.app 檔案複制到 輸出路徑的 Payload 檔案夾下
cp -r "${projectAppPath}" "${outputPath}/Payload/"
# 切換到輸出路徑
cd "${outputPath}"
# 将 Payload 檔案夾壓縮成 ipa 包
zip -r "${ipaFileName}.ipa" Payload
# 删除目前路徑下 Payload 檔案夾【-r 就是向下遞歸,不管有多少級目錄,一并删除 -f 就是直接強行删除,不作任何提示的意思】
rm -rf "Payload"
# 成功提示
echo "\n\n=====================【轉換ipa完成】=========================\n"
echo ${outputPath}
## 打開輸出的路徑
#open -a Finder "${outputPath}"
# 從目前位置打開finder
open .
# 結束退出
exit 0
5、優化
方法一
每次想生成ipa檔案,就要打開終端,執行
sh make_ipa_file.sh
,相當麻煩,是以,如果生成别名,直接在終端輸入别名就可以執行啦,是不是很棒!
為.bash_profile添加了一個别名:
mkipa='sh /Users/HTC/Documents/iBash/make_ipa_file.sh'
以後直接在終端輸入:
mkipa
就可以啦,這不是很棒!!!
方法二
如果是 Unix 可執行檔案,直接點選,會自動打開終端執行。
把
make_ipa_file.sh
改為
make_ipa_file_sh
名字,然後在終端為檔案添加可執行權限:
chmod +x /Users/HTC/Desktop/make_ipa_file_sh
這樣就生成了 Unix 檔案,輕按兩下就會打開到終端:
20180831-make-ipa-Unix-file.png
方法三
在 ~/.bashrc 裡面添加本函數,或添加腳本路徑,也可以友善執行。
方法四
如果是macOS環境,還可以通過蘋果的apple腳本服務,來做到一鍵化,以後有機會在談談。
6、總結
通過這個簡單又複雜的示例,其實使用腳本的最終目錄,也是想提高效率!!是以,打包ipa包的效率,也是向着這樣的方向努力!如果你對shell還不熟悉,可以看看下面這2個教程,目前我學習的時候,還沒有人給指導,是以,你們是幸福的一代程式員!加油!
- Shell 教程 | 菜鳥教程
- 執行 Shell 腳本 - EffectiveMac
參考
- iHTCboy/iShell: Shell腳本程式設計技巧,總結一些常用的提高效率的方法。
- 新版 iTunes 的變化 - Apple 支援
- Linux bash總結(一) 基礎部分(适合初學者學習和非初學者參考) - 部落格園
- ios打包ipa的四種實用方法(.app轉.ipa)
- osx - Executing Shell Scripts from the OS X Dock? - Stack Overflow
- 解決 iTunes 12.7 無法下載下傳 AppStore應用的IPA包問題
- 如有疑問,歡迎在評論區一起讨論!
- 如有不正确的地方,歡迎指導!
注:本文首發于 iHTCboy's blog,如若轉載,請注來源