Городской дирижабль падает при вызове на взлет

При обновлении до UrbanAirship 3.0.0 с Xcode 5.0 я получаю сообщение об ошибке при вызове этого кода:

[UAirship takeOff:config];

Ошибка

+[NSJSONSerialization stringWithObject:]: unrecognized selector sent to class 0x3b2ca9fc
2013-09-19 15:02:31.981 [178:60b] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '+[NSJSONSerialization stringWithObject:]: unrecognized selector sent to class 0x3b2ca9fc'

Кажется, это не появляется при установке ключа «inProduction» на «YES» в AirshipConfig.plist, что имеет смысл, поскольку вызов takeOff: заполняет экземпляр UAirShip. Кажется, это связано с категорией NSJSONSerialization+UAAdditions.

Любая помощь по этому поводу? Спасибо


person Jason LAPIERRE    schedule 19.09.2013    source источник
comment
Какое значение/тип для «config»?   -  person CW0007007    schedule 19.09.2013
comment
Я устанавливаю конфигурацию по умолчанию UAConfig *config = [UAConfig defaultConfig];   -  person Jason LAPIERRE    schedule 19.09.2013
comment
Та же проблема здесь, есть идеи?   -  person OscarVGG    schedule 19.09.2013
comment
Проверить значение конфига?   -  person CW0007007    schedule 20.09.2013
comment
Только что опубликовал свое решение, которое, кажется, работает нормально. Спросите меня, есть ли у вас какие-либо проблемы относительно того, как я это сделал.   -  person Jason LAPIERRE    schedule 20.09.2013


Ответы (5)


Чтобы решить эту проблему, вы должны включить флаг «-ObjC» в «Другие флаги компоновщика», которые можно найти в настройках сборки ваших проектов.

Библиотека UAirship 3.x теперь использует категории Objective-C, поэтому этот флаг должен быть установлен, чтобы избежать исключения во время выполнения.

Подробности по проблеме можно найти здесь:

https://developer.apple.com/library/mac/qa/qa1490/_index.html

Обновлены документы:

http://docs.urbanairship.com/build/ios.html#build-settings http://docs.urbanairship.com/topic_guides/ios_migration.html#linker-flags

person ralepinski    schedule 20.09.2013
comment
Спасибо за вашу помощь! - person Jason LAPIERRE; 25.09.2013
comment
Удивительно, это обновление до 5.0.3 в XCode 6 работало нормально в один день, а на следующий произошел сбой ... очень странно, но добавление флага компоновщика сработало! - person CMash; 25.03.2015


Вы должны были включить обе библиотеки:

  • libUAirship-3.0.0.a
  • libUAirship-iOS5-3.0.0.a

Вы должны использовать любую из библиотек для соответствующей iOS

person Akki    schedule 20.09.2013
comment
На самом деле, я только добавил библиотеку libUAirship-iOS5-3.0.0 Я запускаю свое приложение с iOS Deployment Target — iOS 5.0, а базовый SDK — iOS 7.0. - person Jason LAPIERRE; 20.09.2013

После просмотра различных решений выясняется, что это устраняет проблему:

• Загружайте исходники с https://github.com/urbanairship/ios-library прямо в свое приложение. папка (не берите .zip, указанный на их сайте)

• Перетащите папку Airship в свой проект (не используйте папку AirshipLib)

Не связывайте какие-либо из libUAirship-3.0.0.a или libUAirship-iOS5-3.0.0.a

• Бум. Это работает.

Надеюсь, это поможет некоторым другим, которые хотят исправить это целую вечность.

person Jason LAPIERRE    schedule 20.09.2013

Просто добавлю, что моя проблема заключалась в том, что я добавил флаг -ObjC в project, а его нужно добавить в настройки target.

Кроме того, если это не скомпилируется, есть еще один вариант

-Wl,-force_load,<PathToYourLib>/libUAirship-4.0.0.a    

Также следует добавить в цель. Заполните реальный путь к вашей библиотеке вместо <PathToYourLib>.

person Lena Bru    schedule 10.07.2014