Cómo admitir armv6 y armv7s para la compilación de versiones en xcode 4.5


Sé que esto no es posible y Apple lo planeó de esta manera para obligar a los usuarios a actualizar sus dispositivos. Pero sólo quiero saber si hay alguna solución o hacks en capaz de hacer esto? El cliente insiste en que todavía debemos apoyar armv6 debido a un porcentaje todavía "grande" de los usuarios de la aplicación.

Conozco un comando llamado lipo para fusionar bibliotecas estáticas y leí en alguna parte que también podemos usarlo para fusionar archivos ipa, pero no estoy seguro de cómo se hace exactamente. Hice un par de buscando alrededor ya en Google y este sitio, pero es difícil encontrar una respuesta concreta.

Author: John Saunders, 2012-09-27

7 answers

He sido capaz de hacer esto con éxito con mi aplicación que está en la Tienda de aplicaciones. Es compatible con armv6, armv7 y armv7s y las versiones de iOS de 4.2 a 6.0. He verificado que se ejecuta en dispositivos más antiguos (iPhone 3G, iPod touch 2g) todo el camino a través del iPhone 5.

Este método requiere tener Xcode 4.5 y una versión anterior de Xcode instaladas simultáneamente. Todavía estoy en 4.3.2 para mi versión anterior, pero 4.4 debería funcionar también.

Tenía capturas de pantalla para esta respuesta, pero Pila Overflow no me deja publicarlos porque soy nuevo. :(

Configuración en Xcode 4.5

  1. Agregue una nueva configuración de compilación para su compilación armv6. He duplicado la Liberación de configuración y la llamó Release_armv6.

  2. Establezca las Arquitecturas y las Arquitecturas válidas para sus configuraciones de compilación. Para todos excepto Release_armv6, utilice el valor predeterminado. Para Release_armv6, establézcalo manualmente en armv6 . http://i.stack.imgur.com/h8Mpl.png

  3. Si eres usando las características de iOS 6 que Xcode 4.4 y anteriores no entenderán, necesitarás #ifdef para tu compilación armv6. En la Configuración de Compilación bajo Otras Banderas de C y Otras Banderas de C++ agregué -DARMV6_ONLY a mi configuración Release_armv6. Luego, cuando el código usa una nueva API de iOS 6, hago algo como #ifndef ARMV6_ONLY / #endif según corresponda. http://i.stack.imgur.com/czF6J.png

  4. Agregue un nuevo esquema y configúrelo para usar la configuración de compilación Release_armv6 en todos caso.

  5. En Fases de compilación, agregue una Fase de compilación de Run Script con el siguiente script (establezca el Shell en /bin/csh). Aquí es donde ocurre la magia. Edite la sección de configuración: Determine su ruta completa a la compilación Release_armv6 y sustitúyala por ARMV6_EXECUTABLE_PATH. También establece MINIMUM_OS.



    #
    # Script to add armv6 architecture to iOS executable built with Xcode 4.5
    #

    #################
    # Configuration #
    #################
    # Change this to the full path where Xcode 4.4 (or below) puts your armv6 output
    setenv ARMV6_EXECUTABLE_PATH "$BUILD_ROOT/Release_armv6-iphoneos/$EXECUTABLE_PATH"

    # Your "real" minimum OS version since Xcode 4.5 wants to make it iOS 4.3
    # Must be 4.2 or below if you are supporting armv6...
    setenv MINIMUM_OS 4.2
    #####################
    # End configuration #
    #####################


    # For debugging
    echo CURRENT_ARCH = $CURRENT_ARCH
    echo CONFIGURATION = $CONFIGURATION

    # Don't need to do this for armv6 (built in older Xcode), simulator (i386), or debug build
    if ("$CURRENT_ARCH" == "armv6") exit 0
    if ("$CURRENT_ARCH" == "i386") exit 0
    if ("$CONFIGURATION" != "Release" && "$CONFIGURATION" != "Beta Test") exit 0

    # Paths
    setenv LIPO_PATH "$CODESIGNING_FOLDER_PATH/${EXECUTABLE_NAME}.lipo"
    setenv FINAL_PATH "$CODESIGNING_FOLDER_PATH/$EXECUTABLE_NAME"
    setenv FULL_INFO_PLIST_PATH "$CONFIGURATION_BUILD_DIR/$INFOPLIST_PATH"

    # Debug / sanity check
    lipo -info "$FINAL_PATH"
    ls -l "$ARMV6_EXECUTABLE_PATH"

    # Make sure something exists at $LIPO_PATH even if the next command fails
    cp -pv "$FINAL_PATH" "$LIPO_PATH"

    # If rebuilding without cleaning first, old armv6 might already be there so remove it
    # If not, lipo won't output anything (thus the cp command just above)
    lipo -remove armv6 -output "$LIPO_PATH" "$FINAL_PATH"

    # Add armv6 to the fat binary, show that it worked for debugging, then remove temp file
    lipo -create -output "$FINAL_PATH" "$ARMV6_EXECUTABLE_PATH" "$LIPO_PATH"
    lipo -info "$FINAL_PATH"
    rm -f "$LIPO_PATH"

    # Change Info.plist to set minimum OS version to 4.2 (instead of 4.3 which Xcode 4.5 wants)
    /usr/libexec/PlistBuddy -c "Set :MinimumOSVersion $MINIMUM_OS" "$FULL_INFO_PLIST_PATH"
    plutil -convert binary1 "$FULL_INFO_PLIST_PATH"

Proceso de compilación

Cuando esté listo para crear una compilación de lanzamiento, hágalo de la siguiente manera orden:

  1. Cierre Xcode 4.5 y abra Xcode 4.4 o inferior. Seleccione su esquema armv6 y construirlo.

  2. Cierre Xcode 4.4 o inferior y abra Xcode 4.5. Selecciona tu esquema de lanzamiento y compílalo.

Eso es casi todo. Compruebe la salida de compilación para verificar que tiene lo que quiere: un ejecutable con tres arquitecturas. La última salida del script de ejecución debería indicarle esto.

Si alguien tiene ideas para mejorar esto, por favor siéntase libre. Me imagino que podría ser capaz de obtener fantasía y llamar a Xcode 4.4 "xcodebuild" comando desde dentro del script de compilación, aliviando la necesidad de cambiar entre las versiones de Xcode en absoluto. Pero esto funciona bastante bien para mí. ;)

