iOS 설정

iOS 장치에만 적용되는 설정은 응용 프로그램 설명자에서 <iPhone> 요소 안에 있습니다. iPhone 요소는 자식 요소로 InfoAdditions 요소, requestedDisplayResolution 요소, Entitlements 요소, externalSwfs 요소 및 forceCPURenderModeForDevices 요소를 보유할 수 있습니다.

InfoAdditions 요소를 사용하여 응용 프로그램의 Info.plist 설정 파일에 추가되는 키-값 쌍을 지정할 수 있습니다. 예를 들어 다음 값은 응용 프로그램의 상태 표시줄 스타일을 설정하며, 응용 프로그램에 지속적인 Wi-Fi 액세스가 필요하지 않음을 나타냅니다.
<InfoAdditions> 
                            <![CDATA[ 
                            <key>UIStatusBarStyle</key> 
                            <string>UIStatusBarStyleBlackOpaque</string> 
                            <key>UIRequiresPersistentWiFi</key> 
                            <string>NO</string> 
                            ]]> 
                            </InfoAdditions>

InfoAdditions 설정은 CDATA 태그 안에 있습니다.

Entitlements 요소를 사용하면 응용 프로그램에 대한 Entitlements.plist 설정 파일에 추가되는 키-값 쌍을 지정할 수 있습니다. Entitlements.plist 설정에서는 응용 프로그램이 푸시 알림과 같은 특정 iOS 기능에 액세스할 수 있도록 지원합니다.

Info.plist 및 Entitlements.plist 설정에 대한 자세한 내용은 Apple 개발자 설명서를 참조하십시오.

iOS에서 백그라운드 작업 지원

Adobe AIR 3.3 이상은 특정 백그라운드 비헤이비어를 사용하여 iOS에서 멀티태스킹을 지원합니다.

  • 오디오

  • 위치 업데이트

  • 네트워킹

  • 백그라운드 응용 프로그램 실행 옵트아웃

참고: swf 버전 21 이하에서는 renderMode가 direct로 설정된 경우 AIR가 iOS 및 Android에서 백그라운드 실행을 지원하지 않습니다. 이러한 제한으로 인해 Stage3D 기반 응용 프로그램이 오디오 재생, 위치 업데이트, 네트워크 업로드/다운로드 등의 백그라운드 작업을 실행할 수 없습니다. iOS는 백그라운드에서 OpenGLES 또는 호출의 렌더링을 허용하지 않습니다. 백그라운드에서 OpenGL 호출을 수행하려는 응용 프로그램은 iOS에 의해 종료됩니다. Android는 응용 프로그램이 백그라운드에서 OpenGLES 호출을 수행하거나 오디오 재생과 같은 다른 백그라운드 작업을 수행하는 것을 제한하지 않습니다. swf 버전 22 이상에서는 renderMode가 direct로 설정된 경우 AIR 모바일 응용 프로그램이 백그라운드에서 실행될 수 있습니다. 백그라운드에서 OpenGLES 호출을 수행하는 경우 AIR iOS 런타임에서 ActionScript 오류(3768 - 백그라운드 실행 중 Stage3D API를 사용할 수 없음)가 발생합니다. 그러나 Android에서는 기본 응용 프로그램이 백그라운드에서 OpenGLES 호출을 수행할 수 있으므로 오류가 발생하지 않습니다. 모바일 리소스의 최적 활용을 위해 백그라운드에서 응용 프로그램이 실행되는 동안에는 렌더링 호출을 수행하지 마십시오.

백그라운드 오디오

백그라운드 오디오 재생 및 녹음을 사용하려면 InfoAdditions 요소에 다음 키-값 쌍을 포함합니다.

<InfoAdditions> 
                                <![CDATA[ 
                                <key>UIBackgroundModes</key> 
                                <array> 
                                <string>audio</string> 
                                </array> 
                                ]]> 
                                </InfoAdditions>

백그라운드 위치 업데이트

백그라운드 위치 업데이트를 사용하려면 InfoAdditions 요소에 다음 키-값 쌍을 포함합니다.

<InfoAdditions> 
                                <![CDATA[ 
                                <key>UIBackgroundModes</key> 
                                <array> 
                                <string>location</string> 
                                </array> 
                                ]]> 
                                </InfoAdditions>
