J'ai une application iOS MY-App
qui utilise mon propre framework MY-Framework
. Les deux sont écrits en swift
. L'application gère uniquement l'authentification des utilisateurs et transmet un jeton d'accès à MY-Framework
. MY-Framework
gère alors l'intégralité du ScreenFlow et de la logique métier. L'objectif est de distribuer le MY-Framework
aux clients pour l'utiliser dans leurs applications.
un échantillon minimal de la configuration du projet présentant ce problème est disponible ici: https://github.com/vprimachenko/lottie-pod-problem-sample p >
maintenant, je devais améliorer mes vues fournies par le cadre avec quelques animations et devais utiliser lottie pour cela. J'utilise des cocoapods version 1.6.0 -pre
J'ai créé un Podfile
avec le contenu suivant
dyld: Library not loaded: @rpath/Lottie.framework/Lottie Referenced from: .../Build/Products/Debug-iphonesimulator/fw.framework/fw Reason: image not found
qui a entraîné une erreur de compilation dans le framework
target 'fw' do use_modular_headers! use_frameworks! pod 'lottie-ios' end
après quelques recherches sur Google, j'ai changé mon Podfile
en :
./app/app/ViewController.swift:3:8: error: missing required module 'Lottie' import fw ^
résultat: plantage du runtime
target 'fw' do use_modular_headers! pod 'lottie-ios' end
cocoapods les notes de version mentionnent use_modular_headers!
, permet essayez ça:
dyld: Library not loaded: @rpath/Lottie.framework/Lottie Referenced from: .../Build/Products/Debug-iphonesimulator/fw.framework/fw Reason: image not found
résultat: erreur du compilateur dans l'application contenant
target 'fw' do use_frameworks! pod 'lottie-ios' end
./fw/fw/File.swift:4:8: error: no such module 'Lottie' import Lottie ^
résultat: plantage d'exécution
target 'fw' do pod 'lottie-ios' end
après quelques essais, j'ai pu résoudre la situation en fournissant mon propre en-tête pour Lottie
bu Cela ressemble plus à un ruban adhésif qu'à une solution appropriée. Je publierai encore ceci plus tard comme réponse supplémentaire.
comment puis-je utiliser correctement intégrer le cocoapod lottie-ios
de telle manière qu'il est entièrement contenu dans MY-Framework
, donc lorsque je le partage avec un client, il peut simplement le déposer dans son application et ne pas se soucier des dépendances?
Le libérer en tant que privé le pod avec des dépendances n'est malheureusement pas une option.
3 Réponses :
Vous devez copier manuellement Lottie-ios Framework dans votre framework CocoaPod privé (qui est My-Framework)
une étape manuelle ne semble pas correcte, car je pense qu'il y a quelque chose qui ne va pas avec le pod lottie-ios
lui-même, ou j'ai manqué un réglage lors de l'ajout à mon Podfile
comment utiliser correctement intégrer le cocoapode lottie-ios de telle manière que il est complètement contenu dans MY-Framework, donc quand je le partage avec un client, ils peuvent simplement le déposer dans leur application et ne se soucier d'aucun dépendances?
Je ne pense pas que vous vouliez faire ça. Que faire si l'application de votre client utilise déjà le framework Lottie, éventuellement une version différente de celle utilisée dans MY-Framework?
Une manière typique de résoudre ce problème consiste à demander à votre client d'utiliser Lottie comme dépendance. Si vous utilisez du cocoapod, vos clients ne le remarqueront pas vraiment, et c'est une pratique courante. Vous spécifiez votre dépendance à l'aide de spec.dependency sur https://guides.cocoapods.org/syntax/podspec .html )
Si vous êtes vraiment désespéré, vous pouvez copier toutes les sources de Lottie dans MY-framework, et vous assurer qu'elles sont définies dans leur propre module pour éviter les conflits.
La manière courante d'utiliser le code objective-c
dans swift
consiste à utiliser des en-têtes de pontage, jetez un œil à ceci:
Importation d'Objective-C dans Swift p >
vous devez créer un en-tête de pontage et l'ajouter à votre projet puis à l'intérieur du fichier .h que vous avez créé ajoutez simplement:
#import
Est-ce une possibilité si vous pouvez faire de votre MY-Framework un pod privé. De cette façon, les Cocoapods gèrent tout et cela devrait fonctionner correctement (en fait, j'ai essayé d'installer Lottie dans mon framework et cela a fonctionné pour moi en utilisant des cocoapods)
Valerij, avez-vous essayé d'ajouter le framework Lottie à l'étape "Embed Frameworks" dans les phases de construction? Et encore une chose - quelle version de Cocoapods utilisez-vous actuellement?
@qtngo y a pensé mais ce n'est pas une option dans mon schéma de distribution actuel @edopelawi a essayé les deux avec
1.5.0
et1.6.0-pre
essayé cela, l'application l'a quand même crashQue se passe-t-il lorsque vous faites "pod 'lottie-ios'" dans le fichier pod de votre framwork? Vous avez dit que vous aviez un problème d'erreur de l'éditeur de liens, quelle est cette erreur?
@qtngo simple "framework not found", a disparu après la mise à jour des cocoapodes vers
1.6.0
. J'ai en fait reproduit la configuration dans un petit projet, prob reformulera la question et liera cet exemple, donnez-moi quelques heures :)avez-vous installé le pod? ouvrir le projet depuis xcworkspace?