创建使用以下 objC 代码的 Adobe AIR 本机扩展将在 iOS 5.1 中崩溃
NSDictionary *value=[NSDictionary dictionaryWithObjectsAndKeys: @"aSampleValue",@"aSampleKey",nil];
NSLog(@"Try objectForKeyedSubscript: %@", [value objectForKeyedSubscript:@"aSampleKey"]);
它将失败并显示“[__NSCFDictionary objectForKeyedSubscript:]: unrecognized selector”
我现在使用 Method Swizzling 将 NSDictionary objectForKeyedSubscript: 重新映射到 valueForKey: (如果它不存在),但我对这种解决方法并不满意。必须有一个 platform.xml 选项或编译器标志,不会在 iOS 5.1 中删除这些函数调用,但我找不到任何东西。我的
注意:这个问题可能看起来很像以下问题(还有一些其他问题,但我没有链接的代表),但这并不是因为本机 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 .