참고: 위치 API는 배터리 전원을 많이 소모하므로 이 기능은 필요한 경우에만 사용하십시오.

백그라운드 네트워킹

백그라운드에서 짧은 작업을 실행하기 위해 응용 프로그램에서는 NativeApplication.nativeApplication.executeInBackground 속성을 true 로 설정합니다.

예를 들어 응용 프로그램에서 파일 업로드 작업을 시작한 후 사용자가 다른 응용 프로그램을 전면으로 이동할 수 있습니다. 응용 프로그램이 업로드 완료 이벤트를 수신하면 NativeApplication.nativeApplication.executeInBackground false 로 설정할 수 있습니다.

iOS는 백그라운드 작업에 시간 제한을 적용하므로 NativeApplication.nativeApplication.executeInBackground 속성을 true 로 설정해도 응용 프로그램이 무기한으로 실행되지는 않습니다. iOS가 백그라운드 처리를 중지하면 AIR에서 NativeApplication.suspend 이벤트를 전달합니다.

백그라운드 실행 옵트아웃

응용 프로그램에서 InfoAdditions 요소에 다음 키-값 쌍을 포함하여 백그라운드 실행에서 명시적으로 옵트아웃할 수 있습니다.

<InfoAdditions> 
                                <![CDATA[ 
                                <key>UIApplicationExitsOnSuspend</key> 
                                <true/> 
                                ]]> 
                                </InfoAdditions>

예약된 iOS InfoAdditions 설정

AIR는 응용 프로그램 및 런타임 기능이 올바르게 작동하도록 하기 위해 생성된 Info.plist 파일에서 여러 항목을 설정합니다. 다음 설정은 정의할 수 없습니다.

CFBundleDisplayName

CFBundleExecutable

CFBundleIconFiles

CFBundleIdentifier

CFBundleInfoDictionaryVersion

CFBundlePackageType

CFBundleResourceSpecification

CFBundleShortVersionString

CFBundleSupportedPlatforms

CFBundleVersion

CTAutoOrients

CTInitialWindowTitle

CTInitialWindowVisible

CTIosSdkVersion

CTMaxSWFMajorVersion

DTPlatformName

DTSDKName

MinimumOSVersion (3.2까지 예약됨)

NSMainNibFile

UIInterfaceOrientation

UIStatusBarHidden

UISupportedInterfaceOrientations

참고: MinimumOSVersion을 정의할 수 있습니다. MinimumOSVersion 정의는 Air 3.3 이상에서 인정됩니다.

다른 iOS 장치 모델 지원

iPad 지원의 경우 UIDeviceFamily 에 대한 올바른 키-값 설정을 InfoAdditions 요소 안에 포함하십시오. UIDeviceFamily 설정은 문자열 배열입니다. 각 문자열은 지원되는 장치를 정의합니다. <string>1</string> 설정은 iPhone 및 iPod Touch에 대한 지원을 정의합니다. <string>2</string> 설정은 iPad에 대한 지원을 정의합니다. <string>3</string> 설정은 tvOS에 대한 지원을 정의합니다. 이러한 문자열 중 하나만 지정하는 경우 해당 장치 제품군만 지원됩니다. 예를 들어 다음 설정은 iPad로 지원을 제한합니다.

<key>UIDeviceFamily</key> 
                            <array> 
                            <string>2</string> 
                            </array>>

다음 설정은 두 가지 장치 제품군(iPhone/iPod Touch 및 iPad)을 모두 지원합니다.

<key>UIDeviceFamily</key> 
                            <array> 
                            <string>1</string> 
                            <string>2</string> 
                            </array>

또한 AIR 3.7 이상에서 forceCPURenderModeForDevices 태그를 사용하여, 지정한 장치 집합에 대해 CPU 렌더링 모드를 강제 적용하고 나머지 iOS 장치에 대해 GPU 렌더링 모드를 사용하도록 설정할 수 있습니다.

이 태그는 iPhone 태그의 자식으로 추가하고, 장치 모델 이름의 목록은 공백으로 구분하여 지정합니다. 유효한 장치 모델 이름 목록은 forceCPURenderModeForDevices 를 참조하십시오.

