2012-04-27 15 views
5

soy algo curioso para el desarrollo de aplicaciones iOS con Xcode, a pesar de que específicamente:¿Cómo es que Xcode no se vincula automáticamente con QuartzCore cuando el proyecto lo usa?

#import <QuartzCore/QuartzCore.h> 

en nuestra ViewController.h, cuando el proyecto está vinculado, la biblioteca QuartzCore no está vinculado de forma automática. ¿Porqué es eso?

+0

+1 por su pregunta ... yo también enfrenté el mismo problema incluso después de agregar el framework QuartzCore. Tuve que googlear esta sintaxis ** # import ** por mucho tiempo. Me encantó si la característica de autocompletar estuviera allí para esto. –

Respuesta

11

Porque la importación de un encabezado no está de ninguna manera conectada al enlace con una biblioteca.

Deberá agregar QuartzCore Framework a la lista de bibliotecas con las que se enlaza su destino.

enter image description here

¿Por qué no hacer que Xcode de forma automática?

Bueno, los encabezados que está importando son realmente parte de ese marco. Entonces, Xcode debería escanear todos sus marcos, verificar sus encabezados y posiblemente vincular automáticamente las bibliotecas conectadas. Eso es ciertamente factible para los marcos relacionados con el sistema operativo, pero casi imposible para los marcos personalizados, siempre y cuando Xcode no conozca su ubicación. A veces, las aplicaciones no realmente quieren para enlazar contra una biblioteca simplemente porque usan, p. una enumeración definida en un encabezado.

2

Xcode no agrega automáticamente ninguna biblioteca que no sea la base 3. No hace falta mucho para vincular. Quizás una versión futura detectará, pero por ahora debes ir a Build Fhases y vincularlas.

+1

Sí, dado que Xcode está tan automatizado que incluso puede autocompletar todo lo que tiene en su proyecto, sin vincular incluso cuando es obvio que lo necesita, es algo extraño ... pero tal vez puede evitar vincular demasiado si tenemos ' # import' que en realidad no usamos –

+0

Obvio es relativo. Algunas personas pueden odiar el cuarzo o no quieren usarlo (grupo pequeño, lo sé), pero el enlace automático a un marco tan grande y gráfico intenso podría no ser lo que todos quieren, especialmente cuando CG compensa a Quartz. – CodaFi

2

El punto es que Xcode no tiene manera de saber que su proyecto debe vincularse con Quartz Core Framework.

#import <QuartzCore/QuartzCore.h> no es suficiente para decir que necesita Quartz Core Framework. Puede escribir su propia biblioteca que incluye un archivo de encabezado denominado QuartzCore.h y ponerlo en una carpeta llamada QuartzCore. Si está en su ruta de búsqueda de archivos de inclusión, está bien usarlo, a menos que también agregue el Marco de trabajo de Quartz Core oficial en su proyecto (lo que genera conflictos).

Hay otros ejemplos. Cuando importa un espacio de nombres en Visual Studio para un proyecto .NET, no agrega automáticamente ningún ensamblado en "Referencia" de su proyecto. Es porque puede agregar un ensamblado de terceros como referencia que tenga el mismo espacio de nombres. También puede agregar una versión diferente del ensamblado oficial de .NET Framework.

+0

En realidad, proporciona aquellas importaciones relacionadas con el sistema operativo que utilizan signos mayores que/menores que para identificarlos como encabezados que no son de usuario (que simplemente se marcan mediante comillas) – Till

+0

En general, tiene razón.Pero aún es posible pasar una ruta de inclusión adicional al compilador y hacer que busque encabezados de usuario cuando se usa el formulario <>. Consulte http://stackoverflow.com/questions/1044360/import-using-angle-brackets-and-quote-marks. – Hailei

Cuestiones relacionadas