¿Cuál es el significado de Base SDK, objetivo de implementación de iOS, Target y Project en xcode

161

Digamos que configuro el SDK base en 7, ¿qué significa? Podría significar que la aplicación se ejecutaría en iOS 7. Pero para eso es el objetivo de implementación de iOS.

Además, ¿por qué especifico esos 3 valores tanto en el proyecto como en el destino? No tiene sentido ¿Por qué especificar lo mismo dos veces?

user4951
fuente
Hay una buena respuesta concisa a esto en otra pregunta más nueva: stackoverflow.com/a/41278576/498949
Chris Rae

Respuestas:

79

El SDK base es contra lo que compila su aplicación (es decir, incluir y archivos de biblioteca y marcos). Como usted dice, no afecta el objetivo de implementación, excepto que sdk base> = objetivo de implementación.

Usted especifica la configuración de compilación en 2 niveles ya que cada proyecto puede tener múltiples objetivos y es posible que no desee la misma configuración para todos los objetivos. La configuración de nivel de proyecto anula la configuración predeterminada y la configuración de nivel de destino anula la configuración de nivel de proyecto.

Por ejemplo, tengo proyectos con objetivos OSX e iOS y algunos son ARC y otros son MRR. Tendría que tener diferentes proyectos para cada uno si no pudiera especificar la configuración de compilación con el nivel de granularidad que permite Xcode.

trojanfoe
fuente
196

En iOS 7 TechTalk , sesión Architecting Modern Apps, Part 2, explican esto claramente

ingrese la descripción de la imagen aquí

Buena lectura Hola! ¡Estoy disponible!

Por lo tanto, una aplicación moderna podría usar iOS 9 como Target SDK e iOS 7 como destino de implementación. Esto significa que puede ejecutarse en iOS 7, iOS 8 e iOS 9, y que tiene a su disposición cualquier llamada de iOS 9 cuando realmente se ejecuta en iOS 9.

Puedes leer más en mi publicación SDK y Destino de implementación

onmyway133
fuente
20
Buena referencia ... y esta parte está enterrada alrededor de las 25:17 en este video de 50 minutos.
Daniel
2
¡Agradable! Pero, ¿qué sucede si configura el SDK base = 7.0 e intenta instalarlo en iOS 8.0? ¿Tenemos que descargar el último XCode para admitir el SDK base más reciente todo el tiempo?
GoRoS
1
@GoRoS su aplicación no será compatible si el SDK basado es <iOS 8 (los usuarios no pueden instalar desde la tienda de aplicaciones). Dado que UIKit / Foundation es una biblioteca dinámica, si se fuerza a través de Xcode o binarios, las cosas podrían funcionar, pero la aplicación podría bloquearse en cualquier momento y, por lo general, es inestable. Base SDK siempre va con la versión correspondiente de Xcode. Sin embargo, Base SDK para Xcode es para simulador, el que está en el dispositivo puede ser diferente. Por lo tanto, es importante probar cosas en un dispositivo real antes de enviar. Ese es el problema con todas las bibliotecas dinámicas.
Kunal Balani
2
@chichilatte no, no necesitas. La aplicación aún es compatible con iOS 12, iOS 13, ... pero no tendrá nuevas características de iOS 12, iOS 13 ... Para usar la nueva característica de iOS 12, debe compilar contra iOS 12 SDK y usar API de iOS 12.
onmyway133
2
Gracias, eso tiene sentido. Creo que el comentario de @ Kunal-Balani anterior es incorrecto.
chichilatte
67

Base SDK es el SDK con el que se vincula. El destino de implementación es la versión de iOS mínima requerida que su aplicación necesita para ejecutarse. Puede crear una aplicación con SDK 7 que se ejecute en iOS 6. Pero debe tener cuidado de no utilizar ninguna función o método que no esté disponible en iOS 6. Si lo hace, su aplicación se bloqueará en iOS 6 tan pronto como sea posible. Se utiliza esta función.

Consulte la documentación de Apple para obtener más detalles: https://developer.apple.com/library/content/documentation/DeveloperTools/Conceptual/cross_development/Configuring/configuring.html

V1ru8
fuente