nib compacté?

tabliertablier Membre
Pour des problèmes de Localisation, je cherche à  dé-compacter les "nib" qui sont dit "Compilés".
J'ai essayé différentes choses, et récemment j'ai posé un "nib compacté" sur le Property List Editor. Oh surprise! l'application ouvre le fichier (totalement ou non, je ne sais pas). Les nib compactés me paraissent être des "Binary Property List".
Pour ceux qui sont interessés par cela, essayez la manipulation avec un nib compilé pas trop touffu et dites-moi si vous pensez que l'on pourrait remonter à  quelque chose d'editable sous IB?

Réponses

  • AliGatorAliGator Membre, Modérateur
    22:46 modifié #2
    Les NIB sont en réalité de simples fichiers créés par "NSArchiver" (NSCoder, NSKeyedArchiver, tout ça, ouvre n'importe quel fichier créé par un NSKeyedArchiver même par un de tes programmes Cocoa je suis sûr que tu trouveras une similitude).

    Les "XIB" sont la même chose que ces NIB, mais en version XML (pour être compatible avec les SCM comme SVN ou GIT ou autre), et contenant en plus ont des informations purement... informatives pour l'édition du XIB dans IB (comme le nom des objets que tu peux mettre dans IB, qui n'ont aucun autre intérêt que de t'aider à  mieux t'y retrouver, ou la position des fenêtres dans IB, ou le chemin du xcodeproj auquel le XIB est lié pour que IB puisse retrouver les .h du projet et ainsi te proposer les outlets, etc. etc.).

    Quand le XIB est compilé, il est en fait recomposé en une NSArchive plus compacte car épurée des informations utiles uniquement à  l'édition (un peu comme quand on "strip" les symboles de debug d'un programme compilé si tu veux) et surtout converti au format binaire des NSArchives (qui ne sont que des plist mais suivant une structure particulière pour pouvoir contenir un peu tout et n'importe quel type d'objet <NSCoding>)
  • tabliertablier Membre
    22:46 modifié #3
    Je n'ai pas trouvé ou c'est expliqué dans la documentation Apple (mais la doc, c'est quelque chose!).
    Si c'est connu, certains ont dû tenter de remonter à  quelque chose d'editable et je ne trouve rien nulpart sur le web!
    Aurais-tu un lien ?
  • AliGatorAliGator Membre, Modérateur
    22:46 modifié #4
    C'est connu de mon expérience d'une part : j'avais déjà  remarqué la structure que tu mentionnes en ouvrant un NIB avec PropertyListEditor ou plutil, et comme j'avais déjà  ouvert de la même manière des fichiers générés par NSArchiver, et vu un peu leur structure, j'avais reconnu le format (du moins ça y ressemble beaucoup, même si j'ai rien compris à  ce format on voit que c'est du plist avec des $objects et $classes et autre $machin)

    C'est aussi connu de quelquepart sur le net que une fois un fichier XIB compilé en NIB, on ne peut plus le réouvrir dans IB car il a "strippé" les informations qui sont utiles uniquement à  l'édition, je ne sais plus où j'avais lu ça, mais c'est à  une époque où j'avais voulu modifier un NIB (compilé) d'une application donc j'avais voulu l'ouvrir sur IB et que j'avais pas réussi et avait un peu cherché sur le net avant d'abandonner l'idée (après j'avais p'tet pas assez creusé)... mais ça date et je n'ai plus de lien en tête.
  • tabliertablier Membre
    22:46 modifié #5
    Ce que je cherche c'est à  obtenir les strings inclus pour faire de la Localisation. Je vais essayer en comparant l'extraction faites par ibtool dans le xib par rapport au contenu du nib compacté.
    J'ai un logiciel d'aide à  la Localisation à  faire essayer. Si j'arrive à  extraire les strings depuis un xib compacté, j'ajouterai la possibilité dans mon programme.
  • NseaProtectorNseaProtector Membre
    22:46 modifié #6
    J'ai utilisé l'astuce trouvé au lien ci dessous:
    http://maclocal.free.fr/files/ouvrir_editer_fichiers_nibs_compiles_snow_leopard.html
    Et ça marche parfaitement. Un peu rébarbatif mais ça marche. S'il existe un script, un soft...
  • tabliertablier Membre
    22:46 modifié #7
    Je vais intégrer cette méthode dans mon logiciel "Localise".
    ........  A suivre.
  • tabliertablier Membre
    juin 2011 modifié #8
    J'ai implémenté la methode d'extraction des strings dans mon programme.
    J'ai pris quatre nibs "au hazard"! Les nibs d'Aperçu, du carnet d'adresse, de DVDxDVPro et de DVDTheque version 2.9.5.  Mon programme applique la transformation et extrait les strings avec ibtool. Pas de problème avec Aperçu et le carnet d'adresse. L'extraction des strings est bonne.
    Avec DVDxDVPro j'obtiens l'erreur:
    The document "DVDxDVPro.nib" could not be opened. An instance of NSQuickDrawView could not be decoded.
    Avec DVDTheque j'obtiens l'erreur:
    The document "dvdTheque.nib" could not be opened. An instance of NSMovieView could not be decoded
    Si j'exécute manuellement l'opération et que j'essaie d'ouvrir les nibs reconstruits avec IB, j'obtiens les mêmes erreurs. Mais si je lance ces applications, elles fonctionnent parfaitement!
    NSMovieView est une classe obsolète et supprimée d'IBCocoaFramework. Donc il est normal qu'IB ne puisse ouvrir le nib de DVDTheque.  Par contre, NSQuickDrawView n'est pas obsolète. Mon explication serait qu'il doit manquer des références d'objets dans le nib utilisé comme modèle.  Donc je pense que le "nib modèle", le "nib compacté" et l'IBCocoaFramework doivent être compatibles pour que la méthode marche.
    D'autre part, j'ai constaté que la structure interne des nibs à  changé sous IB 3.2.x:  Les fichiers classes.nib et info.nib sont remplacés par le fichier designable.nib.

    Mon analyse vaut ce qu'elle vaut, mais elle m'incite à  abandonner l'implémentation de cette mèthode.
  • mpergandmpergand Membre
    22:46 modifié #9
    dans 1306921116:

    NSQuickDrawView n'est pas obsolète.

    Deprecated depuis Tiger !

    The NSQuickDrawView class lets you use Carbon QuickDraw functions inside an NSView object.

    Important: The QuickDraw API is deprecated in Mac OS X v10.4 and later. See Quartz Programming Guide for QuickDraw Developers for information on moving from QuickDraw to Quartz.

  • tabliertablier Membre
    22:46 modifié #10
    Deprecated depuis Tiger !
    Exact, j'ai lu trop vite la doc!  Je pense quand même qu'implémenter cette méthode dans Localise reste problèmatique, vu l'évolution de IB, de son frameworks et de la structure des documents .nib!!
Connectez-vous ou Inscrivez-vous pour répondre.