xcode cocoa sdk backwards-compatibility

xcode - confusión sobre cómo hacer que la aplicación osx sea compatible con versiones anteriores y cómo probarlas



cocoa sdk (4)

después de leer la guía del SDK de Apple https://developer.apple.com/library/mac/#documentation/developertools/conceptual/cross_development/Overview/overview.html

Todavía estoy confundido sobre cómo hacer que la aplicación mac sea compatible con versiones anteriores y cómo probarlas correctamente

Tengo una aplicación, la ejecuto y la probé en Mountain Lion 10.8 sin ningún problema, sin embargo, quiero hacer que esta aplicación sea compatible con versiones anteriores para que otros usuarios puedan ejecutarla en una máquina mac 10.6 - 10.7.

  1. Tengo una ID de desarrollador de Apple y puedo descargar las versiones anteriores de 10.7 y 10.6, pero el problema es que tengo un Macbook Air 2011 que actualmente está ejecutando 10.8, y esa es la única máquina de Apple que tengo. ¿Puedo probar el 10.7 y el 10.6 usando vmware o paralelos?

  2. en la configuración de mi proyecto, configuro la implementación de destino en 10.6 (ya que quiero que los usuarios de 10.6 ejecuten mi aplicación), pero ¿debo configurar mi SDK en 10.8 o 10.7? si configuro el SDK en 10.8 pero tengo el despliegue de destino establecido en 10.6, si soluciono todas las advertencias de xcode, ¿se ejecutará correctamente en 10.6?

  3. desde el menú desplegable del SDK, solo puedo establecerlo en 10.8 o 10.7, pero falta 10.6, ¿cómo puedo solucionarlo?

gracias por adelantado


  1. Puede instalar varias versiones de Mac OS en una sola máquina, arrancando entre cada una.
  2. El SDK debería ser el último (10.8).
  3. Ver 2

Una alternativa a 1 que he considerado (estoy en el mismo barco) es crear un Snow Leopard Hackintosh utilizando una PC antigua y simplemente instalando Lion y Mountain Lion en mi MBP.


Agregando a la gran answer Rob Napier:

Para usar un SDK antiguo, pon el SDK (o un enlace simbólico) aquí:

/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs

Con XCode 7.3 o posterior, necesita que abra este archivo y cambie "MinimumSDKVersion" (de lo contrario, XCode se negará a usar el SDK anterior):

/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Info.plist


Me desarrollo en una caja de 10.8 y soporte de nuevo a 10.5. Hace solo un par de meses, retiramos el soporte de 10.4 PPC y todavía estoy eliminando parte del código específico de 10.2. Esto puede ser un poco impreciso, pero he estado haciendo versiones antiguas durante mucho tiempo. Tengo algunas opiniones al respecto.

  • No importa lo que Apple diga en sus documentos, si quieres admitir 10.6, compila con el SDK 10.6. No confíe en el objetivo de distribución.
    • He tenido esta discusión con los ingenieros de Xcode, y aunque se unen a la línea de Apple que siempre debería desarrollar con el último SDK, también reconocen que, en general, es una locura hacerlo. Si compila contra el SDK 10.8 y marca su destino de implementación en 10.6, no recibirá advertencias por el uso de métodos que no existen en 10.6. La única forma en que descubrirá que ha utilizado un método inexistente es que podría provocarle errores extraños cuando se ejecuta en 10.6. Eso es una locura.
    • Recuerde, OS X no se bloquea cuando envía un selector desconocido. Simplemente aborta el runloop actual. Así que los errores son aún más difíciles de rastrear que en iOS, donde se bloquea la aplicación.
    • Claro, puedes hacer enlaces débiles . Habla de peligroso ... Sí, hay algunas veces que esto es útil, pero el compilador no te avisa si no lo haces correctamente. Si voy a hacer una vinculación débil como esta, voy por el otro lado, vinculándome con el antiguo SDK y copiando el prototipo de la nueva función en mi implementación. De esa manera tengo documentación de cada función, creo que voy a un enlace débil.
  • Descargue los SDK anteriores y vincúlelos a su distribución de Xcode.
    • Guárdalos celosamente. Apple intentará eliminarlos cada vez que actualices Xcode. Haga sus propias copias y péguelas en / SDK o en algún otro lugar alejado de Xcode. Proporciono un script llamado fix-xcode para administrar los enlaces simbólicos automáticamente. ¿Estoy amargado por Apple por su insistencia incansable en la eliminación de mis antiguos SDK? Sí lo soy.
  • Puede ejecutar 10.6 Servidor en una VM legalmente. Puede ejecutar 10.7+ Desktop en una máquina virtual legalmente. Estas son buenas maneras de probar su código.
    • O puede hacer lo que yo hago y tener una pequeña pila de MacBooks antiguos, cada uno con dos o tres particiones en ellos que reinicie todo el tiempo.
    • Ahora que el 10.7 proviene de App Store, es un poco más difícil crear máquinas virtuales . Mi fuerte recomendación es hacer una instantánea de su imagen inmediatamente después de la instalación y hacer una copia de seguridad de la misma. Usted querrá poder clonar esa imagen de vez en cuando cuando necesite volver a una máquina "sin procesar".
    • Adquiera el hábito de ahuyentar a los SDK a medida que salen. 10.8 será viejo algún día. Es mejor que hagas una copia ahora que es fácil.
  • Ya sea que admita lanzamientos de puntos individuales o no, puede ser muy útil mantenerse al margen de los paquetes de actualización para lanzamientos de puntos individuales. Cuando te encuentras con clientes que ejecutan versiones no actuales, es bueno poder comprobar si un error "no reproducible" es de hecho fácilmente reproducible en su versión específica. Si esto vale la pena o no depende en gran medida de su producto y clientes. Me salvó la vida cuando 10.4.11 realizó cambios importantes en WebKit durante un lanzamiento de puntos ...
  • Invierta en un NAS pequeño o en una unidad USB externa grande (aunque he tenido problemas con los que fallan cuando se los usa extensivamente, por eso prefiero un RAID). Necesitarás el espacio. Desea conservar un montón de máquinas virtuales y muchos SDK y, a veces, incluso versiones antiguas de Xcode.

Necesitas hacer estos ajustes:

1.Configure el SDK base en la versión actual de Mac (ej. 10.7)

2.Configure el SDK de implementación en una versión anterior (ej.1.4)