예를 들어 기존 iPod, iPhone 및 iPad에 대해 CPU 모드를 사용하고 다른 모든 장치에 대해 GPU 모드를 사용하려면 응용 프로그램 설명자에서 다음을 지정하면 됩니다.

... 
                            <renderMode>GPU</renderMode> 
                            ... 
                            <iPhone> 
                            ... 
                               <forceCPURenderModeForDevices>iPad1,1 iPhone1,1 iPhone1,2 iPod1,1 
                               </forceCPURenderModeForDevices> 
                            </iPhone>

고해상도 디스플레이

requestedDisplayResolution 요소는 응용 프로그램이 고해상도 스크린이 있는 iOS 장치에서 standard 모드를 사용해야 하는지 아니면 high 해상도 모드를 사용해야 하는지를 지정합니다.

<requestedDisplayResolution>high</requestedDisplayResolution>

고해상도 모드에서는 고해상도 디스플레이의 각 픽셀을 개별적으로 처리할 수 있습니다. 표준 모드에서는 응용 프로그램의 장치 스크린이 표준 해상도 스크린으로 나타납니다. 이 모드에서 한 픽셀을 그리면 고해상도 스크린에 있는 4개 픽셀의 색상이 설정됩니다.

기본 설정은 standard 입니다. iOS 장치를 대상으로 할 때는 requestedDisplayResolution 요소를 iPhone 요소의 자식으로 사용합니다( InfoAdditions 요소 또는 initialWindow 요소가 아님).

장치마다 다른 설정을 사용하려면 기본값을 requestedDisplayResolution 요소의 값으로 지정합니다. 반대되는 값을 사용해야 하는 장치를 지정할 때는 excludeDevices 특성을 사용합니다. 예를 들어 다음 코드에서 표준 모드를 사용하는 3세대 iPad를 제외하고는 고해상도 모드를 지원하는 모든 장치에서 고해상도 모드가 사용됩니다.

<requestedDisplayResolution excludeDevices="iPad3">high</requestedDisplayResolution>

excludeDevices 특성은 AIR 3.6 이상에서 사용할 수 있습니다.

iOS 사용자 정의 URI 스킴

웹 페이지의 링크에 의해 또는 장치에 있는 다른 기본 응용 프로그램에 의해 응용 프로그램이 호출될 수 있도록 사용자 정의 URI 스킴을 등록할 수 있습니다. URI 스킴을 등록하려면 CFBundleURLTypes 키를 InfoAdditions 요소에 추가하십시오. 다음 예제는 com.example.app 이라는 URI 스킴을 등록하여 응용 프로그램이 example://foo 형태의 URL을 통해 호출될 수 있도록 합니다.

<key>CFBundleURLTypes</key> 
                            <array> 
                            <dict> 
                            <key>CFBundleURLSchemes</key> 
                            <array> 
                            <string>example</string> 
                            </array> 
                            <key>CFBundleURLName</key> 
                            <string>com.example.app</string> 
                            </dict> 
                            </array>

사용자 정의 URI를 통해 응용 프로그램을 호출할 때는 NativeApplication 객체가 invoke 이벤트를 전달합니다. 쿼리 매개 변수를 비롯한 링크의 URL은 InvokeEvent 객체의 arguments 배열에 배치됩니다. 사용자 정의 URI 스킴은 개수에 제한 없이 사용할 수 있습니다.

참고: StageWebView 인스턴스의 링크는 사용자 정의 URI 스킴을 사용하는 URL을 열 수 없습니다.
참고: 다른 응용 프로그램이 스킴을 이미 등록한 경우에는 자신의 응용 프로그램이 해당 URI 스킴에 대해 등록된 응용 프로그램으로 대체될 수 없습니다.

iOS 호환성 필터링

특정 하드웨어 또는 소프트웨어 기능이 있는 장치에서만 응용 프로그램을 사용해야 하는 경우 InfoAdditions 요소 내에서 UIRequiredDeviceCapabilities 배열에 항목을 추가하십시오. 예를 들어 다음 항목은 응용 프로그램에 스틸 카메라 및 마이크가 필요하다는 것을 나타냅니다.

<key>UIRequiredDeviceCapabilities</key> 
                            <array> 
                            <string>microphone</string> 
                            <string>still-camera</string> 
                            </array>

해당 기능이 장치에 없는 경우 응용 프로그램을 설치할 수 없습니다. AIR 응용 프로그램과 관련된 기능 설정은 다음과 같습니다.

