2012-09-21 24 views
14

¿existe la posibilidad de utilizar iOS 6 SDK para desarrollar aplicaciones que se dirijan a iOS 3.1.3? Si abro mi proyecto con el destino de despliegue de edad, el compilador me advierte:Build for armv6 architecture (target iOS 3.1.3) con iOS 6 SDK y Xcode 4.5?

iOS deployment targets lower than 4.3 are not supported 

Esto se debe probablemente al hecho de que al parecer sólo armv7 y armv7s binarios pueden ser construidos. Si añado armv6 (que trabajan en los dispositivos hasta que el iPhone 3G) manualmente, hay varias señales de advertencia, así:

warning: no rule to process file '$(PROJECT_DIR)/main.m' of type sourcecode.c.objc for architecture armv6 
... 
... 
warning: architecture armv6 is not supported (current ARCHS = "armv6 armv7 armv7s"). 

Entonces, ¿cómo puedo lidiar con esto? ¿Hay alguna manera de soportar iOS 3.1.3 mientras desarrollas con iOS 6 SDK? Si no, eventualmente tendré que moverme al objetivo más bajo para ser iOS 4.3. ¿Es posible enviar una nueva versión que solo admita versiones> = 4.3? ¿Qué sucede con mis usuarios en versiones anteriores? ¿Simplemente no están siendo informados sobre la actualización incompatible y, por lo tanto, continuarán usando la versión anterior de mi aplicación? Si no, ¿se puede lograr esto?

Respuesta

10

Con Xcode 4.5 (es decir, iOS 6 SDK), la versión más baja para la que puede compilar es iOS 4.3. Supongo que es hora de que sus clientes 3.1.3 actualicen.

+0

Lamentablemente, tengo algunos clientes que tienen toques de iPod antiguos para sus aplicaciones internas que no pueden actualizar el pasado 4.2.1. Ojalá pudiera decirles que actualicen :(pero por ahora solo voy a probar la solución de MattyG. – Bek

21

La respuesta de oonoweb es correcta con respecto a iOS SDK 6.0. No es posible admitir iOS 4.3 mientras compilas con iOS 6 SDK, pero es posible usar Xcode 4.5 para continuar compilando para armv6 y apuntar a iOS 4.2.1 y versiones posteriores.

El truco consiste en crear iOS 5.1 SDK en lugar de 6.0. Nota: usted no será capaz de utilizar cualquiera de los nuevos iOS 6 características específicas si usted hace esto:

de blog establece los pasos que he reescrito chpwn:

  • Descargar Xcode 4.4.1 de Apple Developer Downloads (no es necesario para instalar IT)
  • Abra la .dmg, haga clic derecho en Xcode.app, 'Mostrar contenido del paquete'
  • Encuentra el iOS 5.1 SDK dentro de ese paquete en: Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS5.1.sdk/
  • Copie este SDK
  • Abra el contenido del paquete de Xcode.app (4.5) y pegue el SDK 5.1 en la ubicación: Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/
  • Abra su proyecto en Xcode 4.5. Vaya a la pestaña Target> Build Settings> Base SDK y elija iOS 5.1 del menú desplegable
  • Nuevamente en la pestaña Configuración de compilación> Arquitecturas válidas: elimine armv7s si está allí y agregue armv6 si aún no está allí.
  • Vaya a la pestaña Información> Destino de implementación y escriba 3.1.3 (o lo que sea que esté respaldando) en el menú desplegable (la opción no estará allí, pero puede escribirla).
  • Ahora puede eliminar Xcode 4.4.1 .dmg si no desea instalarlo.

Recibirá advertencias acerca de no hablar de ninguna regla para procesar archivos para armv6. Nate ha publicado recientemente this answer para tratar con ellos.

Si está creando un nuevo proyecto (en lugar de mantener los antiguos), también puede necesitar ver el archivo ***-Info.plist, y eliminar armv7 de las 'Capacidades requeridas del dispositivo' si está allí.

+4

He seguido todos los pasos desde el blog de chpwn, pero ahora Xcode me da muchas advertencias: "Advertencia: ninguna regla para procesar el archivo ' $ (PROJECT_DIR) /Classes/aSUBDIRECTORY/fileXYZ.m 'de tipo sourcecode.c.objc para la arquitectura armv6 – Tafkadasoh

+1

Es importante tener en cuenta que este enfoque NO funcionará si confía en cualquier biblioteca de terceros que haya creado contra iOS6 (Facebook, Flurry, etc.) Las bibliotecas precompiladas no tendrán el código de bytes apropiado para el firmware instalado en los dispositivos armv6, y por lo tanto, si se las arregla para compilar realmente, aún no se ejecutará (es decir, se bloqueará) –

+1

@ Tafkadasoh, hay una manera de solucionar este problema que no se describe en el blog de chpwn, del que se deriva esta respuesta. [Ver mi respuesta a esta pregunta relacionada] (http://stackoverflow.com/a/13061562/119114) Básicamente, necesitas definir un nuevo ** Build Rule ** usted mismo. Funcionó para mí – Nate

Cuestiones relacionadas