Importer un framework

chaps31chaps31 Membre
10:47 modifié dans API AppKit #1
Bonjour à  tous,

Il y a plusieurs mois j'avais commencé un projet xcode et patatra le portable indispensable pour coder ne m'a plus été disponible, donc gros break (je ne pouvais pas coder sur mon imac le soir et le week-end pour cause de diplomatie familiale...).

Bref, depuisqques jours j'ai un macbook Pro 2.4Ghz, le nouveau, je passe sur le bonheur d'avoir une telle machine, et je me relance dans la programmation. Et je me heurte déjà  à  un problème que je n'avais pas rencontré avant...

Mon programme utilise une base de donnée PostgreSQL, j'ai trouvé un framework pour utiliser ma base. Dans le .h je met un #import "PostgreSQL/PostgreSQL.h", il trouve ce fichier mais par contre erreur il ne trouve aucun des fichiers header auquel fait appel PostgreSQL.h, pourtant dans le même dossier PostgreSQL...

J'en conclu que je ne place pas le dossier du framework au bon endroit... SOS comment doit-on faire ? Je n'ai pas trouvé la solution dans ce forum ou ailleurs...

Merci

Réponses

  • schlumschlum Membre
    10:47 modifié #2
    Si ça fait partie d'un Framework, c'est <PostgreSQL/PostgreSQL.h>
  • chaps31chaps31 Membre
    10:47 modifié #3
    J'ai essayé et là  il ne trouve plus le PostgreSQL.h... J'ai mis le dossier du framework dans le dossier de mon projet (mais j'ai aussi essayer ailleurs là  où je voyais des framework, je ne maitrise pas vraiment leur localisation nio la différence entre guillemets et <>).

    PS : Vivement que le nouveau bouquin de programmation sorte (fin de ce mois)...
  • schlumschlum Membre
    10:47 modifié #4
    Si ça ne fonctionne pas avec <> c'est que le framework a mal été ajouté au projet...
    Par contre, utiliser un Framework à  inclure dans son bundle est une opération complexe. Il y a déjà  un sujet qui en parle.
  • AliGatorAliGator Membre, Modérateur
    10:47 modifié #5
    Heu de ce que je comprend à  te lire, j'ai bien l'impression que tu as ajouté/copié/déplacé le framework dans le dossier du projet dans le Finder à  côté de ton fichier xcodeproj... Or cette opération n'a aucun effet sur la compilation de ton projet ;)

    Il faut rajouter ton framework (où qu'il soit dans le Finder) à  ton projet, en faisant glisser le framework dans la fenêtre de projet, dans la partie "Frameworks -> Linked Frameworks". Ou alors, dans Xcode, menu Project, faire "Add to project..." et sélectionner le framework à  ajouter à  ton projet. Et seulement là  ton projet Xcode saura qu'il faut utiliser le framework et saura qu'il peut aller chercher les headers dedans.
    Ensuite, si c'est un framework privé que tu souhaites inclure dans le bundle de ton application, il faut s'assurer qu'il y soit copié (il faut ajouter une "Build Phase". Tout ça est décrit dans l'aide de Xcode, il suffit de rechercher le mot clé "framework" par exemple

    Après, l'emplacement où est ton framework dans le Finder importe peu (du moment que tu ne le bouges pas tous les 4 matins). Si c'est un framework que tu n'utilise que pour ton projet, tu peux le mettre dans le même dossier que ton xcodeproj, mais tu peux aussi l'avoir mis dans un dossier "MesFrameworks" à  côté, ou complètement autre part. Du moment qu'il le trouve au moment où tu compiles et que soit il est copié dans le Bundle soit il est ensuite dans les emplacements standards de OSX (/System/Library/Frameworks, /Library/PrivateFrameworks/, ...) sur les machines sur lesquelles tournera ton appli.
  • chaps31chaps31 Membre
    10:47 modifié #6
    Ca marche merci, bon reste encore 2 bugs mais plus le même pb, je vais chercher et vous recontacter en cas d'échec  ;)
  • chaps31chaps31 Membre
    10:47 modifié #7
    Bon toujours des problèmes.... D'abord un libpq-fe.h introuvable... Après avoir ajouté au projet le dossier include de Postgresql ça va mieux, normal il le contient  ;)

    Donc j'ai mon framework et le "include" qui sont dans mon projet mais la 2 problèmes :

    - Il ne trouve pas libpq/libpq-fs.h. Ce header est appelé par un autre au sein du dossier include (NB : avec des guillemets dans le import), le dossier include que j'ai ajouté à  mon projet et qui contient le fichier qui appel ce libpq/libpq-fs.h contient bien un dossier libpq qui lui même contient un libpq-fs.h  Alors pourquoi il ne le voit pas ??? SOS.

    - J'ai une panoplie de Warning, du genre : Warning: Multiple build commands for output file /Users/admin/Desktop/Gestovet/Gestovet/build/Release/Gestovet.app/Contents/Resources/CompositePage.html Tous ces warning font référence à  des pages html de documentation du framework que j'ai intégré. En effet j'ai ajouté au projet le dossier entier du framework qui contenait la doc.. C'est grave ? Je m'en fout ou je supprime le dossier doc de mon projet dans xcode ?

    Merci par avance de vos lumière.
  • chaps31chaps31 Membre
    10:47 modifié #8
    OUPS juste une précision, le header qui appel le fichier libpq/libpq-fe.h n'est pas dans le dossier include mais il appel aussi un autre header dans le include et ça sans erreur... Tout se passe si dans mon projet le header X qui est dans le dossier D1 appel des .h dans un autre dossier D2, pas de problème sauf s'il appel un .h qui est contenu dans un sous-dossier de D2, malgré un chemin d'accès écrit correctement, et je le répète entre guillemets.

    Désolé pour cette erreur dans mon précedent message
  • schlumschlum Membre
    10:47 modifié #9
    Il faut ajouter le flag -lpq au lien, le flag -I<contenant de libpq/libpq-fs.h> à  la compilation et le flag -L<contenant de libpq.a> au lien également
  • chaps31chaps31 Membre
    10:47 modifié #10
    Argh et moi qui ne sait pas ce qu'est un flag...  :)beta:
    Samedi j'achète le nouveau bouquin de prog cocoa
  • schlumschlum Membre
    10:47 modifié #11
    Rien à  voir avec le Cocoa... Ce sont les options de compilation. À mettre dans les infos du projet ; ou alors il faut compiler à  la main (ce sont les arguments de "gcc").
  • AliGatorAliGator Membre, Modérateur
    10:47 modifié #12
    Il y a des moyens dans Xcode de spécifier ces mêmes options de manière un peu plus graphique plutôt que de sortir les flags de gcc directement je crois.
    Dans les options du projet en particulier, indiquer les librairies auxquelles ton projet doit se linker (si tu utilises bien un framework encapsulant tes librairies ça se fait tout seul quand tu ajoutes le framework au projet je crois), ajouter éventuellement des "additionnal include path" dans les réglages du projet aussi, vérifier que dans les Build Phases de ton target tu ais bien tout ce qu'il faut...
  • chaps31chaps31 Membre
    10:47 modifié #13
    Argh... Ca y est je suis largué  :'(   C'est quand même bizarre, je fais un add to project d'un dossier contenant un framework et à  la compilation il ne suit pas les arborescences.... Je crois qu'il me manque des bases là ... Encore un coup de main ? Je me sens un peu boulet là , désolé, mais apprendre à  programmer en objective-c ok, bidouiller x-code ok, apprendre la POO ok, mais là  je coince... on sent l'amateur.... Mais qui aime ça ;)
  • schlumschlum Membre
    10:47 modifié #14
    Ah ben un coup de main... À part la doc d'Apple là ...
    Sur les cibles, tu demandes les informations, il y a plein de paramètres de compilation dans l'onglet "Build".
  • chaps31chaps31 Membre
    10:47 modifié #15
    Allez, je me retrousse les manches et j'y vais.
    Au passage j'ai acheté le bouquin de hillegass, sortie 21 novembre 2008, il m'a l'air très bien.
  • chaps31chaps31 Membre
    10:47 modifié #16
    Bon le problème est que je ne veux pas que mon code soit libre de droit, et en utilisant un framework tout fait pour postgresql comme précisé par schlum sur un autre forum (il est partout  :o )  je suis obligé de le rendre libre.

    Donc va falloir que je programme tout ça. J'ai installé postgresql (dernière version livré avec un pkg, impec), là  j'ai dans le dossier bibliothèque, un dossier Postgresql8 installé avec (entre autre) un dossier "include" plein de header et un dossier lib. Auriez-vous une source de lecture sur le net où je  puisse apprendre comment les utiliser dans mon projet cocoa. Un add to project pour le dossier include, et aussi pour le lib ?
    En fait qu'est-ce que ces librairies en .dylib et en .a ??? (je fais l'amalgame entre framework et librairies)
    Le dossier "include" avec tout ces .h est un framework ? Quid des .m ?
    Il me manque de sacrés bases...

    Vous pouvez bien sûr me "dégrossir" si vous en avez le courage je vous en serais éternellement reconnaissant et vous lirais avec attention, mais je suis preneur de saines lectures sur la toile si vous avez des pages où tout se trouve ce qui vous prendra moins de temps, j'ai beau chercher, je ne trouve pas...

    Merci  :why?:
  • chaps31chaps31 Membre
    10:47 modifié #17
    Je cherche, je cherche... Et au final la question semble se résumer à 

    Comment utiliser une bibliothèque C dans mon code Objective-C....
    :crackboom:-
  • chaps31chaps31 Membre
    10:47 modifié #18
    En fait un add to project puis des lignes de C au sein de mon code objective C appelant des fonctions des librairies déclarées en import dans le header semble marcher.
  • schlumschlum Membre
    10:47 modifié #19
    Utilise la bibliothèque statique (.a) ; sinon il faudra que tu installes la bibliothèque dynamique avec ton programme à  l'endroit où elle était chez toi au moment du lien.
  • AliGatorAliGator Membre, Modérateur
    10:47 modifié #20
    Sauf si la lib statique qu'il veut utiliser est sous licence (L)GPL et l'oblige à  publier son code source et que lui ne veut pas... et donc préfère un linkage dynamique (faut voir les libertés que laisse ladite licence dans ce cas dynamique ceci dit, en tout cas s'il fait un linkage statique c'est sûr qu'il est hors licence dans ce type de cas)
  • schlumschlum Membre
    10:47 modifié #21
    GPL oblige effectivement à  publier ses sources... Pas LGPL qui permet les mêmes libertés que la licence BSD  ;)

    Mais là  on parle de postgreSQL qui est sous licence BSD donc pas de problèmes !
  • chaps31chaps31 Membre
    10:47 modifié #22
    Voilà  pourquoi j'ai abandonné les framework de P3 Consulting et que je cherche à  utiliser directement les librairies C fournies avec PostgreSQL 8
  • Philippe49Philippe49 Membre
    10:47 modifié #23
    Je n'y connais pas grand chose en SQL, mais Apple fournit SQLite . Ce n'est pas suffisant pour ton projet ?
  • chaps31chaps31 Membre
    10:47 modifié #24
    Malheureusement, sauf erreur de ma part, SQLite ne permets pas le multiposte contrairement à  Postgre... J'ai toujours été surpris qu'Apple ne fournisse que cette solution pour accéder à  une BDD SQL... Volonté de ne pas froissé MySQL, volonté de mettre filemaker pro en avant...
Connectez-vous ou Inscrivez-vous pour répondre.