6
votes

problème d'intégration du pod ObjC dans un framework Swift

la configuration

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 pour cela. J'utilise des version 1.6.0 -pre

Naïve tentative

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

frameworks

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

en-têtes modulaires peut-être?

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

peut-être les deux?

./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

le hack

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.

Ma question

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.


6 commentaires

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 et 1.6.0-pre essayé cela, l'application l'a quand même crash


Que 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?


3 Réponses :


0
votes

Vous devez copier manuellement Lottie-ios Framework dans votre framework CocoaPod privé (qui est My-Framework)


1 commentaires

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



1
votes

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.


0 commentaires

3
votes

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

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


0 commentaires