Xcode 8 con SDK Base más antiguo


Me estoy topando con problemas de compatibilidad para algunos frameworks externos que estoy usando en mi proyecto. ¿Hay alguna forma de cambiar el SDK Base en Xcode 8? Actualmente en la configuración del proyecto solo me muestran el último SDK.

He intentado copiar el SDK anterior de otra versión de Xcode a aquí, pero no funcionó:

/Contents/Developer/Platforms/iPhoneOS.plataforma / Desarrollador / SDKs /

 26
Author: tonik12, 2016-06-15

3 answers

A partir de Xcode 7.3, además de copiar en el SDK, también debe editar cierta información.archivo plist, como se describe aquí para macOS en el post de agx. Parece que hay un archivo similar para iOS, en

Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Info.plist

Intente cambiar el valor de MinimumSDKVersion de 10.0 a cualquier versión del SDK que desee.

No he probado esto con iOS, pero, usando esta solución, solo pude construir un objetivo de macOS con macOS 10.6 usando Xcode 8.0 (8A218a) (el "GM").

UPDATE

El hack descrito anteriormente dejó de funcionar para mí en Xcode 9. Si quieres usar Xcode 9+, consulta mi respuesta más reciente del 22 de noviembre de 2017.

 30
Author: Jerry Krinock,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-03-26 23:50:55

Mi respuesta original, aunque funcionó con Xcode 8, por alguna extraña razón que no vale la pena explicar, ya no funciona con Xcode 9 en el antiguo proyecto de un cliente en particular. Así que he estado usando un flujo de trabajo alternativo que realmente no es tan malo.

Para trabajar en este proyecto, lo abro en tanto en el antiguo Xcode, que puede compilarlo con el SDK requerido, como en un Xcode reciente. Pongo la antigua ventana de Xcode en segundo plano y hago mi trabajo en el reciente Xcode. Cuando estoy listo para probar los cambios, hago un archivo > Guardar Todo (⌥⌘S ), luego cambie al antiguo Xcode y Build (⌘B ). Cuando la compilación está terminada, vuelvo al reciente Xcode y Producto > Realizar Acción > Ejecutar sin Construir (⌃⌘R ). Debido a que el formato de archivo dSYM no ha cambiado, los puntos de interrupción funcionan como se esperaba.

Las ventajas son que no se requiere hackear Xcode, y lo único que necesito recordar sobre el viejo Xcode (Xcode 3 en mi caso) es, misericordiosamente: B B.

Una pequeña advertencia: En el Objetivo de este proyecto en particular, en Configuración de compilación, tiene una ruta personalizada Productos de compilación. Esto es típico de la forma en que se crearon las aplicaciones de Mac hace años. Para asegurarse de que ambos códigos X funcionan con el mismo producto, si sus códigos X antiguos y recientes se encuentran a caballo entre la versión que cambió la ruta predeterminada Build Products, es posible que deba establecer Build Products Path .

El flujo de trabajo probablemente se podría hacer aún más fácil mediante el scripting de las herramientas de línea de comandos xcodebuild y xcode-select, pero esto es lo suficientemente bueno. Con el anuncio de Apple en la WWDC de este año sobre el soporte para aplicaciones de Mac de 32 bits que desaparecerán durante los próximos dos años, mi cliente tiene algunas decisiones difíciles por delante en cualquier caso.

 3
Author: Jerry Krinock,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-11-22 15:48:38

Solo tiene que cambiar la configuración de "Destino de implementación". Básicamente, utiliza el SDK más reciente disponible como SDK base, pero selecciona una versión de OS X de destino. Por supuesto, depende de por qué desea utilizar un SDK anterior?

 0
Author: walteronassis,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-09-29 16:39:47