[Résolu]Inclure un framework dans le .app

mybofymybofy Membre
mars 2014 modifié dans API AppKit #1

Bonjour


 


Mon application Herbier utilise un framework PGSQLKit.framework


Il est placé dans le répertoire ~/Library/Frameworks (standard) et ajouté au projet.


 


Problème : Herbier.app (hors Xcode) ne marche pas si le framework n'est pas dans ~/Library/Frameworks, ce qui est gênant pour distribuer l'application...


 


J'ai regardé du côté des NSBundle, Build Phases. Mais rien.


Tout ce passe comme s'il y avait seulement un lien vers le framework.


 


Comment inclure le contenu du framework dans Herbier.app ?


 


 


Réponses

  • CéroceCéroce Membre, Modérateur
    mars 2014 modifié #2
    Je n'ai pas le temps de chercher, mais c'est une question qui revient fréquemment, elle a été posée il y a moins de deux mois.
    Fais une recherche. (il faut ajouter la Framework dans une Copy Phase).
  • Céroce à  raison, il faut ajouter une phase de construction (build phase). Il faut aussi vérifier que l'application ira bien chercher ce framework au bon endroit et pas dans "/Library/Frameworks" ou "~/Library/Frameworks"


  • Xcode 5


     


     




    Je n'ai pas le temps de chercher, mais c'est une question qui revient fréquemment, elle a été posée il y a moins de deux mois.

    Fais une recherche. (il faut ajouter la Framework dans une Copy Phase).




     


    J'ai trouvé des discussions (trois ou quatre), mais aucune ne répond précisément à  ma question.


    Sur le net, il y a des choses, mais toutes concernent Xcode 4.


     


    Dans Build Phases, il y :


    1. Link Binary With Libraries


    2. Copy Bundle Ressources


     


    J'ai ajouté le framework à  l'une ou à  l'autre ou aux deux.


    J'ai mis dans Framework Path Search le chemin absolu du framework (répertoire du projet)


     


    Soit j'ai : dyld: Library not loaded: @loader_path/../Frameworks/PGSQLKit.framework/Versions/A/PGSQLKit


    soit: <PGSQLKit/PGSQLKit.h> not found


     


    Tout cela me dépasse et pourtant j'en ai un grand besoin !


     


  • CéroceCéroce Membre, Modérateur
    Ce sont deux problèmes différents:

    dyld: Library not loaded: @loader_path/../Frameworks/PGSQLKit.framework/Versions/A/PGSQLKit

    À l'exécution, il ne trouve pas la framework dans le bundle de l'appli => il faut mettre le bon chemin dans la copy phase.

    <PGSQLKit/PGSQLKit.h> not found

    Il ne trouve pas les fichiers .h qui définissent l'API quand tu compiles l'appli. Dans ce cas, ce sont les Header Search Paths dans les options de build qui sont mauvais. Il ne doivent pas pointer sur la framework dans le bundle de l'appli, puisque l'appli n'existe pas encore à  ce stade. Mais pointer sur la framework d'origine, celle qui est copiée.
  • Qu'appelles tu "copy phase" ?


    Je ne vois que "Copy Bundle Ressources" dans "Build Phases".

  • Salut !!


     


    Je pense que Ali sera content, je lui fais de la pub regarde cette vidéo elle va t'aider je pense : 


     


    ça parle de comment utiliser et créer des librairy externe dans ton projet.


    Comme ça tu pourras voir le fonctionnement en général et ça pourra surement t'aider dans la résolution de ton problème :-)


     


    A+ !!


     


    K.


  • CéroceCéroce Membre, Modérateur
    Va voir dans le menu Editor > Add Build Phase > Add Copy File Build phase.
  • Je viens de le trouver indépendamment de ta réponse !


     


    En lisant et relisant la doc :


    https://developer.apple.com/library/mac/documentation/MacOSX/Conceptual/BPFrameworks/Tasks/CreatingFrameworks.html


     


    Comme d'habitude c'est très simple quand on a trouvé...


     


    Et comme dirait Ali : tout est dans la doc. J'ajoute : quand on arrive à  la trouver et quand on arrive à  la comprendre.


     


    Grand merci à  tous.


  • Je reviens sur ce sujet car j'ai voulu recommencer et j'ai eu du mal.


     


    Voici ce qui marche pour moi (OSX 10.9 - Xcode 5)


    Cf. Framework Programming Guide > Embedding a Private Framework in Your Application Bundle > Using a Single Xcode Project For Both Targets


     


    Créer un framework TaTa.


    Dans Buidls Settings>Installation Directory mettre "@executable_path/../Frameworks"


     


    Créer l'application TataFWK.


    Faire glisser le product TaTa.framework (depuis le Xcode de création de TaTa) dans Build Phases>Link Binary with Libraries.


    Dans Copy Files (ajouter le cas échéant avec + ou Editor) choisir Destination>Frameworks et choisir TaTa.framework avec le +


     


    ça marche chez moi, à  plusieurs reprises. Mais chaque fois que je n'ai pas suivi exactement ce schéma ça plante.


     


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