天天看點

shell技巧1 - 生成ipa檔案

1、前言

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

shell技巧1 - 生成ipa檔案

20180831-iTunes12.7-new-change.png

shell技巧1 - 生成ipa檔案

20180831-iTunes12.7.png

2、ipa檔案結構

其實ipa檔案可以了解為一個zip的壓縮檔案,是以解壓ipa檔案後,得到ipa的目錄

ipafilename/Payload/xxx.app

,以微信示例:

shell技巧1 - 生成ipa檔案

20180831-ipa-file-path.png

是以,如果我們編譯的項目,想生成ipa檔案,以前是拖拽到iTunes就會自動生成ipa檔案,現在不行了,根據這個原理,我們在Xcode中編譯生成的

.app

目錄,按照前面說的目錄結構,進行壓縮就行啦!

3、bash腳本

  • 生成.app目錄内容:
    shell技巧1 - 生成ipa檔案
    20180831-Xcode-build-app.png
  • 執行shell腳本生成ipa檔案:
    shell技巧1 - 生成ipa檔案
    20180831-bash-make-ipa-file.png
  • 生成成功後,自動打開ipa檔案所在目錄:
    shell技巧1 - 生成ipa檔案
    20180831-make-ipa-finish.png

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 檔案,輕按兩下就會打開到終端:

shell技巧1 - 生成ipa檔案

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,如若轉載,請注來源

繼續閱讀