iOS端下uniAPP原生外掛程式是怎麼打包的?以下這篇文章就來帶大家聊聊iOS端下uniAPP 原生外掛程式打包流程,希望對大家有幫助!
廢話開篇: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。是不是有點小坑,這樣,每天的試誤成本極高,所以,在這裡記錄一下。
推薦:《uniapp教學》
以上是聊聊iOS端下uniAPP原生插件是怎麼打包的? (打包流程分享)的詳細內容。更多資訊請關注PHP中文網其他相關文章!