聊聊iOS端下uniAPP原生插件是怎麼打包的? (打包流程分享)

青灯夜游
發布: 2022-04-06 15:29:32
轉載
5355 人瀏覽過

iOS端下uniAPP原生外掛程式是怎麼打包的?以下這篇文章就來帶大家聊聊iOS端下uniAPP 原生外掛程式打包流程,希望對大家有幫助!

聊聊iOS端下uniAPP原生插件是怎麼打包的? (打包流程分享)

廢話開篇:uniAPP打包採用的是雲端編譯的方式,也就是說,appiOS原生部分的程式碼需要提交到uni的後台進行編譯,可以理解為在uni伺服器上有一個Xcode運行環境,當然雲端應該是用Xcode指令完成的,當HBuilderX進行雲端編譯的時候,本地的所有原生函式庫會進行壓縮然後打包到雲端,最後,在將編譯好的ipa套件下載到本地,這樣就可以安裝了。

一、靜態函式庫的設定

根據uni官網下載的Demo可以簡單的熟悉一下專案結構。

聊聊iOS端下uniAPP原生插件是怎麼打包的? (打包流程分享)

1、HBuilder-uniPlugin 主工程

它其實大致可以理解為雲端編譯時候雲端Xcode的全部編譯環境,為什麼這麼說呢?可以看一下這個工程的全部依賴。

聊聊iOS端下uniAPP原生插件是怎麼打包的? (打包流程分享)

單純本地的依賴項就多達120,因為,uni有考慮雲端編譯的成本,如果所有的函式庫都由開發者進行上傳,那麼編譯資源就會被大量佔用,於是就採用了遠端第三方函式庫儲備方式,這裡uni後台也可以了解到。

iOS 端所依賴的第三方函式庫版本說明

https://nativesupport.dcloud.net.cn/AppDocs/usemodule/iOSModuleConfig/dependentLibrary

聊聊iOS端下uniAPP原生插件是怎麼打包的? (打包流程分享)

所以,在進行uni原生外掛程式開發的時候,可以先參考遠端是否有支援的第三方,以免重複導入出現編譯符號衝突的問題。

舉例說明:例如,外掛程式需要B站IJKMediaFramework函式庫(160M左右,確實很大),那麼,先查看雲端編譯是否有此函式庫,

聊聊iOS端下uniAPP原生插件是怎麼打包的? (打包流程分享)

發現已經存在,那麼,這時候,就不需要進行本地IJKMediaFramework庫提交了,只需要在HBuilderXmanifest.json設定下勾選VideoPlayer即可。

聊聊iOS端下uniAPP原生插件是怎麼打包的? (打包流程分享)

這樣HBuilderXmanifest.json的設定就會告訴雲端編譯將IJKMediaFramework給加到工程裡來。

2、DCTestUniPlugin 靜態函式庫工程

#在製作靜態函式庫的時候,這裡需要設定靜態函式庫架構的支援。

Build Setting->Architectures下進行設定

聊聊iOS端下uniAPP原生插件是怎麼打包的? (打包流程分享)

並注意在編譯的時候,選擇Any iOS Device

聊聊iOS端下uniAPP原生插件是怎麼打包的? (打包流程分享)

#靜態庫需要第三方函式庫怎麼辦?

在開發的時候一定會遇到需要第三方函式庫支援的情況,例如:AFNetWorking,這裡先查閱了uni遠端是否支持,發現並沒有提高相應的靜態庫,那麼,就需要本地進行上傳。

因為,自製靜態函式庫最終是要載入到APP的環境中,所有,自製靜態函式庫依賴第三方的策略就是將第三方函式庫.a文件加入到HBuilder-uniPlugin主工程下,因為自製靜態庫需要頭檔引入,那麼,就在DCTestUniPlugin靜態庫工程下的Heard Search Paths加入頭文件的引入。

HBuilder-uniPlugin主工程

聊聊iOS端下uniAPP原生插件是怎麼打包的? (打包流程分享)

DCTestUniPlugin靜態函式庫工程Heard Search Paths

聊聊iOS端下uniAPP原生插件是怎麼打包的? (打包流程分享)

二、設定iOS 原生外掛package.json

#所有的功能都開發完畢了,下一步就是本機外掛程式包配置

具體的打包步驟可以參考上面的鏈接,最後的文件目錄結構如下:

聊聊iOS端下uniAPP原生插件是怎麼打包的? (打包流程分享)

1、WSLUniPlugin是整體文件,裡面可以包含androidios(官網上為標註ios而不是iOS

2、ios檔案內麵包含全部需要的第三方函式庫及自製靜態函式庫。

3、package.json是相關的配置,透過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中文網其他相關文章!

相關標籤:
來源:juejin.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
最新問題
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!