Advertencias:

  • Solo para estar seguro, es posible que desee editar sus archivos xib en la versión anterior de Xcode. Hasta ahora parece que la versión 4.5 es compatible con versiones anteriores, pero nunca se sabe.

  • De hecho, usted podría considerar simplemente hacer la mayor parte de su desarrollo, a excepción de cosas específicas de iOS 6, en el antiguo Xcode. Depende de lo que sea más fácil para ti.

 93
Author: Mike,
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
2012-10-04 18:05:12

Hay otra forma, ya que gcc-4.2 todavía admite armv6, que no requerirá que cierre Xcode 4.5 y abra una versión anterior (para compilación, pero no para ejecutar la aplicación en un dispositivo 4.2):

  • Agregue armv6 a ambos arcos y arcos válidos: {[42]]}

Archs: ARCH (ARCHS_STANDARD_32_BIT) armv6

Arquitecturas válidas: armv6 armv7 armv7s

  • Vim (o TextEdit) tu proyecto.archivo pbxproj para reemplazar IPHONEOS_DEPLOYMENT_TARGET a 4.0 - 4.1 - 4.2 como tú necesidad, Xcode 4.5 no le permitirá obtener por debajo de 4.3.

Entonces, si construyes tu proyecto, verás advertencias :{[39]]}

warning: no rule to process file '$(PROJECT_DIR)/App/AppDelegate.m' of type sourcecode.c.objc for architecture armv6
warning: no rule to process file '$(PROJECT_DIR)/App/SomeFile.c' of type sourcecode.c.c for architecture armv6
  • Agregue un Build Rule para los archivos fuente con nombres que coincidan: *.[mc] que usarán LLVM GCC 4.2

Funciona para bibliotecas estáticas, pero no para aplicaciones :

ld: file is universal (4 slices) but does not contain a(n) armv6 slice: /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS6.0.sdk/usr/lib/crt1.3.1.o for architecture armv6
  • Para hacer que funcione para aplicaciones, necesitamos agregar el segmento armv6 a este archivo de objeto (que viene con el SDK 5.1):