telephony

wifi

sms

still-camera

auto-focus-camera

front-facing-camera

camera-flash

video-camera

accelerometer

location-services

gps

microphone

AIR 2.6 이상은 armv7 opengles-2 를 필수 기능 목록에 자동으로 추가합니다.

참고: 응용 프로그램 설명자에 이들 기능을 포함하지 않아도 응용 프로그램에서는 이러한 기능을 사용할 수 있습니다. 응용 프로그램이 제대로 작동하지 않는 장치에 사용자가 응용 프로그램을 설치하는 것을 방지하기 위한 목적으로만 UIRequiredDeviceCapabilities 설정을 사용하십시오.

일시 중지 대신 종료

사용자가 AIR 응용 프로그램에서 전환하여 밖으로 나오면 AIR 응용 프로그램이 백그라운드로 들어가고 일시 중지됩니다. 응용 프로그램이 일시 중지되는 대신 완전히 종료되도록 하려면 UIApplicationExitsOnSuspend 속성을 YES 로 설정하십시오.

<key>UIApplicationExitsOnSuspend</key> 
                            <true/>

외부 에셋 전용 SWF를 로드하여 다운로드 크기 최소화

응용 프로그램에 사용되는 하위 집합의 SWF를 패키지화하고 Loader.load() 메서드를 사용하여 나머지 외부(에셋 전용) SWF를 런타임에 로드하여 초기 응용 프로그램 다운로드 크기를 최소화할 수 있습니다. 이 기능을 사용하려면 ADT가 외부 로드된 SWF 파일에서 기본 응용 프로그램 SWF로 모든 ActionScript ByteCode(ABC)를 이동할 수 있도록 응용 프로그램을 패키지화해야 합니다. 그래야 SWF에는 에셋만 포함됩니다. 이는 응용 프로그램을 설치한 후 어떠한 코드 다운로드도 금지하는 Apple Store의 규칙을 준수합니다.

ADT는 외부에서 로드된 SWF(일명, 누락된 SWF)를 지원하기 위해 다음을 수행합니다.

  • <iPhone> 요소의 <externalSwfs> 하위 요소에 지정된 텍스트 파일을 읽고 행으로 구분된 SWF 목록에 액세스하여 실행 시 로드합니다.

    <iPhone> 
                                           ... 
                                           <externalSwfs>FilewithPathsOfSWFsThatAreToNotToBePackaged.txt</externalSwfs> 
                                        </iPhone>
  • 외부에서 로드된 SWF에서 기본 실행 파일로 ABC 코드를 전송합니다.

  • 외부에서 로드된 SWF 파일을 .ipa 파일에서 누락시킵니다.

  • 누락된 SWF를 .remoteStrippedSWFs 디렉토리에 복사합니다. 이러한 SWF는 웹 서버에 호스팅하고 필요한 경우 응용 프로그램이 런타임에 해당 SWF를 로드합니다.

다음 예에 나타난 것처럼 런타임에 로드할 SWF 파일은 텍스트 파일에서 한 줄에 하나씩 이름을 지정하여 나타내야 합니다.

assets/Level1/Level1.swf 
                            assets/Level2/Level2.swf 
                            assets/Level3/Level3.swf 
                            assets/Level4/Level4.swf

지정한 파일 경로는 응용 프로그램 설명자 파일에 대한 상대 경로입니다. 또한 adt 명령에서 이러한 SWF를 에셋으로 지정해야 합니다.

참고: 이러한 기능은 표준 패키징에만 적용됩니다. 인터프리터, 시뮬레이터, 디버그 등을 사용하는 빠른 패키징의 경우 ADT는 누락된 SWF를 만들지 않습니다.

Geolocation 지원

Geolocation 지원을 위해서는 다음 키-값 쌍 중 하나를 InfoAdditions 요소에 추가하십시오.

<InfoAdditions> 
                            <![CDATA[ 
                            <key>NSLocationAlwaysUsageDescription</key> 
                            <string>Sample description to allow geolocation always</string> 
                            <key>NSLocationWhenInUseUsageDescription</key> 
                            <string>Sample description to allow geolocation when application is in foreground</string>               
                            ]]> 
                            </InfoAdditions>