Maison >interface Web >uni-app >Parlons de la façon dont le plug-in natif uniAPP sur iOS est packagé ? (Partage du processus d'emballage)
Comment le plug-in natif uniAPP est-il packagé sur iOS ? L'article suivant vous parlera du processus de packaging de plug-ins natifs uniAPP sur iOS. J'espère qu'il vous sera utile !
Le début du non-sens : uniAPP est empaqueté à l'aide d'une compilation cloud, c'est-à-dire que le code de la partie native de app sous iOS doit être soumis en arrière-plan de uni pour la compilation, ce qui peut être compris comme Il existe un environnement d'exécution Xcode sur le serveur uni Bien sûr, le cloud doit être complété à l'aide de la commande Xcode Lorsque HBuilderX effectue une compilation cloud, tous les éléments locaux sont natifs. Les bibliothèques seront compressées et empaquetées dans le cloud. Enfin, téléchargez le package ipa compilé en local, afin qu'il puisse être installé.
Selon la Démo téléchargée sur le site officiel de uni, vous pouvez simplement vous familiariser avec la structure du projet.
1. Projet principal HBuilder-uniPlugin
Il peut en fait être grossièrement compris comme l'ensemble de l'environnement de compilation du cloud Xcode pendant la compilation cloud. Vous pouvez jeter un œil à toutes les dépendances de ce projet.
Le nombre de dépendances locales pures atteint 120+, car uni prend en compte le coût de la compilation cloud. Si toutes les bibliothèques sont téléchargées par les développeurs, les ressources de compilation seront donc fortement occupées. la méthode de stockage de bibliothèque tierce à distance a été adoptée, qui peut également être apprise en arrière-plan de uni.
La description de la version de la bibliothèque tierce sur laquelle s'appuie le côté iOS
https://nativesupport.dcloud.net.cn/AppDocs/usemodule/iOSModuleConfig/dependentLibrary
Donc, en cours Développement de plug-ins natifs uni À ce stade, vous pouvez d'abord vérifier si l'extrémité distante dispose d'un tiers pris en charge pour éviter les conflits de symboles de compilation causés par des importations répétées.
Exemple : Par exemple, si le plug-in nécessite la bibliothèque IJKMediaFramework de la station B (environ 160 Mo, ce qui est vraiment volumineux), vérifiez d'abord si la compilation cloud possède cette bibliothèque,
et trouvez-la il existe déjà, alors, pour le moment, il n'est pas nécessaire de soumettre la bibliothèque locale IJKMediaFramework. Il vous suffit de cocher VideoPlayer sous la configuration manifest.json de HBuilderX.
De cette façon, la configuration de manifest.json de HBuilderX indiquera au compilateur cloud d'ajouter IJKMediaFramework au projet.
2. Projet de bibliothèque statique DCTestUniPlugin
Lors de la création d'une bibliothèque statique, vous devez configurer la prise en charge de l'architecture de la bibliothèque statique.
Configurez sous Paramètres de construction -> Architectures
et notez que lors de la compilation, sélectionnez Tout appareil iOS
Que dois-je faire si une bibliothèque statique nécessite un troisième -bibliothèque de fête ?
Pendant le développement, vous rencontrerez certainement des situations qui nécessitent la prise en charge d'une bibliothèque tierce, telles que : AFNetWorking Ici, nous avons d'abord vérifié si uni est pris en charge par l'extrémité distante et avons constaté que la bibliothèque statique correspondante. n'a pas été amélioré. Il doit donc simplement être téléchargé localement.
Étant donné que la bibliothèque statique créée par vous-même sera finalement chargée dans l'environnement APP, la stratégie pour que les bibliothèques statiques créées par vous-même s'appuient sur des tiers consiste à ajouter le fichier de bibliothèque tierce .a au Projet principal HBuilder-uniPlugin Parce que la bibliothèque statique créée par vous-même doit importer le fichier d'en-tête, puis ajouter le fichier d'en-tête aux Heard Search Paths sous le projet de bibliothèque statique DCTestUniPlugin.
HBuilder-uniPlugin Projet principal
DCTestUniPlugin Projet de bibliothèque statique Heard Search Paths
Toutes les fonctions ont été développées, l'étape suivante est configuration du package de plug-in local
Pour les étapes de packaging spécifiques, veuillez vous référer au lien ci-dessus, et le répertoire de fichiers final. La structure est la suivante :
1, WSLUniPlugin est un fichier global, qui peut contenir android et ios (le site officiel est étiqueté ios au lieu de iOS)
2, ios à l'intérieur du fichier Contient toutes les bibliothèques tierces requises et les bibliothèques statiques créées par vous-même.
3, package.json sont des configurations liées. Grâce à package.json, les informations internes indiqueront à la compilation distante quelles bibliothèques charger et les emplacements des dossiers des bibliothèques. Bien sûr, elles incluent également certaines configurations, telles que lesquelles. les bibliothèques dynamiques doivent être signées (bien que vous puissiez créer votre propre bibliothèque dynamique, elle doit être signée).
{ "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 文件里,所以直接写。 ] } } }
Ce qui précède correspond aux paramètres de configuration de base. Étant donné que le nombre de compilations Uni Cloud par jour est limité (environ 10 fois) et que la taille du paquet doit être inférieure à 40 millions, le nombre excédentaire est de 2 yuans par fois et le volume excédentaire est de 10 yuans pour 100 millions. Y a-t-il un petit piège ? De cette façon, le coût des essais et erreurs quotidiens est extrêmement élevé, je vais donc l'enregistrer ici.
Recommandé : "Tutoriel uniapp"
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!