lipo /path/to-4.4/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS5.1.sdk/usr/lib/crt1.3.1.o -extract armv6 -output /tmp/crt1.3.1-armv6.o
lipo /Applications/Xcode.app/Contents//Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS6.0.sdk/usr/lib/crt1.3.1.o /tmp/crt1.3.1-armv6.o -create -output /tmp/crt1.3.1-armv677s.o
mv /Applications/Xcode.app/Contents//Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS6.0.sdk/usr/lib/crt1.3.1.o /Applications/Xcode.app/Contents//Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS6.0.sdk/usr/lib/crt1.3.1.o.bkp
mv /tmp/crt1.3.1-armv677s.o /Applications/Xcode.app/Contents//Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS6.0.sdk/usr/lib/crt1.3.1.o

Compila tu proyecto y comprueba que tu app contiene todos los archivos:

$ file DerivedData/TestApp/Build/Products/Debug-iphoneos/TestApp.app/TestApp 
DerivedData/TestApp/Build/Products/Debug-iphoneos/TestApp.app/TestApp: Mach-O universal binary with 3 architectures
DerivedData/TestApp/Build/Products/Debug-iphoneos/TestApp.app/TestApp (for architecture armv6): Mach-O executable arm
DerivedData/TestApp/Build/Products/Debug-iphoneos/TestApp.app/TestApp (for architecture armv7): Mach-O executable arm
DerivedData/TestApp/Build/Products/Debug-iphoneos/TestApp.app/TestApp (for architecture cputype (12) cpusubtype (11)):  Mach-O executable arm

Tenga en cuenta que el archivo dSYM también contiene todos los archivos (útiles para simbolizar informes de fallos):

$ file DerivedData/TestApp/Build/Products/Debug-iphoneos/TestApp.app.dSYM/Contents/Resources/DWARF/TestApp 
DerivedData/TestApp/Build/Products/Debug-iphoneos/TestApp.app.dSYM/Contents/Resources/DWARF/TestApp: Mach-O universal binary with 3 architectures
DerivedData/TestApp/Build/Products/Debug-iphoneos/TestApp.app.dSYM/Contents/Resources/DWARF/TestApp (for architecture armv6):   Mach-O dSYM companion file arm
DerivedData/TestApp/Build/Products/Debug-iphoneos/TestApp.app.dSYM/Contents/Resources/DWARF/TestApp (for architecture armv7):   Mach-O dSYM companion file arm
DerivedData/TestApp/Build/Products/Debug-iphoneos/TestApp.app.dSYM/Contents/Resources/DWARF/TestApp (for architecture cputype (12) cpusubtype (11)):    Mach-O dSYM companion file arm

He instalado y lanzado con éxito la aplicación en un iPod touch iOS 4.2 2gen abriendo xcode 4.4.1, luego Product -> Run without building.

  • Cuando Archiva su producto, puede experimentar nuevamente el error del enlazador Mach-O de Apple, esta vez involucrando otros archivos, como libarclite_iphoneos.a o libclang_rt.ios.a:
ld: file is universal (2 slices) but does not contain a(n) armv6 slice: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/arc/libarclite_iphoneos.a for architecture armv6
ld: file is universal (2 slices) but does not contain a(n) armv6 slice: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/4.1/libclang_rt.ios.a for architecture armv6

El procedimiento utilizado para crt1.3.1.o se aplica a estos archivos también, y solucionará el error que permite a Xcode archivar correctamente su proyecto: puede usar la ruta impresa por ld para encontrar el archivo y unirse al segmento armv6 con lipo; solo tenga en cuenta que libclang_rt.ios.a en las versiones anteriores de Xcode no se encuentra en Xcode.app/[...]/usr/lib/clang/4.1 sino en Xcode.app/[...]/usr/lib/clang/4.0.

He archivado correctamente el archivo, lo implementé con una distribución ad-hoc perfil, y probado en iPhone 3G (4.2.1) y iPhone 3GS (6.0).

  • Último problema : no podemos iniciar la aplicación. En el Organizer, está el mensaje: Los dispositivos de tipo "iPhone 3G" no son compatibles con esta versión de Xcode.

