搜尋
首頁web前端uni-app聊聊iOS端下uniAPP原生插件是怎麼打包的? (打包流程分享)

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中文網其他相關文章!

陳述
本文轉載於:掘金社区。如有侵權,請聯絡admin@php.cn刪除
您如何在不同平台(例如移動,Web)上調試問題?您如何在不同平台(例如移動,Web)上調試問題?Mar 27, 2025 pm 05:07 PM

本文討論了有關移動和網絡平台的調試策略,突出顯示了Android Studio,Xcode和Chrome DevTools等工具,以及在OS和性能優化的一致結果的技術。

哪些調試工具可用於Uniapp開發?哪些調試工具可用於Uniapp開發?Mar 27, 2025 pm 05:05 PM

文章討論了用於Uniapp開發的調試工具和最佳實踐,重點關注Hbuilderx,微信開發人員工具和Chrome DevTools等工具。

您如何為Uniapp應用程序執行端到端測試?您如何為Uniapp應用程序執行端到端測試?Mar 27, 2025 pm 05:04 PM

本文討論了跨多個平台的Uniapp應用程序的端到端測試。它涵蓋定義測試方案,選擇諸如Appium和Cypress之類的工具,設置環境,寫作和運行測試,分析結果以及集成

您可以在Uniapp應用程序中執行哪些不同類型的測試?您可以在Uniapp應用程序中執行哪些不同類型的測試?Mar 27, 2025 pm 04:59 PM

本文討論了針對Uniapp應用程序的各種測試類型,包括單元,集成,功能,UI/UX,性能,跨平台和安全測試。它還涵蓋了確保跨平台兼容性,並推薦Jes等工具

Uniapp中有哪些常見的性能反版?Uniapp中有哪些常見的性能反版?Mar 27, 2025 pm 04:58 PM

本文討論了UNIAPP開發中的共同績效抗模式,例如過度的全球數據使用和效率低下的數據綁定,並提供策略來識別和減輕這些問題,以提高應用程序性能。

您如何使用分析工具來識別uniapp中的性能瓶頸?您如何使用分析工具來識別uniapp中的性能瓶頸?Mar 27, 2025 pm 04:57 PM

本文討論了使用分析工具來識別和解決Uniapp中的性能瓶頸,重點是設置,數據分析和優化。

您如何在Uniapp中優化網絡請求?您如何在Uniapp中優化網絡請求?Mar 27, 2025 pm 04:52 PM

本文討論了在UNIAPP中優化網絡請求的策略,重點是減少延遲,實施緩存以及使用監視工具來增強應用程序性能。

如何優化Uniapp中的Web性能的圖像?如何優化Uniapp中的Web性能的圖像?Mar 27, 2025 pm 04:50 PM

本文討論了通過壓縮,響應式設計,懶惰加載,緩存和使用WebP格式來優化Uniapp中的圖像,以更好地進行Web性能。

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱工具

DVWA

DVWA

Damn Vulnerable Web App (DVWA) 是一個PHP/MySQL的Web應用程序,非常容易受到攻擊。它的主要目標是成為安全專業人員在合法環境中測試自己的技能和工具的輔助工具,幫助Web開發人員更好地理解保護網路應用程式的過程,並幫助教師/學生在課堂環境中教授/學習Web應用程式安全性。 DVWA的目標是透過簡單直接的介面練習一些最常見的Web漏洞,難度各不相同。請注意,該軟體中

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

SublimeText3 英文版

SublimeText3 英文版

推薦:為Win版本,支援程式碼提示!

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強大的PHP整合開發環境

PhpStorm Mac 版本

PhpStorm Mac 版本

最新(2018.2.1 )專業的PHP整合開發工具