따뜻한 대한민국 겨울만들기

Native Extension 이 포함된 프로젝트를 iOS Simulator에서 돌릴 수 있는데요.

설명대로 따라 했는데도.. 무한 에러를 토해내더군요.


우선 Native Extension 이 포함된 프로젝트를 iOS Simulator 에서 돌리는 방법을 말해보겠습니다.



1. iOS Simulator 를 위한 ane 컴파일


기존에 ARM 기반 으로 컴파일 했었는데, iOS Simulator 는 x86 기반으로 돌아가므로

ane의 플랫폼 타겟도 iPhone-ARM 에서 iPhone-x86으로 바꿔서 ane 컴파일을 해야 합니다.

아래와 같이요.




    com.cnative.extensions
    1
    
    	 /* iPhone-ARM 을 iPhone-x86 으로*/
            
                library.a
                TestNativeExtensionsInitializer
                TestNativeExtensionsFinalizer
            
        
    

ADT에서 ane를 컴파일 하는 코드는 아래와 같습니다.

# XCode Debug iPhoneOS Home
ios_device_native_home="/Users/FlowerGirl/Library/Developer/Xcode/DerivedData/NETestLibrary-dkmqtbzpqxkmwtfhqqxufkywuzrc/Build/Products/Debug-iphoneos"

# Copy iOS Library
# XCode 의 빌드된 .a 파일을 AIR 프로젝트의 .a 파일로 복사
cp $ios_device_native_home/library.a library.a

# ANE Compile
# 실행을 위해선 한 줄로 붙여 써야 함(가독성을 위해 문단 나눔)
unzip -o ./NETestLibrary.swc
/Applications/Adobe\ Flash\ Builder\ 4.6/sdks/4.6.0_AIR3.3_Beta_p3/bin/adt 
-package -target ane NETestLibrary.ane NETestLibrary.xml 
-swc NETestLibrary.swc 
-platform iPhone-x86 
library.swf library.a 


위는 XCode 에 Native Extension 라이브러리의 .a 파일을 가져와 AIR 프로젝트에서 사용할 수 있는 ane 파일을 컴파일 하는 코드입니다.



2. ipa 컴파일 및 실행


ane를 컴파일 한 다음, Using new Simulator Support feature for AIR Mobile iOS 1편 의 내용과 같이

- ipa 컴파일 (ipa-test-interpreter-simulator/ipa-debug-interpreter-simulator)

- Simulator에 ipa 인스톨

Simulator에서 ipa 실행

이런 순서로 진행하면 될 줄 알았습니다.


하지만, ADT Compile Error 라는 에러가 계속 발생하였습니다.


무한 삽질 끝에 알아낸 사실은,

# XCode Debug iPhoneOS Home
ios_device_native_home="/Users/FlowerGirl/Library/Developer/Xcode/DerivedData/NETestLibrary-dkmqtbzpqxkmwtfhqqxufkywuzrc/Build/Products/Debug-iphoneos"

ane 를 컴파일 할때 사용하였던 .a 파일이 Debug-iphoneos 걸 가져와 사용하였더라구요.

문서에도 명확히 simulator 것을 사용하라고 적혀 있는데 말이죠. ㅜㅜ

# XCode Debug iPhoneOS Home
ios_device_native_home="/Users/FlowerGirl/Library/Developer/Xcode/DerivedData/NETestLibrary-dkmqtbzpqxkmwtfhqqxufkywuzrc/Build/Products/Debug-iphoneos"
ios_simulator_native_home="/Users/FlowerGirl/Library/Developer/Xcode/DerivedData/NEBabyLibrary-dkmqtbzpqxkmwtfhqqxufkywuzrc/Build/Products/Debug-iphonesimulator"

# Copy iOS Library
# XCode 의 빌드된 .a 파일을 AIR 프로젝트의 .a 파일로 복사
cp $ios_simulator_native_home/library.a library.a

# ANE Compile
# 실행을 위해선 한 줄로 붙여 써야 함(가독성을 위해 문단 나눔)
unzip -o ./NETestLibrary.swc
/Applications/Adobe\ Flash\ Builder\ 4.6/sdks/4.6.0_AIR3.3_Beta_p3/bin/adt 
-package -target ane NETestLibrary.ane NETestLibrary.xml 
-swc NETestLibrary.swc 
-platform iPhone-x86 
library.swf library.a 

위와 같이 Debug-iphonesimulator 를 타겟으로 빌드된 .a 파일을 가져와 ane 컴파일을 하니..

문제 없이 잘 되었습니다.


 Native Extension 포함 AIR 프로젝트를 iOS Simulator 에서 돌리기 위해 주의해야 할 점을 요약하자면,


1. extension.xml 의 플랫폼 타겟 iPhone-ARMiPhone-x86 로 바꾼다.

2. XCode 에서 simulator 타겟으로 .a 파일을 빌드 한다.

3. /Debug-iphoneos 가 아닌 /Debug-iphonesimulator 폴더에서 .a 파일을 가져와 ane 파일을 빌드 한다.


이것만 잘 지키면 문제없이 동작시킬 수 있을 것입니다.


Reference

- Using the iOS Simulator to test and debug AIR applicationshttp://www.adobe.com/devnet/air/articles/ios-simulator.html

http://labsdownload.adobe.com/pub/labs/flashplatformruntimes/shared/air3-3_flashplayer11-3_p3_releasenotes.pdf

http://blogs.adobe.com/airodynamics/2012/05/06/using-new-simulator-support-feature-for-ios/