Pero un ls en el DeviceSupport muestra:

 ls /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/DeviceSupport/ 
4.2          4.3          5.0          5.1          6.0 (10A403)

Sin diferencias en el directorio 4.2 de Xcode 4.4.1.

La pregunta es ahora: ¿cómo se admite o no el dispositivo Xcode detect ?

Apertura /Applications/Xcode.app/Contents/Developer//Platforms/iPhoneOS.platform/Developer//Library/PrivateFrameworks/DTDeviceKitBase.framework/DTDeviceKitBase con Hex Fiend (o otro editor hexadecimal), y reemplazar ascii 4.3 con 4.2 hace que el mensaje de error desaparezca, y la aplicación instalada en el dispositivo aparece en la lista (pero la viñeta del dispositivo en la lista de dispositivos sigue siendo roja).

Entonces necesitamos editar /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/Library/PrivateFrameworks//DTDeviceKit.framework/Versions/Current/DTDeviceKit y reemplazar:

Expired.deviceArchitecture.iPhone1,1.iPhone1,2.iPod1,1.iPod2,1.iPod2,2.armv6

A:

Expired.deviceArchitecture.iPhone0,1.iPhone0,2.iPod0,1.iPod0,1.iPod0,2.armv5

Luego tenemos una viñeta naranja en el Organizador (Xcode 4.5.1):

The version of iOS on “iPhone” is too old for use with this version of the iOS SDK. Please restore the device to a version of the OS listed below.

OS Installed on iPhone
4.2.1 (8C148)

Xcode Supported iOS Versions
6.0 (10A403)
5.1
5.0
4.3

La pregunta es ahora: ¿dónde se definen las versiones de iOS compatibles con Xcode ?

, Ya que hay un 4.2 directorio en /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/DeviceSupport/, ya debería ser soportado...

Intentó copiar iPhoneOS4.2.sdk de Xcode 4.4.1 a /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/, pero no hace que el dispositivo sea compatible.

Así que no he encontrado cómo agregar soporte para dispositivos 4.2 en Xcode 4.5. Alguna idea ?

Conclusión : compilar para armv6/7/7s dentro de Xcode 4.5 es posible. Pero no es posible iniciar una aplicación en un dispositivo armv6 4.2 sin iniciar Xcode 4.4.

Gran actualización: funciona con Xcode 4.5.2 !

Ahora la viñeta es verde en Xcode 4.5.2 :-) El dispositivo aparece en la lista desplegable cerca del botón Ejecutar. Pero al intentar ejecutar la aplicación, recibió el mensaje :

Xcode cannot run using the selected device.
Choose a destination with a supported architecture in order to run on this device.

Simplemente agregue armv6 a las arquitecturas válidas: -)

Otra nota: el Build Rule para archivos fuente con nombres coincidentes: *.[mc] puede usar LLVM GCC 4.2 o Apple LLVM compiler 4.1, o Default compiler

 26
Author: ıɾuǝʞ,
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
2012-12-12 14:06:22

Gracias por este script útil !

He combinado con éxito todas las informaciones de todo este post, el script completo resultante está a continuación. Este script requiere tener ambos Xcode 4.5.x y una versión anterior de Xcode compatible con armv6 (Xcode 4.4.1, por ejemplo, instalado en / Applications / Xcode 4.4.1.app)

El script NO requiere compilar primero en xcode 4.4.x, solo tienes que lanzar tu último Xcode, seleccionar la configuración de la versión y construir. (la liberación-armv6 la configuración debería haber sido definida como se menciona en el post original de Mike).

Producirá a .aplicación compatible con armv6 armv7 y armv7s

Gracias a Mike por el guion original!

#################
# Configuration #
#################
# Change this to the full path where Xcode 4.4 (or below) puts your armv6 output
setenv ARMV6_OUTPUT_PATH     "$BUILD_ROOT/Release-armv6-iphoneos/"
setenv ARMV6_EXECUTABLE_PATH "$ARMV6_OUTPUT_PATH$EXECUTABLE_PATH"

# Your "real" minimum OS version since Xcode 4.5 wants to make it iOS 4.3
# Must be 4.2 or below if you are supporting armv6...
setenv MINIMUM_OS 4.2
#####################
# End configuration #
#####################

