versiones sierra puedo mojave mac high descargar capitan actualizar xcode macos cocoa gdb lldb

xcode - sierra - os x el capitan



¿Cómo se depura una aplicación para una versión anterior de Mac OS X? (3)

Estoy desarrollando una aplicación usando Xcode 4.6 en una máquina OS X 10.8. El objetivo de implementación de la aplicación se establece en 10.6, que es lo que debemos admitir. Pero cuando archivo la aplicación (compila, vincula e incrusta recursos + marcos) y la despliego (también copia) en la máquina de prueba 10.6, falla con una falla de segmentación genérica. Funciona bien en 10.7.

No puedo compilar el proyecto en Xcode en la Mac anterior porque la aplicación está construida usando el compilador más nuevo (usa ARC, síntesis de propiedad implícita, la nueva sintaxis literal objetivo-c, etc.). Tampoco escribiría check porque el SDK base es 10.8 y hace referencia a unos 10.8 tokens que el compilador de la máquina 10.6 no conoce.

¿Alguna sugerencia sobre cómo hacer para depurar la aplicación?


Es muy probable que uses una o más 10.7+ API que se bloquean en 10.6. Con un SDK objetivo 10.8, permite que funcionen todas las llamadas disponibles en ese SDK. Sin embargo, las aplicaciones se envían tarde, por lo que no se bloquean cuando no llamas a esas funciones. Necesita una verificación explícita similar a esta (aquí para la función de pantalla completa):

#if MAC_OS_X_VERSION_MAX_ALLOWED > MAC_OS_X_VERSION_10_6 if (runningOnLionOrLater) { [mainWindow setCollectionBehavior: NSWindowCollectionBehaviorFullScreenPrimary]; [toggleFullscreenItem setHidden: NO]; } #endif

Una forma de determinar la versión actual es:

int macVersion; if (Gestalt(gestaltSystemVersion, &macVersion) == noErr) { runningOnLionOrLater = macVersion > MAC_OS_X_VERSION_10_6; }

Para la depuración de las llamadas problemáticas simplemente configure el SDK base en 10.6 y XCode debe marcar aquellas funciones que no están disponibles allí.


No estoy afiliado a esta empresa / software de ninguna manera, pero Deploymate es una aplicación de pago que puede escanear su aplicación para el uso de SDK y decirle cuándo está llamando a selectores y API que no están disponibles en las versiones anteriores del sistema operativo. Esto puede ayudarlo a rastrear excepciones y bloqueos relacionados con el uso de API.


Si bien no hay una buena solución para esto (he visto comportamientos diferentes en diferentes versiones de macOS) y no hay forma de simular simplemente una versión anterior de macOS, si tiene una máquina de sobra:

Es posible usar un HD externo, particionarlo e instalar diferentes versiones de macOS. Todos pueden ser de arranque y es una cuestión (dolor) de reiniciar la máquina para cada versión del sistema operativo.