廢話開篇:uniAPP 打包採用的是雲編譯的方式,也就是說,app 下 iOS 原生部分的程式碼需要提交到 uni 的後臺進行編譯,可以理解為在 uni 伺服器上有一個 Xcode 執行環境,當然雲端應該是用 Xcode 命令完成的,當 HBuilderX 進行雲編譯的時候,原生的所有原生庫會進行壓縮然後打包到雲端,最後,在將編譯好的 ipa 包下載到本地,這樣就可以安裝了。
根據 uni 官網下載的 Demo 可以簡單的熟悉一下專案結構。
1、HBuilder-uniPlugin 主工程
它其實大致可以理解為雲端編譯時候雲端 Xcode 的全部編譯環境,為什麼這麼說呢?可以看一下這個工程的全部依賴。
單純原生的依賴項就多達 120+,因為,uni 有考慮雲編譯的成本,如果所有的庫都由開發者進行上傳,那麼編譯資源就會被大量佔用,於是就採用了遠端第三方庫儲備方式,這裡 uni 後臺也可以瞭解到。
iOS 端依賴的第三方庫版本說明
https://nativesupport.dcloud.net.cn/AppDocs/usemodule/iOSModuleConfig/dependentLibrary
所以,在進行 uni 原生外掛開發的時候,可以先參考一下遠端是否有支援的第三方,以免重複匯入出現編譯符號衝突的問題。
舉例說明:比如,外掛需要 B站 IJKMediaFramework 庫(160M左右,確實很大),那麼,先檢視雲端編譯是否有此庫,
發現已經存在,那麼,這時候,就不需要進行本地 IJKMediaFramework 庫提交了,只需要在 HBuilderX 的 manifest.json 設定下勾選 VideoPlayer 即可。
這樣 HBuilderX 的 manifest.json 的設定就會告訴雲編譯將 IJKMediaFramework 給加到工程裡來。
2、DCTestUniPlugin 靜態庫工程
在製作靜態庫的時候,這裡需要設定靜態庫架構的支援。
在 Build Setting -> Architectures 下進行設定
並注意在編譯的時候,選擇 Any iOS Device
靜態庫需要第三方庫怎麼辦?
在開發的時候肯定會遇到需要第三方庫支援的情況,比如:AFNetWorking,這裡先查閱了 uni 遠端是否支援,發現並沒有提高相應的靜態庫,那麼,就需要本地進行上傳。
因為,自制靜態庫最終是要載入到 APP 的環境中,所有,自制靜態庫依賴第三方的策略就是將第三方庫 .a 檔案 新增到 HBuilder-uniPlugin 主工程下,因為自制靜態庫需要標頭檔案引入,那麼,就在 DCTestUniPlugin 靜態庫工程下的 Heard Search Paths 加入標頭檔案的引入。
HBuilder-uniPlugin 主工程
DCTestUniPlugin 靜態庫工程 Heard Search Paths
所有的功能都開發完畢了,下一步就是 本地外掛包設定
具體的打包步驟可以參考上面的連結,最後的檔案目錄結構如下:
1、WSLUniPlugin 是整體檔案,裡面可以包含 android 和 ios(官網上為標註 ios 而不是 iOS)
2、ios 檔案裡面包含全部需要的第三方庫及自制靜態庫。
3、package.json 是相關的設定,通過 package.json 內部資訊會告訴遠端編譯載入哪些庫及庫的資料夾位置,當然還包括一些設定,比如哪些動態庫是需要簽名的(雖然可以自制動態庫,但是需要進行簽名)。
{ "name": "WSLUniPlugin",//外掛名稱 "id": "WSLUniPlugin",//外掛ID "version": "1.0", "description": "功能描述",//功能描述這裡進行功能描述,新增後會在HBuilder下展示 "_dp_type":"nativeplugin",//原生元件型別 "_dp_nativeplugin":{ "ios": { "plugins": [ { "type": "component",//外掛型別,是功能元件(module)還是檢視元件(component) "name": "wsl-component",//在nvue檔案內的標籤tag "class": "WSLComponent" //iOS 原生物件class,繼承自 DCUniComponent }, ], "integrateType": "framework",//自制庫型別 "hooksClass": "",這裡宣告 app 生命週期勾子物件,它會同時響應appDelegate 事件 "frameworks": [ "libAFNetworking.a",//uni遠端非儲備庫,需要標註宣告 "Masonry.framework",//Masonry 為uni遠端儲備庫,ios 資料夾裡不需要再新增,否則編譯出現符號重複錯誤 ], "embedFrameworks": [ "IDLFaceSDK.framework",//動態庫 ], "capabilities": { "entitlements": { }, "plists": { } }, "plists": { }, "assets": [ "WSLUniPlugin.xcassets"//圖片資原始檔,這裡填寫的是與 ios 資料夾的相對路徑,因為 WSLUniPlugin.xcassets 就在 ios 檔案裡,所以直接寫。 ], "privacies": [ ], "embedSwift": false, "deploymentTarget": "8.0",//支援iOS版本 "validArchitectures": [ "arm64"//架構 ], "parameters": { }, "resources": [ "WSLUniPlugin.bundle",//這裡是一些資原始檔,比如 bundle,這裡填寫的是與 ios 資料夾的相對路徑,因為 WSLUniPlugin.bundle 就在 ios 檔案裡,所以直接寫。 ] } } }
上面就是基本的設定設定。因為uni每天的雲編譯次數有限(10次左右),而且包體積要小於40M,超過次數2元每次,超過體積 10元每100M。是不是有點小坑,這樣,每天的試錯成本極高,所以,在這裡記錄一下。
推薦:《》
以上就是聊聊iOS端下uniAPP原生外掛是怎樣打包的?(打包流程分享)的詳細內容,更多請關注TW511.COM其它相關文章!