UFO ET IT

xcode 4.5의 릴리스 빌드를 위해 armv6 및 armv7을 모두 지원하는 방법

ufoet 2021. 1. 17. 11:37
반응형

xcode 4.5의 릴리스 빌드를 위해 armv6 및 armv7을 모두 지원하는 방법


나는 이것이 불가능하다는 것을 알고 있으며 Apple은 사용자가 장치를 업그레이드하도록 강제하기 위해 이러한 방식으로 계획했습니다. 그러나 나는 이것을 할 수있는 해결 방법이나 해킹이 있는지 알고 싶습니다. 클라이언트는 여전히 앱 사용자의 "큰"비율 때문에 armv6을 계속 지원해야한다고 주장합니다.

나는 lipo정적 라이브러리를 병합하기 위해 호출되는 명령을 알고 있으며 ipa 파일을 병합하는 데 사용할 수도 있다는 어딘가를 읽었지만 정확히 어떻게 수행되는지 잘 모르겠습니다. 나는 이미 Google 과이 사이트에서 몇 가지 검색을했지만 구체적인 답변을 찾기가 어렵습니다.


App Store에있는 내 앱으로이 작업을 성공적으로 수행 할 수있었습니다. armv6, armv7, armv7s 및 iOS 버전 4.2 ~ 6.0을 지원합니다. iPhone 5를 통해 구형 장치 (iPhone 3G, iPod touch 2g)에서 실행되는 것을 확인했습니다.

이 방법을 사용하려면 Xcode 4.5와 이전 버전의 Xcode를 동시에 설치해야합니다. 나는 여전히 이전 버전의 4.3.2를 사용하고 있지만 4.4도 작동합니다.

이 답변에 대한 스크린 샷이 있었지만 처음이기 때문에 Stack Overflow에서 게시 할 수 없습니다. :(

Xcode 4.5에서 설정

  1. armv6 빌드에 대한 새 빌드 구성을 추가합니다. 릴리스 구성을 복제하고 이름을 Release_armv6으로 지정했습니다.

  2. 빌드 구성에 대한 아키텍처 및 유효한 아키텍처를 설정합니다. Release_armv6을 제외한 모든 경우 기본값을 사용합니다. Release_armv6의 경우 수동으로 armv6 으로 설정하십시오 . http://i.stack.imgur.com/h8Mpl.png

  3. Xcode 4.4 이하에서 이해할 수없는 iOS 6 기능을 사용하는 경우 armv6 빌드를 위해 이러한 기능을 #ifdef해야합니다. 기타 C 플래그 및 기타 C ++ 플래그의 빌드 설정에서 Release_armv6 구성에 -DARMV6_ONLY추가 했습니다 . 그런 다음 코드에서 새로운 iOS 6 API를 사용하는 경우 #ifndef ARMV6_ONLY / #endif와 같은 작업을 적절하게 수행합니다. http://i.stack.imgur.com/czF6J.png

  4. 새 체계를 추가하고 모든 경우에 Release_armv6 빌드 구성을 사용하도록 설정합니다.

  5. 빌드 단계에서 다음 스크립트를 사용하여 스크립트 빌드 단계 실행을 추가합니다 (셸을 / bin / csh로 설정 ). 마법이 일어나는 곳입니다. 구성 섹션 편집 : Release_armv6 빌드에 대한 전체 경로를 결정하고이를 ARMV6_EXECUTABLE_PATH로 대체하십시오. 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"

빌드 프로세스

릴리스 빌드를 만들 준비가되면 다음 순서로 수행하십시오.

  1. Xcode 4.5를 닫고 Xcode 4.4 이하를 엽니 다. armv6 체계를 선택하고 빌드하십시오.

  2. Xcode 4.4 이하를 닫고 Xcode 4.5를 엽니 다. 릴리스 계획을 선택하고 빌드하십시오.

그게 다야. 빌드 출력을 확인하여 원하는 것을 얻었는지 확인하십시오. 3 개의 아키텍처가있는 실행 파일입니다. 실행 스크립트의 마지막 출력이이를 알려줍니다.

이 문제를 개선 할 아이디어가 있으시면 부담없이 문의 해주세요. 빌드 스크립트 내에서 Xcode 4.4의 "xcodebuild"명령을 멋지게 호출하여 Xcode 버전간에 전환 할 필요가 전혀 없을 것이라고 생각합니다. 그러나 이것은 나를 위해 충분히 잘 작동합니다. ;)