# For debugging
echo CURRENT_ARCH = $CURRENT_ARCH
echo CONFIGURATION = $CONFIGURATION

# Don't need to do this for armv6 (built in older Xcode), simulator (i386), or debug build
#if ("$CURRENT_ARCH" == "armv6") exit 0
if ("$CURRENT_ARCH" == "i386") exit 0
if ("$CONFIGURATION" != "Release" && "$CONFIGURATION" != "Beta Test") exit 0

# Paths
setenv LIPO_PATH "$CODESIGNING_FOLDER_PATH/${EXECUTABLE_NAME}.lipo"
setenv FINAL_PATH "$CODESIGNING_FOLDER_PATH/$EXECUTABLE_NAME"
setenv FULL_INFO_PLIST_PATH "$CONFIGURATION_BUILD_DIR/$INFOPLIST_PATH"

#log file for armv6 build
echo "------------------------- BUILDING ARMV6 NOW -------------------------"
setenv LOGFILE "$BUILD_ROOT/buildarmv6.txt"
setenv CONFIGURATION_ARMV6 "${CONFIGURATION}-armv6"
#build armv6 version
echo "Building $FULL_PRODUCT_NAME armv6         CONFIG=$CONFIGURATION-armv6            target=$TARGETNAME"
"/Applications/Xcode 4.4.1.app/Contents/Developer/usr/bin/xcodebuild" -project         "${PROJECT_FILE_PATH}" -target "${TARGETNAME}" -sdk "${PLATFORM_NAME}" -configuration "$CONFIGURATION-armv6" CONFIGURATION_BUILD_DIR="$ARMV6_OUTPUT_PATH" >> "$LOGFILE"
echo "---------------------------- ARMV6 BUILT  -------------------------"
# to check for armv6 build errors
open "$LOGFILE"

# Debug / sanity check
lipo -info "$FINAL_PATH"
ls -l "$ARMV6_EXECUTABLE_PATH"

# Make sure something exists at $LIPO_PATH even if the next command fails
cp -pv "$FINAL_PATH" "$LIPO_PATH"

# If rebuilding without cleaning first, old armv6 might already be there so remove it
# If not, lipo won't output anything (thus the cp command just above)
lipo -remove armv6 -output "$LIPO_PATH" "$FINAL_PATH"

# Add armv6 to the fat binary, show that it worked for debugging, then remove temp file
lipo -create -output "$FINAL_PATH" "$ARMV6_EXECUTABLE_PATH" "$LIPO_PATH"
echo "------------------------- CHECK ARMV6 ARMV7 ARMV7S ARE MENTIONED BELOW -------------------------"
lipo -info "$FINAL_PATH"
echo "------------------------------------------------------------------------------------------------"
rm -f "$LIPO_PATH"

# Change Info.plist to set minimum OS version to 4.2 (instead of 4.3 which Xcode 4.5 wants)
/usr/libexec/PlistBuddy -c "Set :MinimumOSVersion $MINIMUM_OS" "$FULL_INFO_PLIST_PATH"
plutil -convert binary1 "$FULL_INFO_PLIST_PATH"
 7
Author: Jerome,
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
2012-11-23 14:04:30

Gracias por el post. Tenemos algunas aplicaciones para compilar, por lo que automatizamos la compilación de armv6 usando xcodebuild como sugeriste. Esta es la parte de nuestro script (modificado a medida que usamos bash) que hace eso, que se puede agregar a su script anterior. Esto podría añadirse antes de" # Debug / sanity check "

setenv LOGFILE "/Users/xyz/Desktop/buildarmv6.txt"

setenv CONFIGURATION_ARMV6 "${CONFIGURATION}_armv6"
echo "Building $FULL_PRODUCT_NAME armv6         CONFIG=$CONFIGURATION_ARMV6         target=$TARGETNAME"

"/Applications/Xcode 4.4.1.app/Contents/Developer/usr/bin/xcodebuild" -project "${PROJECT_FILE_PATH}" -target "${TARGETNAME}" -sdk "${PLATFORM_NAME}" -configuration "$CONFIGURATION_ARMV6" >> "$LOGFILE"

