Pod, MagicalRecord et app Extension

LeChatNoirLeChatNoir Membre, Modérateur
mars 2015 modifié dans API UIKit #1

Salut,


 


Je me heurte à  un problème assez simple : dans mon appli iOS, j'utilise MagicalRecord. J'importe le framework avec Pod donc tout roule.


Dans mon appDelegate, je peux faire un #import "CoreData+MagicalRecord.h" par exemple.


 


Maintenant, j'ajoute une extension à  mon appli.


Dans cette extension, je veux également pouvoir utiliser MagicalRecord. Or là , un #import "CoreData+MagicalRecord.h" me génère une erreur. Il le trouve pas.


 


J'ai donc un peu gratter. Dans ma target extension, j'ai ajouté la bibliothèque pod, dans le Header SearchPath, j'ai ajouté les même que ceux ajoutés à  l'appli (concernant MR, ex : "${PODS_ROOT}/Headers/Public/MagicalRecord") mais pas mieux....


 


J'ai également ajouté la build phase de copy de la fin (qui lance "${SRCROOT}/Pods/Target Support Files/Pods/Pods-resources.sh").


 


Pas mieux non plus...


 


Je sèche là  :(


 


Même l'auto completion ne fonctionne pas alors que dans les sources de l'appli, ça auto complétionne...

Réponses

  • LeChatNoirLeChatNoir Membre, Modérateur

    Ok, trouvé 


    Réponse ici :


    http://stackoverflow.com/questions/25538579/use-cocoapods-with-an-app-extension


     


    Pour les non anglophones : 


    => choisir son projet puis encore son projet (et non une target).


    => Dans l'onglet Info, Section "Configurations", sous debug, en face de l'extension, il faut bien choisir Pods.debug dans la combo.


    Idem pour la partie release.


     


    L'auto completion ne marche pas (enfin, je crois pas) mais le reste fonctionne nickel 

  • AliGatorAliGator Membre, Modérateur
    mars 2015 modifié #3
    Pourquoi tu ne rajoutes pas simplement le pod MagicalRecord dans ton Podfile dans la section pour ton extension ?

    Un Podfile de base contient des sections "target 'NomDuTarget' do ... end" et c'est en général dans ces targets que tu mets les pods que tu veux... pour cette target. Si tu n'as mis ta ligne "pod MagicalRecord" que dans ton "target 'ClimbingAway' do" mais pas dans ton "target 'ClimbingAwayExtension' do" c'est normal que MagicalRecord ne soit pas disponible dans ton target.

    Ca devrait donc donner :
    target 'ClimbingAway' do
    pod 'MagicalRecord'
    pod 'UnPodQueTuVeuxJustePourTonApp'
    end

    target 'ClimbingAwayExtension' do
    pod 'MagicalRecord'
    pod 'UnPodQueTuVeuxPourTonExtMaisPasPourTonApp'
    end
    Si jamais tu as créé ton Podfile il y a longtemps et que tu n'as pas mis les "target XXX do" mais que toutes tes lignes comme "pod MagicalRecord" sont à  la "racine" du Podfile (et pas dans un groupe "target ... do") alors par défaut on n'installe ces pods que dans le tout premier target du projet (c'est historique, à  l'avenir on compte changer ça pour que dans ce cas ça l'installe dans tous les targets c'est plus logique, mais y'a un historique derrière qui pour l'instant est tjs là ) et donc il sera mis dans ton target d'Application (car c'est souvent le 1er target) mais pas dans les autres.

    Une autre façon de faire, surtout si tu veux exactement les mêmes pods dans plusieurs targets, plutôt que de dupliquer les "target ... do", c'est d'utiliser "link_with":

    link_with 'ClimbingAway', 'ClimbingAwayExtension'
    pod 'MagicalRecord'
    pod 'UnAutrePodAUtiliserDansTesDeuxTargets'
    Le fait de choisir la configuration "Pods.debug" pour ton extension marche mais ça copie les settings générés spécialement pour ton App pour les utiliser pour ton Extension, du coup elles ne sont plus gérées indépendamment c'est dommage et c'est moins propre vis à  vis de CocoaPods... L'utilisation de 'link_with' fait ça pour toi de façon propre, avec l'avantage que si tu refais un "pod install" ça marchera toujours sans que tu aies à  remodifier ton projet.
  • LeChatNoirLeChatNoir Membre, Modérateur

    Dans mon pod, j'ai ça :


     


    platform :ios, '8.0'


     


    pod "MagicalRecord", :git => 'https://github.com/magicalpanda/MagicalRecord.git', :branch => 'develop'


    pod "CocoaLumberJack"


     


    ^^


    ben oui, la préhistoire quoi  ::)


  • AliGatorAliGator Membre, Modérateur
    Rajoute du coup la ligne "link_with 'ClimbingAway', 'CAExtension'" qui va bien et tu seras au propre 😃
  • LeChatNoirLeChatNoir Membre, Modérateur

    yep 


    Sauf que c'est pas pour ClimbingAway ;) Mais je le ferai !


    Merci encore  o:)


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