[BackRow.framework] Comment l'utiliser ?

iLoveCocoaiLoveCocoa Membre
avril 2010 modifié dans API AppKit #1
Bonjour tout le monde !

Voilà  je cherche à  faire un plugin pour Front Row et après quelques class dump je me suis aperçu que son fonctionnement résidait dans BackRow qui est ... un Framework privé ! Alors j'espère que je ne vais pas déchaà®ner les foules contre moi  >:) mais je dois l'utiliser, et oui, je connais les risques encourus.

BackRow se trouve là  : /System/Library/PrivateFrameworks/BackRow.framework

J'ai suivi plus ou moins ce tuto http://wiki.awkwardtv.org/wiki/FRAppliance_101 mais il est pour l'AppleTV qui est *presque* comme FrontRow.

Le problème c'est que BackRow semble être ignoré par le compilateur  :'(   Une idée ? (ou même plusieurs    ::) )

1271904901.png

Les erreurs dans mon header :
errorvj.png

Voilà  mon dossier Xcode : http://www.mediafire.com/?drlmgmyzydf
(Il y a les BackRow's Headers dedans.)

Merci d'avance  ;)

[Edit] imageshack fait des siennes... imagup fera mieux ?

Réponses

  • lgriffielgriffie Membre
    20:10 modifié #2
    Humm question bête. Est-ce que le framework à  été référencé dans le projet ?
  • iLoveCocoaiLoveCocoa Membre
    20:10 modifié #3
    Oui, j'ai remis le photo d'écran de Xcode dans le 1er post  ;)
  • muqaddarmuqaddar Administrateur
    20:10 modifié #4
    dans 1271857438:

    Oui, j'ai remis le photo d'écran de Xcode dans le 1er post  ;)


    Mais le plugin n'a pas l'air targeté ?
  • iLoveCocoaiLoveCocoa Membre
    20:10 modifié #5
    Je ne vois pas ce que vous (on peut se tutoyer ?) voulez dire par "targeter" le plugin...

    J'ai ouvert l'item targets :
    1271906081.png
  • lgriffielgriffie Membre
    20:10 modifié #6
    Il faut que le bundle "BlackRowPlugin.bundle soit associé à  l'application qui sera compilée. Il faut donc "l'ajouté" en cochant la case "cible" 7ème colonne sur le screenshot.
  • iLoveCocoaiLoveCocoa Membre
    20:10 modifié #7
    Toujours les même erreurs dans les .m et .h plus une erreur :

    1271907180.png
    1271907392.png


    Le compilateur a raison  :'(
  • AliGatorAliGator Membre, Modérateur
    20:10 modifié #8
    Bah oui le compilateur a raison.
    Donc pourquoi tu n'enlèves pas cette dépendance ?
    En effet, dans ton target "BackRowPlugin", tu as "BackRowPlugin" lui-même qui est inclus dans la phase "Copy Resources"... c'est là  qu'est la dépendance cyclique.
  • iLoveCocoaiLoveCocoa Membre
    20:10 modifié #9
    Mais je reviens dans mon problème initial, pourquoi le compilateur ignore BackRow.framework ???

    J'ai toujours cette erreur du debugger :
    /Users/Julien/Desktop/BackRowPlugin/BackRowPluginAppliance.h:10:0<br /><br />/Users/Julien/Desktop/BackRowPlugin/BackRowPluginAppliance.h:10:28: error: BackRow/BackRow.h: No such file or directory<br />
    
  • Philippe49Philippe49 Membre
    20:10 modifié #10
    Je ne trouve pas de fichier BackRow/BackRow.h dans le système de fichier... ni dans /System/Library/etc... , ni dans /developper/SDKs/etc...
  • iLoveCocoaiLoveCocoa Membre
    20:10 modifié #11
    C'est un PrivateFramework, est dans :

    /Developer/SDKs/MacOSX10.6.sdk/System/Library/PrivateFrameworks/BackRow.framework

    Peut-être que je m'y suis mal pris, c'est la première fois que je joue avec un PrivateFramework  :D
  • Philippe49Philippe49 Membre
    20:10 modifié #12
    En incluant les fichiers de tes headers dans le projet (Add> existing FIles) et en en faisant un #import "BackRow.h" cela règle le problème de l'erreur, en en créant un très grand nombre semblables ...
    Maintenant je ne sais pas si pour autant cela va fonctionner au niveau de ld
  • Philippe49Philippe49 Membre
    20:10 modifié #13
    dans 1271885564:

    C'est un PrivateFramework, est dans :

    /Developer/SDKs/MacOSX10.6.sdk/System/Library/PrivateFrameworks/BackRow.framework

    Peut-être que je m'y suis mal pris, c'est la première fois que je joue avec un PrivateFramework  :D


    Oui c'est là  que je suis allé voir, mais il n'y a pas de BackRow.h à  cet endroit.
  • AliGatorAliGator Membre, Modérateur
    20:10 modifié #14
    Habituellement dans un framework (comprendre "dans un framework public", regarde pour exemple dans les frameworks qui sont dans /System/Library/Frameworks), tu as un dossier "Headers" avec dedans le ou les header (.h) utiles pour le framework. Dont d'ailleurs en général, et par convention, un header qui a comme nom le nom du framework, et contient les #import de tous les autres headers " enfin s'il y en a plus d'un dans le framework bien sûr " ce qui permet de les grouper tous un un #import dans ton code (exemple : AddressBook.h dans AddressBook.framework/Headers)

    Ici tu manipules un framework privé. Ce qui veut dire qu'Apple utilise ce framework en interne, mais que c'est privé donc ils n'ont pas l'intention de rendre publique l'API, pour te permettre de compiler avec. Donc c'est logique que l'API publique, que tu peux voir dans le .h habituellement, ne soit pas disponible.

    Après, y'a toujours moyen de la récupérer en bidouillant, en allant extraire les symboles de la librairie (enfin en l'occurrence de la lib dynamique a.k.a le framework), via des outils comme classdump (basé sur otool), etc... Mais bon, tu n'auras pas le .h disponible directement sur ton système, puisque le framework est privé donc qu'ils veulent justement garder l'API privée et pas publique.
  • iLoveCocoaiLoveCocoa Membre
    20:10 modifié #15
    Okai, merci AliGator pour l'explication, je savais le début mais pas la fin .

    Pourtant dans ce tuto http://wiki.awkwardtv.org/wiki/FRAppliance_101 ils utilisaient
    #import &lt;BackRow/BackRow.h&gt;
    


    Or c'est un private Framework.

    Je vais essayer d'ajouter les headers moi  ;)

    Merci les gas !
  • AliGatorAliGator Membre, Modérateur
    20:10 modifié #16
    Ben heu en même temps justement dans le tuto qu'ils citent, ils disent justement qu'il faut que tu installes les headers (qu'ils te fournissent dans une archive ZIP sur le site que tu as toi-même cité) !
    Bref ils expliquent tout en détail et te fournissent tout ce qu'il faut... normal que si tu n'as pas suivi à  la lettre le tuto que tu cites et que tu oublies des étapes, ça ne marche pas au final :)
  • iLoveCocoaiLoveCocoa Membre
    20:10 modifié #17
    Oui mais les headers que j'ai généré moi ont des noms différents (certains du moins) de ceux qu'ils ont, eux ils ont ceux pour un AppleTV, de plus dans ceux que j'ai créé il n'y avait pas de BackRow.h qui les regroupes tous donc je vais le créer moi.
Connectez-vous ou Inscrivez-vous pour répondre.