echo "Built armv6"
open "$LOGFILE" # to check for armv6 build errors
 4
Author: K1w1Geek,
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
2012-10-17 00:58:49

Gracias a Mike por este útil tutorial y script. Como mencionó Piotr en los comentarios, el script está fallando si ejecuta el comando archivar desde Xcode, ya que utiliza otro directorio de compilación para archivar.

Aquí abajo está mi modificación al script para habilitarlo tanto para la compilación de la versión normal como para la compilación específica del archivo.

Asume que la compilación armv6 se ejecuta antes según las instrucciones originales de Mike. Usa la sintaxis bash porque es más fácil para mí desnudar directorio de compilación base común. Por lo tanto, esto implica la traducción del script original a bash, que es solo una cuestión de reemplazar setenv por exportar y cambiar la sintaxis de las sentencias if.

# Find the common base directory for both build
XCODE_BUILD=${BUILD_ROOT%%/Build*}
# Change this to the full path where Xcode 4.4 (or below) puts your armv6 output, using the previously derived base
export ARMV6_EXECUTABLE_PATH="$XCODE_BUILD/Build/Products/Release_armv6-iphoneos/$EXECUTABLE_PATH"
 3
Author: Max_B,
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
2012-10-30 23:50:43

Me gustaría compartir mi experiencia con la respuesta de Kenji. Creo que es la mejor y la mejor manera de construir una aplicación universal que se ejecute en armv6 / armv7 / armv7s, desde iOS3.1 hasta iOS7.

Haz exactamente lo que Kenji sugiere. Puede ignorar las partes sobre el archivo del producto, principalmente si envía su aplicación a Apple a través del Cargador de aplicaciones (comprimido).

Algunos consejos más:

Cuando compile para la configuración de "distribución", xcode validará el producto y obtenga dos advertencias:

  • "la arquitectura armv6 no es compatible..."
  • "No se admiten los destinos de implementación de iOS inferiores a 4.3...".

Por supuesto, porque realmente compila para armv6 y establece el destino de implementación en 3.1 o 4.2, por ejemplo.

So... simplemente ignora estas advertencias.

Después de enviar su aplicación a itunes connect, recibirá un correo electrónico de advertencia de Apple, diciendo que su aplicación no es "Position Independent Executable". Por supuesto una vez más, es porque su objetivo es inferior a 4.3. Ignora esta advertencia.

En esta fecha (2013 jul 03) he actualizado correctamente una aplicación a la appstore con este método, y ha pasado la validación. El objetivo de implementación de la aplicación es iOS 3.1.2 y es compatible con armv6-armv7-armv7s.

Me gustaría decir también que :

  • Si crea una aplicación completamente nueva, simplemente establezca el destino de implementación en iOS6 o iOS5. Ignora el viejo sistema operativo.
  • Si tiene una aplicación antigua vendida desde 2010, con docenas de miles de usuarios, en realidad puede tener mucha más gente que lo usa en armv6 de lo que suele decir Apple. Creo que 3 años es un período demasiado corto para eliminar el soporte para estos dispositivos antiguos, principalmente si su aplicación PUEDE ejecutarse en ellos.
 3
Author: Chrysotribax,
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
2013-07-04 08:14:30

Apple ha dejado de aceptar compilaciones que admiten dispositivos pre iOS5 y contienen una imagen de lanzamiento de iPhone 5. Aquí está el correo electrónico de la última compilación que envié que se construyó en Xcode 4.4.1

Estimado desarrollador,

Hemos descubierto uno o más problemas con su entrega reciente para "". Para procesar su entrega, se deben corregir los siguientes problemas:

Imagen de inicio no válida: la aplicación contiene una imagen de inicio con un modificador de tamaño que solo se admite para aplicaciones creadas con el SDK de iOS 6.0 o posterior.

Una vez que se hayan corregido estos problemas, vaya a la página de Detalles de la versión y haga clic en "Listo para cargar el binario."Continúa con el proceso de envío hasta que el estado de la aplicación esté "Esperando la carga."A continuación, puede entregar el binario corregido.

Saludos,

El equipo de App Store

 1
Author: jr19,
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
2013-02-17 14:27:46