Plusieurs framework dans une application dont certains sont communs

PyrohPyroh Membre
avril 2016 modifié dans Objective-C, Swift, C, C++ #1

Salut à  tous.


C'est un peu dur à  formuler de manière concise ce problème que j'ai en ce moment. C'est donc assez difficile pour moi de faire des recherches dessus. Alors si le sujet a déjà  été traité ici je m'en excuse.


 


Prenons un cas imagé mais concret :


 


J'ai un framework A qui comporte principalement des helpers (oui CoreGeometry est un bon exemple).


Je code un framework B qui a besoin de A. Jusque là  c'est simple.


 


Maintenant dans mon application C j'inclue le framework B mais j'ai aussi besoin de A je dois donc inclure A et B mais A est inclus dans B donc A est dupliqué :


 


Comment je peux faire pour que le A dont à  besoin C est celui qui est inclus dans B.


Faire un peu comme ça :


 


Réponses

  • C'est plus clair avec une image :


     


  • Cocoapods gère ce cas de figure.

  • Faut-il supposer que ton framework A est physiquement inclut dans B ? Si oui tu peux faire en sorte de na pas l'inclure.


    Si non je penses que tu peux ajouter le chemin vers sont framework A en ajoutant le chemin des les rpath de ton application lors de la compilation (ca fait un peu bricolage). Je n'ai jamais testé cette solution en tout cas.


  • AliGatorAliGator Membre, Modérateur
    De toute façon une application iOS qui a des frameworks imbriqués est rejetée à  la validation AppStore.

    Apple n'autorise pas d'utiliser des frameworks tiers A qui inclus en interne d'autres frameworks B. Il faut que les frameworks soient tous "à  plat", et pas en poupée russe.

    Du coup ton problème se résoud tout seul : tu inclus juste A, B et C, à  plat, et aucun de ces 3 frameworks ne doit inclure l'un des autres à  l'intérieur de lui-même. Ou encore plus simple : tu utilises CocoaPods.
  • PyrohPyroh Membre

    Bon ben il ne me reste plus qu'à  me mettre à  CocoaPods alors...


    Je préfeÌ€re Carthage et jusque là  j'avais tout fait pour éviter de m'y mettre mais on fera avec.


     


    Une piste pour bien débuter ?


  • colas_colas_ Membre

    Voici un exemple chez moi


     


    Arborescence : 


     


    CBDTreeData


        |---CBDTreeData.podspec


        |---Classes


                 |--- ici, tes dossiers, tes .h, tes .m


     


    Voilà  le fichier `CBDTreeData.podspec`



    Pod::Spec.new do |s|

    s.name = "CBDTreeData"
    s.version = "1.3.0"

    s.source = { :git => 'https://bitbucket.org/colas/cbdtreedata.git',
    :tag => "#{s.version}" }

    s.source_files = 'Classes/**/*.{h,m}'

    s.dependency 'M13OrderedDictionary'

    s.requires_arc = true

    end


    C'est là  que tu indiques tes dépendances de Pods.


     


    Tu vois que je gère un versionning et que les sources sont sur bitbucket, mais tu peux tout faire en local. 


    Ce sera plus simple pour toi de tout faire en local (je pense), car sinon, il faut que tu crées un repo avec tous les .podspec de tes différentes versions.


     


     


    Ensuite, tu mets un fichier Podfile dans le projet où tu veux utiliser tes frameworks, tu lui dis quels pod tu veux et tu run `pod install`.


     


    à‰videmment, avant ça tu dois installer CocoaPod ;-)


     


    C'est galère mais après ça vaut le coup !


Connectez-vous ou Inscrivez-vous pour répondre.