주의 사항 :

  • 안전을 위해 이전 버전의 Xcode에서 xib 파일을 편집 할 수 있습니다. 지금까지는 4.5가 이전 버전과 호환되는 것처럼 보이지만 결코 알 수 없습니다.

  • 사실, 이전 Xcode에서 iOS 6 관련 항목을 제외하고 대부분의 개발을 수행하는 것을 고려할 수 있습니다. 가장 쉬운 방법에 따라 다릅니다.


gcc-4.2가 여전히 armv6을 지원하기 때문에 또 다른 방법이 있습니다.이 경우 Xcode 4.5를 닫고 이전 버전을 열 필요가 없습니다 (컴파일 용이지만 4.2 기기에서 앱 실행 용이 아님).

  • 유효한 아치와 아치 모두에 armv6을 추가합니다.

아치 : $ (ARCHS_STANDARD_32_BIT) armv6

유효한 아키텍처 : armv6 armv7 armv7s

  • Vim (또는 TextEdit)을 사용하여 project.pbxproj 파일을 필요에 따라 IPHONEOS_DEPLOYMENT_TARGET을 4.0-4.1-4.2로 대체합니다. Xcode 4.5에서는 4.3 미만을 얻을 수 없습니다.

그런 다음 프로젝트를 빌드하면 경고가 표시됩니다.

경고 : armv6 아키텍처에 대해 sourcecode.c.objc 유형의 '$ (PROJECT_DIR) /App/AppDelegate.m'파일을 처리하는 규칙이 없습니다.
경고 : armv6 아키텍처에 대해 sourcecode.cc 유형의 '$ (PROJECT_DIR) /App/SomeFile.c'파일을 처리하는 규칙이 없습니다.
  • 추가 Build Rule일치하는 이름을 가진 원본 파일 : *.[mc]그 사용LLVM GCC 4.2

정적 라이브러리에서는 작동하지만 앱에서는 작동하지 않습니다.

ld : 파일은 범용 (4 슬라이스)이지만 armv6 슬라이스는 포함하지 않습니다. /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS6.0.sdk/usr/lib armv6 아키텍처의 경우 /crt1.3.1.o
  • 앱에서 작동하도록하려면이 개체 파일 (5.1 SDK와 함께 제공)에 armv6 슬라이스를 추가해야합니다.
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 -출력 /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/ 플랫폼 /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

프로젝트를 컴파일하고 앱에 모든 아치가 포함되어 있는지 확인합니다.

$ 파일 DerivedData / TestApp / Build / Products / Debug-iphoneos / TestApp.app / TestApp 
DerivedData / TestApp / Build / Products / Debug-iphoneos / TestApp.app / TestApp : 3 개의 아키텍처가있는 Mach-O 범용 바이너리
DerivedData / TestApp / Build / Products / Debug-iphoneos / TestApp.app / TestApp (아키텍처 armv6 용) : Mach-O 실행 가능 암
DerivedData / TestApp / Build / Products / Debug-iphoneos / TestApp.app / TestApp (아키텍처 armv7 용) : Mach-O 실행 가능 암
DerivedData / TestApp / Build / Products / Debug-iphoneos / TestApp.app / TestApp (아키텍처 cputype (12) cpusubtype (11) 용) : Mach-O 실행 가능 암

dSYM 파일에는 모든 아치도 포함되어 있습니다 (충돌 보고서 기호화에 유용함).

$ 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 : 3 개의 아키텍처가있는 Mach-O 범용 바이너리
DerivedData / TestApp / Build / Products / Debug-iphoneos / TestApp.app.dSYM / Contents / Resources / DWARF / TestApp (아키텍처 armv6 용) : Mach-O dSYM 컴패니언 파일 암
DerivedData / TestApp / Build / Products / Debug-iphoneos / TestApp.app.dSYM / Contents / Resources / DWARF / TestApp (아키텍처 armv7 용) : Mach-O dSYM 컴패니언 파일 암
DerivedData / TestApp / Build / Products / Debug-iphoneos / TestApp.app.dSYM / Contents / Resources / DWARF / TestApp (아키텍처 cputype (12) cpusubtype (11) 용) : Mach-O dSYM 컴패니언 파일 암

