[Résolu]Cocoapods et les liens qui ne fonctionnent pas !

CirdoCirdo Membre
mars 2015 modifié dans Objective-C, Swift, C, C++ #1

Bonjour à  tous,


 


Il y a pas longtemps j'ai décidé d'installer cocoapods. Tout fonctionne bien...


Je dois installer SSKeychain pour mon projet, je le fais grâce à  cocoapods.  


Mon projet comporte un frameworks et une applie mac. Du coup j'ai installer SSkeychain sur le frameworks et sur l'applie. 


Une image vaut mieux qu'un long discours pour le fonctionnement du projet : 


 


Réponses

  • AliGatorAliGator Membre, Modérateur
    Peux-tu indiquer ici :
    - A quoi ressemble la liste des targets de ton projet ?
    - Ce que tu as mis dans ton Podfile


    En particulier :
    - je trouve cela très bizarre que tu aies un Project dans un Projet (Clem.xcodeproj en sous-projet de iClem.xcodeproj) " ce n'est plus du tout standard ce genre de structure, je trouve ça un peu bizarre, mais bon à  la limite ça peut passer (ça fait depuis Xcode 3 qu'on ne fait plus des projets contenants des sous-projets ^^)

    - Par contre et surtout, as-tu bien ouvert le xcworkspace et non pas le xcodeproj après avoir exécuté ton "pod install" (comme te l'indique le message à  la fin de l'exécution de "pod install") ? Car là  vu ta capture j'ai l'impression que tu as ouvert ton "iClem.xcoodeproj" au lieu du "iClem.xcworkspace" que t'a généré CocoaPods (workspace qui va contenir ton propre projet iClem.xcodeproj d'un côté, que tu peux modifier à  ta guise, et le projet Pods.xcodeproj généré par CocoaPods pour gérer les librairies et auquel tu n'as pas trop à  toucher)

    Si tu as ouvert le projet et non le workspace, c'est normal qu'il te mette cette erreur comme quoi il ne trouve pas la lib Pods-Clem-SSKeychain. Car cette lib est générée par le projet Pods inclut dans le Workspace, et c'est seulement si tu ouvres le Workspace (contenant ton projet d'App et le projet Pods) que Xcode va savoir compiler et générer les librairies de tes pods avant de compiler ton app qui les utilise !
  • CirdoCirdo Membre
    mars 2015 modifié #3


    En particulier :

    - je trouve cela très bizarre que tu aies un Project dans un Projet (Clem.xcodeproj en sous-projet de iClem.xcodeproj) " ce n'est plus du tout standard ce genre de structure, je trouve ça un peu bizarre, mais bon à  la limite ça peut passer (ça fait depuis Xcode 3 qu'on ne fait plus des projets contenants des sous-projets ^^ )




    Je me suis inspiré des Logins Items  ::)


     


    Voici mon pod pour iClem (l'application principale) :



    # Uncomment this line to define a global platform for your project
    # platform :Mac, '10.10'


    target 'iClem' do
    pod 'SSKeychain'
    workspace 'Clem'
    end

    target 'iClemTests' do

    end

    target 'iClem Tests' do

    end

     

    Et pour Clem (le frameworks) :



    # Uncomment this line to define a global platform for your project
    # platform :Mac '10.0'
    pod 'SSKeychain'
    target 'Clem' do

    end
     

    Pour les targets, j'ai le targets test et iClem.app. Ensuite pour Clem, j'ai le frameworks.


     


     


     




    - Par contre et surtout, as-tu bien ouvert le xcworkspace et non pas le xcodeproj après avoir exécuté ton "pod install" (comme te l'indique le message à  la fin de l'exécution de "pod install") ? Car là  vu ta capture j'ai l'impression que tu as ouvert ton "iClem.xcoodeproj" au lieu du "iClem.xcworkspace" que t'a généré CocoaPods (workspace qui va contenir ton propre projet iClem.xcodeproj d'un côté, que tu peux modifier à  ta guise, et le projet Pods.xcodeproj généré par CocoaPods pour gérer les librairies et auquel tu n'as pas trop à  toucher)


    Si tu as ouvert le projet et non le workspace, c'est normal qu'il te mette cette erreur comme quoi il ne trouve pas la lib Pods-Clem-SSKeychain. Car cette lib est générée par le projet Pods inclut dans le Workspace, et c'est seulement si tu ouvres le Workspace (contenant ton projet d'App et le projet Pods) que Xcode va savoir compiler et générer les librairies de tes pods avant de compiler ton app qui les utilise !




    Oui, j'ai bien ouvert les .xcworkspace


  • AliGatorAliGator Membre, Modérateur
    J'avoue j'ai du mal à  comprendre ta structuration de projet en fait. T'as iClem, Clem, 2 targets de test nommés presque pareil mais pas tout à  fait...

    Et vu que ça faisait une éternité que je n'avais pas vu cette structure d'un sous-projet dans un projet vu que c'est démodé depuis qu'on a dépassé Xcode 3, je ne suis même pas sûr que la phase d'intégration que fait CocoaPods gère ce genre de structure de xcodeproj atypique.
    Ce qui fait qu'elle a peut-être intégré la librairie libPods-Clem-SSKeychain dans le projet iClem.xcodeproj mais pas dans Clem.xcodeproj, et que Xcode n'arrive pas à  trouver tout seul les "Target Implicit Dependencies" vu que tu n'as pas utilisé un workspace (qui permet ça) mais un sous-projet (pour lesquels les dépendances implicites entre targets ne marchent pas toutes seules justement, et c'était bien ch*ant à  l'époque)

    ---

    Du coup j'avoue que vu que j'ai du mal à  voir ta structure projet, ou plutôt arriver à  visualiser quel projet contient quel type de target dans ta config, et que je ne peux pas voir si la lib générée par CocoaPods a bien été intégrée à  tes targets comme il faut, c'est un peu dur de t'aider dans le flou comme ça.

    A mon avis, le fait que tu utilises un sous-projet fait que ce sous-projet ne détecte pas les dépendances implicites comme ça serait le cas avec un workspace ; peut-être qu'en rajoutant une dépendance explicite de Clem vers libPods du coup ça aiderait Xcode à  s'y retrouver ? Sinon je peux regarder le projet vite fait si tu me l'envoie, mais bon dans tous les cas je te conseillerais de te passer de ce "sous-projet dans un projet", c'est plus la mode et tu ne profiteras pas de fonctionnalités comme la détection implicite de dépendances. Il aurait été plus simple de mettre ton target pour le framework Clem directement comme un nouveau target dans ton projet iClem. Ou d'en faire un pod. Ou de mettre son xcodeproj dédié dans le xcworkspace, et pas en sous-projet.
  • CirdoCirdo Membre


    Il aurait été plus simple de mettre ton target pour le framework Clem directement comme un nouveau target dans ton projet iClem. Ou d'en faire un pod. Ou de mettre son xcodeproj dédié dans le xcworkspace, et pas en sous-projet.




    La Doc à  toujours raison :)


     


    J'ai différencier les deux projets. Pour le frameworks, je vais surement faire un pod. 


    Quand tu m'as dis que mon architecture était vielle, j'ai pas tout de suite pensé à  séparer les projets. Du coup c'est fait.


     


     


    Merci encore pour tes réponses AliGator :)

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