首頁 > web前端 > uni-app > 主體

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

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

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學習者快速成長!