Сбой собственного расширения 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
Другие вопросы по тегам