xcode 4.4.1을 연 다음 Product-> 를 열어 iOS 4.2 2 세대 iPod touch에 앱을 성공적으로 설치하고 실행했습니다 Run without building.

  • 제품 보관할Apple Mach-O Linker 오류가 다시 발생할 수 있습니다. 이번에는 libarclite_iphoneos.a또는 libclang_rt.ios.a다음 과 같은 다른 파일이 관련됩니다 .
ld : 파일은 범용 (2 슬라이스)이지만 armv6 슬라이스는 포함하지 않습니다. /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/arc/libarclite_iphoneos.a for architecture armv6
ld : 파일은 범용 (2 슬라이스)이지만 armv6 슬라이스는 포함하지 않습니다. /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/4.1/libclang_rt.ios.a armv6 아키텍처 용

crt1.3.1.o에 사용 된 절차는 이러한 파일에도 적용되며 Xcode가 프로젝트를 성공적으로 아카이브 할 수 있도록하는 오류를 수정합니다. ld 로 인쇄 된 경로를 사용 하여 파일을 찾고 armv6 슬라이스를 lipo 와 결합 할 수 있습니다 . 이전 버전의 Xcode에서 libclang_rt.ios.a Xcode.app/[...]/usr/lib/clang/4.1Xcode.app/[...]/usr/lib/clang/4.0.

파일을 성공적으로 보관하고 임시 배포 프로필로 배포했으며 iPhone 3G (4.2.1) 및 iPhone 3GS (6.0)에서 테스트했습니다.

  • 지난호 : 앱을 실행할 수 없습니다. "iPhone 3G"유형의 장치는이 버전의 Xcode에서 지원되지 않습니다Organizer .라는 메시지 가 있습니다.

그러나 ls에서 DeviceSupport쇼 :

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

Xcode 4.4.1과 4.2 디렉토리에 차이가 없습니다.

문제는 이제 Xcode 감지가 장치가 지원되는지 여부입니다.

열기 /Applications/Xcode.app/Contents/Developer//Platforms/iPhoneOS.platform/Developer//Library/PrivateFrameworks/DTDeviceKitBase.framework/DTDeviceKitBase와 함께 Hex Fiend(또는 다른 16 진수 편집기), 및 아스키 교체 4.3와 함께 4.2오류 메시지가 사라지게하고, 장치에 설치된 응용 프로그램이 나열됩니다 (그러나 장치 목록에서 장치 총알이 여전히 빨간색).

그런 다음 편집 /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/Library/PrivateFrameworks//DTDeviceKit.framework/Versions/Current/DTDeviceKit하고 교체 해야합니다 .

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

받는 사람 :

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

그런 다음 오거나이저 (Xcode 4.5.1)에 주황색 글 머리표가 있습니다.

"iPhone"의 iOS 버전이 너무 오래되어이 버전의 iOS SDK에 사용할 수 없습니다. 아래 나열된 OS 버전으로 장치를 복원하십시오.

iPhone에 설치된 OS
4.2.1 (8C148)

Xcode 지원 iOS 버전
6.0 (10A403)
5.1
5.0
4.3

문제는 이제 Xcode 지원 iOS 버전이 정의 된 위치입니다.

4.2디렉토리 /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/DeviceSupport/가 있으므로 이미 지원되어야합니다 ...

iPhoneOS4.2.sdkXcode 4.4.1에서 으로 복사하려고 /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/했지만 장치가 지원되지 않습니다.

따라서 Xcode 4.5에서 4.2 장치 지원을 추가하는 방법을 찾지 못했습니다. 어떤 아이디어?

결론 : Xcode 4.5 내에서 armv6 / 7 / 7s에 대한 컴파일이 가능합니다. 그러나 Xcode 4.4를 시작하지 않고 4.2 armv6 장치에서 앱을 시작할 수 없습니다.

큰 업데이트 : Xcode 4.5.2에서 작동합니다!

이제 Xcode 4.5.2에서 글 머리 기호가 녹색입니다. :-) 장치가 실행 버튼 근처의 드롭 다운 목록에 나타납니다. 하지만 앱을 실행하려고 할 때 다음과 같은 메시지가 나타납니다.

