快速打包(僅限提測使用)
眾所周知打包測試是一個複雜的過程 測試出問題後 再修改 再發包 這一步驟重複幾十遍 我就問你怕不怕? 所以這裡提供一個手動打包的方法 可加快打包速度 這個包僅限於 測試
使用. 不能提交到 AppStore
之前寫過一個itunes打包的文章 不過隨著itunes更新 已經很少人會回退到12.6版本進行打包了 所以特別寫了此文章來科普一下app包的原理(淺層原理 = =)
溫馨提示:
文章分為手動打包與自動打包兩種 如果想循序漸進就繼續看下去如果想直接拿過去用 就搜尋 二.自動打包
一.手動打包
1.配置在開發者中心下載的證書以及描述檔案
這裡注意一下請使用development證書打包(開發證書)

2.選擇編譯裝置並編譯

請注意一定要選擇這個 Generic iOS Device
只有這個編譯出來的app是給真機使用的
編譯的快捷鍵是 cmd + b
3.編譯之後在Products資料夾中就會出現一個.app檔案

4.我們右鍵 show in finder
就可以開啟檔案所在的目錄

5.瞭解ipa包的目錄結構
想要打包就要先了解包裡面的結構 我這邊先拆開一個 抖音
的包

可以看到裡面是這些亂七八糟的東西 其他的不用看 我們只看這個 Payload
資料夾 裡面裝著一個 .app
檔案 是不是很面熟 = =
那我們猜想是不是隻要有 Payload資料夾
和 .app
這兩個檔案是不是就可以完成打包了呢
6.開始打包
經過上面的猜想 我們開始實現打包 操作步驟為
1.新建一個叫 Payload 的資料夾 需要一個字不差 2.把.app包放進去 3.用系統自帶的zip壓縮成.zip檔案 4.把.zip字尾改成.ipa
7.通過上述的打包操作 就可以打出想要的測試包 不過每次都這麼操作是不是很繁瑣呢?我們稍微使用命令列指令碼來簡化一下 指令碼如下
rm -rf Payload mkdir Payload cp -r xxx.app Payload/xxx.app zip -r xxx.ipa Payload
注意
xxx.app 需要改成你 路徑下的app名字 否則找不到檔案
xxx.ipa 這個你可以隨便起名
寫好之後我們把指令碼放到xxx.app旁邊

然後配置好指令碼 我是這麼寫的
rm -rf Payload mkdir Payload cp -r SimpleVideoFileFilter.app Payload/SimpleVideoFileFilter.app zip -r SimpleVideoFileFilter.ipa Payload
然後在命令列上執行指令碼
首先cd到Products目錄
cd /Users/sam/Library/Developer/Xcode/DerivedData/SimpleVideoFileFilter-eidehdymxkvhnmgawhkynwduxbqh/Build/Products/Debug-iphoneos
進入目錄後執行指令碼
sh package.sh
執行之後會在當前目錄下看到ipa檔案 這個檔案可以直接上傳 fir或蒲公英
進行測試了
到了這裡 大功告成了!
如果打出來的包不能用請優先檢查 證書
和 描述檔案
並重新打包
二.自動打包
手動打出來的包已經很快了 但是有些人可能還是會覺得不爽 我什麼也不想做 只想編譯之後就生成可以發給測試的包 下面我們來實現一下自動打包
首先我們在xcode專案配置中找到 Build Phases
之後點上面的加號 加一個自動執行指令碼的模組

之後我們會發現 多出這樣一個模組

我們在下面輸入框中貼入如下shell
if [ "${CONFIGURATION}" = "Debug" ] && [ -d "${BUILD_ROOT}/${CONFIGURATION}-iphoneos" ] then cd ${BUILD_ROOT}/${CONFIGURATION}-iphoneos rm -rf Output mkdir Payload mkdir Output cp -rf ${PROJECT_NAME}.app Payload/${PROJECT_NAME}.app zip -r Output/${PROJECT_NAME}.ipa Payload rm -rf Payload open ./Output fi
這裡解釋一下
${BUILD_ROOT}
是編譯路徑
${CONFIGURATION}
是當前的編譯環境
${PROJECT_NAME}
是專案名稱
貼完之後是這樣

之後我們切換到Debug模式並選擇裝置為 Generic iOS Device
這裡再次強調 這種打包方式只推薦打測試包提供測試 生產包還是用xcode原本的方式打 打包之前請自行配置證書和描述檔案

然後 cmd + b
編譯 編譯之後會自動開啟編譯目錄 大功告成!
9.FAQ
1.有些同學會問:貓哥 你的包是不是沒簽名呀
答:在你cmd+b編譯的時候xcode就已經給做了簽名了 簽名的描述檔案和證書都是你在第一步配置的 = =
2.如果打出來的包不能用請優先檢查 證書
和 描述檔案
並重新打包
3.如果檢查無誤還是不能用 那麼這裡要還是要贅述一下 開發包只能由 內部人員
使用 也就是你需要在 apple developer控制中心
中加入內
部人員裝置 並重新生成 描述檔案
並下載到本地 重新進行打包
4.如果上述過程都試了 還是不能用 請檢查專案支援的 最低版本
5.如何驗證簽名正確呢? 其實很簡單 把你打出的包上傳到fir只要能傳上去 證明你的包一定是developer或adhoc包, 即打包的證書和描述檔案並沒有錯誤
6.如何得知簽名中有你裝置的id呢? 這個也很簡單 在.app包上點 右鍵
顯示包內容 在裡面找到 embedded.mobileprovision
檔案 選中之後點空格 在最下方就能看到繫結的裝置列表了 - -
7.有些人反映 有遇到使用 Xcode10
打包之後 在 iOS11
系統上不能顯示本地圖片的問題 之後我進行了測試 並沒有重現 如果遇到此問題 請在下方留言給我你的Xcode版本 使用環境 和 iOS系統版本
8.如打包出現一些其他問題 請自行閱讀排查