web-dev-qa-db-fra.com

Quelle est la différence entre les formats de fichier NIB et XIB Interface Builder?

Quelle est la différence entre nib et xib dans les fichiers Interface Builder?

60
Ratan

Depuis la version 3 d'Interface Builder, un nouveau format de fichier (avec l'extension .xib) a été ajouté, qui est fonctionnellement identique à .nib, sauf qu'il est stocké dans un fichier plat, ce qui le rend plus approprié pour le stockage dans les systèmes de contrôle des révisions et le traitement par des outils tels que diff.

http://en.wikipedia.org/wiki/Interface_Builder#Design

85
Delan Azabani

Les XIB sont des fichiers plats plutôt que d'être un ensemble. Cela facilite la gestion des systèmes SCM (gestion du contrôle des sources). Lorsque vous compilez votre application, le XIB est compilé dans un fichier NIB pour inclusion dans votre application.

La NIB compilée incluse dans le bundle d'application n'est plus modifiable dans Interface Builder et est beaucoup plus petite que le fichier XIB ou NIB équivalent équivalent.

19
karthikPrabhu Alagu

Le fichier [~ # ~] xib [~ # ~] est essentiellement un document source d'un [~ # ~] nib [~ # ~] Fichier, [~ # ~] xib [~ # ~] s peut être presque toujours édité dans Xcode (sauf s'ils sont obsolètes ou corrompus). tandis que les plus récents [~ # ~] nib [~ # ~] sont compressés et ne peuvent pas être ouverts, les plus anciens [~ # ~] nib [~ # ~] s sont des bundles qui peuvent être visualisés par Xcode, The Bundled [~ # ~] nib [~ # ~] s contiennent des fichiers source/archivés qui incluent designable.nib qui est souvent juste le fichier renommé [~ # ~] xib [~ # ~] .


[~ # ~] plume [~ # ~] = [~ # ~] n [~ # ~] xt [~ # ~] i [~ # ~] nterface [ ~ # ~] b [~ # ~] uilder (NXT = NeXTSTEP = NS)

[~ # ~] xib [~ # ~] = [~ # ~] x [~ # ~] ml [~ # ~] i [~ # ~] nterface [ ~ # ~] b [~ # ~] uilder


Bien que les nouveaux fichiers archivés [~ # ~] nib [~ # ~] ne soient pas ouverts à la plupart des applications, y compris Xcode, ils peuvent toujours être désarchivés. J'ai trouvé cette application gratuite appelée NibUnlocker Sur le CharlesSoft Site Web qui peut potentiellement démonter un fichier plat Nib et l'exporter en tant que [~ # ~] xib [~ # ~] document. Cette application est encore assez boguée mais elle est parfois très précise en fonction du contenu de Nib .

(NibUnlocker est un nom très inexact, les plumes ne sont pas verrouillées, elles sont archivées)


Cliquez pour télécharger NibUnlocker


Si vous souhaitez en savoir un peu plus, vous pouvez lire quelques informations supplémentaires que j'ai fournies ci-dessous concernant la [~ # ~] plume [~ # ~] et [~ # ~] xib [~ # ~] Formats:

Nxt Interface Builder Anatomy:

Plat [~ # ~] plume [~ # ~] s

Un fichier Flat NIB est un fichier compliqué à analyser mais ce n'est pas impossible. La structure de ces fichiers est juste une Apple (commence par "bplist00") et une partie de son contenu est archivée via NSKeyedArchiver. Depuis un [ ~ # ~] nib [~ # ~] est formaté comme une liste de propriétés, cela permet un petit hack: si vous changez réellement l'extension d'un flat Nib à .plist, par exemple. ArchivedNib.nib à ArchivedNib.plist Vous pourrez réellement l'ouvrir dans Xcode en le voyant comme une liste de propriétés bien que toutes les valeurs ne soient pas affichées car Xcode ne sait pas comment afficher certaines valeurs (valeurs CFKeyedArchiverUID). Lorsque vous affichez une Nib en tant que liste de propriétés, vous obtiendrez probablement quelques propriétés de base telles que $ version, $ objects, $ archiver et $ top.

Notes utiles

Un objet CFKeyedArchiverUID est simplement un redirecteur, dans le {value = xx}, la valeur est un index pour un élément dans le tableau $ objects (depuis le début du tableau). par exemple. <CFKeyedArchiverUID 0x60800002bc20 [0x7fffef6b8c30]>{value = 29}, valeur = 29, le résultat serait le 29e élément du tableau de l'objet $ (N'oubliez pas que le tableau commence par 0). Dans l'objectif C, vous pouvez récupérer cette valeur à partir d'un CFKeyedArchiverUID avec cette méthode:

+ (NSUInteger)valueForKeyedArchiverUID:(id)keyedArchiverUID {
  void *uid = (__bridge void*)keyedArchiverUID;
  NSUInteger *valuePtr = uid+16;
  return *valuePtr;}

(J'ai découvert cela moi-même en utilisant Internet et plus tard j'ai utilisé Hopper pour démonter NibUnlocker et j'ai remarqué dans son code source, il utilise la même technique en chargeant le [~ # ~] plume [~ # ~] dans un NSDictionary et en passant par toutes ses connexions, objets, etc. et écrit un nouveau [~ # ~] xib [~ # ~] )

yo m'a frappé avec un upvote si cela a aidé ;-)

18
Lucasware

De plus, lorsque vous compilez votre projet, le fichier .xib sera compilé dans nib.

13
Vojto

Fonctionnellement rien mais le xib est un format convivial pour le contrôle de source

3
Kevin