선택한 장치를 사용하여 Xcode를 실행할 수 없습니다.
이 장치에서 실행하려면 지원되는 아키텍처의 대상을 선택하십시오.

armv6을 유효한 아키텍처에 추가하기 만하면됩니다. :-)

기타 참고 : Build Rule이름 일치 원본 파일을 위해 : *.[mc]사용 LLVM GCC 4.2하거나 Apple LLVM compiler 4.1, 또는Default compiler


이 유용한 스크립트에 감사드립니다!

이 전체 게시물의 모든 정보를 성공적으로 결합했으며 결과 전체 스크립트는 아래와 같습니다. 이 스크립트에는 Xcode 4.5.x와 armv6을 지원하는 이전 Xcode 버전이 모두 있어야합니다 (예 : Xcode 4.4.1, / Applications / Xcode 4.4.1.app에 설치됨).

스크립트는 xcode 4.4.x에서 먼저 컴파일 할 필요가 없으며 최신 Xcode를 시작하고 릴리스 구성을 선택하고 빌드하기 만하면됩니다. (Release-armv6 구성은 Mike의 원래 게시물에 언급 된대로 정의되어야합니다).

armv6 armv7 및 armv7s와 호환되는 .app을 생성합니다.

원본 스크립트에 대해 Mike에게 감사드립니다!

#################
# 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"

Thanks for the post. We have a few apps to build so we automated the armv6 build using xcodebuild as you suggested. This is the part of our script (modified as we use bash) that does that, which can be added to your script above. This could be added before "# 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

Thank to Mike for this useful tutorial and script. As mentioned by Piotr in comments, the script is failing if you run the archive command from Xcode since it use another build directory for archiving.

Here below is my modification to the script to enable it for both normal release build and archive specific build.

It assumes that the armv6 build is run before as per original instructions from Mike. It use bash syntax because it is easier for me to strip-out the common base build directory. So this implies translation of the original script to bash which is only a matter of replacing setenv by export and changing the if statements syntax.

# 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"

I would like to share my experience with kenji's answer. I think it's the best one and the best way to build a universal app which runs on armv6 / armv7 / armv7s, from iOS3.1 to iOS7.

Just do exactly as kenji suggests. You may ignore the parts about archiving the product, mainly if you send your app to apple via Application Loader (zipped).

Few more advices :

When you build for "distribution" configuration, xcode will validate the product, and you will get two warnings :

  • "architecture armv6 is not supported..."
  • "iOS deployment targets lower than 4.3 are not supported...".

Of course, because you actually build for armv6 and you set the deployment target to 3.1 or 4.2, for example !

So... just ignore these warnings.

After sending your app to itunes connect, you will receive a warning email from apple, saying that your app is not "Position Independent Executable". Of course again, it's because your target is lower than 4.3. Just ignore this warning.

At this date (2013 jul 03) I have successfully update an app to the appstore with this method, and it has passed validation. The app deployment target is iOS 3.1.2, and it supports armv6-armv7-armv7s.

I would like to say also that :

  • If you make a brand new app, just set the deployment target to iOS6 or iOS5. Ignore old OS.
  • If you have an old app sold since 2010, with dozens of thousands of users, you actually may have much more people who use it on armv6 than Apple usually says. I think 3 years is a too short period to drop support for these old devices, mainly if your app CAN run on them.

Apple has stopped accepting builds that support pre iOS5 devices and contain an iPhone 5 launch image. Here is the email for the last build I submitted that was build on Xcode 4.4.1

Dear developer,

We have discovered one or more issues with your recent delivery for "". To process your delivery, the following issues must be corrected:

Invalid Launch Image - Your app contains a launch image with a size modifier that is only supported for apps built with the iOS 6.0 SDK or later.

Once these issues have been corrected, go to the Version Details page and click "Ready to Upload Binary." Continue through the submission process until the app status is "Waiting for Upload." You can then deliver the corrected binary.

Regards,

The App Store team

ReferenceURL : https://stackoverflow.com/questions/12619124/how-to-support-both-armv6-and-armv7s-for-release-build-in-xcode-4-5

반응형