what sierra new mac human high features developer apple cocoa interface-builder
Haga clic para descargar NibUnlocker

cocoa - sierra - xcode ios 12



¿Cuál es la diferencia entre los formatos de archivo NIB y XIB Interface Builder? (5)

A partir de Interface Builder versión 3, se ha agregado un nuevo formato de archivo (con extensión .xib), que es funcionalmente idéntico a .nib, excepto que se almacena en un archivo plano, por lo que es más adecuado para el almacenamiento en sistemas de control de revisión y procesamiento por herramientas como diff.

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

¿Cuál es la diferencia entre plumín y xib en los archivos de Interface Builder?


Además, cuando compila su proyecto, el archivo .xib se compilará en plumín.


Funcionalmente nada más que el xib es un formato amigable de control de fuente


Los XIB son archivos planos en lugar de ser un paquete. Esto facilita el manejo de los sistemas SCM (gestión de control de origen). Cuando compila su aplicación, el XIB se compila en un archivo NIB para su inclusión en su aplicación.

El NIB compilado que se incluye en el paquete de la aplicación ya no se puede editar en el Interface Builder y es mucho más pequeño que el XIB equivalente o el archivo NIB heredado.


El archivo XIB es básicamente un documento fuente de un archivo NIB , XIB s casi siempre se puede editar en Xcode (a menos que estén desactualizados o corruptos) . mientras que los NIB más nuevos están comprimidos y no se pueden abrir. Los NIB más antiguos son paquetes que pueden verse con Xcode. Los NIB incluidos contienen algunos archivos fuente / archivados que incluyen designable.nib que a menudo es simplemente el archivo XIB renombrado.

NIB = N xt I nterface B uilder (NXT = NextStep = NS)

XIB = X ml I nterface B uilder

Aunque los nuevos archivos archivados de NIB no se pueden ejecutar en la mayoría de las aplicaciones, incluido Xcode, aún pueden ser desarchivadas. Encontré esta aplicación gratuita llamada NibUnlocker en el sitio web de CharlesSoft, que potencialmente puede desensamblar un archivo Nib plano y exportarlo como un documento XIB . Esta aplicación todavía tiene errores, pero a veces es muy precisa en función del contenido de Nib .

(NibUnlocker es un nombre muy inexacto, los Nibs no están bloqueados, están archivados)

Haga clic para descargar NibUnlocker

Si desea saber un poco más, puede leer información adicional que he proporcionado a continuación con respecto a los formatos NIB y XIB :

Nxt Interface Builder Anatomy:

NIB planos s

Un archivo plano NIB es un archivo complicado de analizar, pero esto no es imposible. La estructura de estos archivos es solo una lista de propiedades de Apple binary (comienza con "bplist00") y algunos de sus contenidos se archivan a través de NSKeyedArchiver. Como un NIB está formateado como una lista de propiedades, esto permite un pequeño hack: si realmente cambias la extensión de un Nib plano a .plist, ej. ArchivedNib.nib a ArchivedNib.plist En realidad, podrá abrirlo en Xcode y verlo como una Lista de propiedades aunque no se mostrarán todos los valores porque Xcode no sabe cómo mostrar algunos valores (valores CFKeyedArchiverUID). Cuando vea un Nib como una lista de propiedades, probablemente obtendrá algunas propiedades básicas como $ version, $ objects, $ archiver y $ top.

Notas útiles

Un objeto CFKeyedArchiverUID es simplemente un redirector, en el {value = xx}, el valor es un índice para un elemento en la matriz $ objects (desde el inicio de la matriz). p.ej. <CFKeyedArchiverUID 0x60800002bc20 [0x7fffef6b8c30]>{value = 29} , value = 29, el resultado sería el 29º elemento en la matriz del $ $ (Recuerde que la matriz comienza con 0). En Objective C puede recuperar este valor de un CFKeyedArchiverUID con este método:

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

(Lo descubrí usando Internet y luego utilicé Hopper para desmontar NibUnlocker y noté que en su código fuente usa la misma técnica cargando el NIB en un NSDictionary y pasando por todas sus conexiones, objetos, etc. escribe un nuevo XIB )

como si esto ayudara ;-)