次の objC コードを使用する Adobe AIR ネイティブ拡張を作成すると、iOS 5.1 でクラッシュします。
NSDictionary *value=[NSDictionary dictionaryWithObjectsAndKeys: @"aSampleValue",@"aSampleKey",nil];
NSLog(@"Try objectForKeyedSubscript: %@", [value objectForKeyedSubscript:@"aSampleKey"]);
「[__NSCFDictionary objectForKeyedSubscript:]: 認識されないセレクター」で失敗します
Method Swizzling を使用して NSDictionary objectForKeyedSubscript: を valueForKey: (存在しない場合) に再マップしていますが、その回避策にはあまり満足していません。iOS 5.1 でこれらの関数呼び出しを削除しない platform.xml オプションまたはコンパイラ フラグが必要ですが、何も見つかりません。じぶんの
注: この問題は次のように見えるかもしれませんが (他にもいくつかありますが、リンクの担当者はいません)、ネイティブの xCode プロジェクトが正常に動作するためではなく、ADT でコンパイルされた ANE が動作しないためです。
試行錯誤したこと:
仕様
FlashBuilder/AIR: SDK3.7 ADT -バージョン: 3.7.0.1530
xCode プロジェクト BaseSDK: 6.1 (最新) 有効なアーキテクチャ: armv7 armv7s デプロイ ターゲット: iOS 5.1
Platform.XML (他にもサポート要件があるため、かなり長くなります)
<platform xmlns="http://ns.adobe.com/air/extension/3.7">
<linkerOptions>
<option>-ObjC</option>
<option>-weak_framework Accounts</option>
<option>-framework AddressBook</option>
<option>-framework AddressBookUI</option>
<option>-weak_framework AdSupport</option>
<option>-framework CoreLocation</option>
<option>-framework CoreMotion</option>
<option>-framework CoreTelephony</option>
<option>-framework EventKit</option>
<option>-framework EventKitUI</option>
<option>-framework iAd</option>
<option>-framework MapKit</option>
<option>-framework MediaPlayer</option>
<option>-framework MessageUI</option>
<option>-framework OpenAL</option>
<option>-weak_framework PassKit</option>
<option>-framework StoreKit</option>
<option>-weak_framework Twitter</option>
<option>-framework UIKit</option>
<option>-lsqlite3</option>
<option>-lxml2</option>
<option>-lz</option>
</linkerOptions>
</platform>
ADT ビルド コマンド:
adt -package -target ane build/MyANEName.ane ANE/extension.xml -swc ANE/MyANEName.swc -platform iPhone-ARM -platformoptions ANE/platform.xml -C ANE/ios .