Сбой собственного расширения AIR в NSDictionary objectForKeyedSubscript в iOS 5.1
Создание собственного расширения Adobe AIR, использующего следующий код objC, приведет к сбою в iOS 5.1
NSDictionary *value=[NSDictionary dictionaryWithObjectsAndKeys: @"aSampleValue",@"aSampleKey",nil];
NSLog(@"Try objectForKeyedSubscript: %@", [value objectForKeyedSubscript:@"aSampleKey"]);
Сбой с "[__NSCFDictionary objectForKeyedSubscript:]: нераспознанный селектор"
У меня это работает прямо сейчас, используя метод Swizzling для переназначения NSDictionary objectForKeyedSubscript: to valueForKey: (если он не существует), но я не очень доволен этим обходным решением. Должен быть параметр platform.xml или флаг компилятора, который не будет обрезать эти вызовы функций в iOS 5.1, но я ничего не могу найти. мой
Примечание. Эта проблема может выглядеть примерно так (и некоторые другие, но у меня нет представителя для ссылок), но это не потому, что собственный проект xCode работает нормально, а ANE, скомпилированный с ADT, - нет.
Вещи попробовали и потерпели неудачу:
SPECS
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 .
1 ответ
У меня была такая же проблема, я решил ее с помощью -platformsdk
опция для ADT и указание на iOS 6.1 SDK
На OSX это находится здесь:
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS6.1.sdk
Так что добавьте это к вашей команде ADT:
-platformsdk /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS6.1.sdk