Странная проблема из-за блокировки поддержки iOS 3.1.3

#iphone #ios #sdk #objective-c-blocks

#iPhone #iOS #sdk #objective-c-блоки

Вопрос:

поскольку я регулярно тестирую свое приложение на устройстве 3.1.3, мне пришлось добавить флаг компоновщика «-weak_library /usr / lib / libSystem.B.dylib» для поддержки там блоков. Это не было проблемой, пока я просто не начал добавлять некоторые коды gamecenter из образцов Apple. Только в симуляторе я затем столкнулся с мгновенным сбоем (EXC_BAD_ACCESS) где-то глубоко в библиотеках Apple, когда блок (даже пустой) передается в качестве обратного вызова аутентификации в кодировке GC. Когда я предоставляю nil в качестве обратного вызова, вход в систему GC работает нормально, и приложение продолжается. Он отлично работает на всех реальных устройствах (iPad, iPhone с iOS 4.3, iPod с iOS 3.1.3 — тогда, конечно, без GC). Когда я удаляю флаг слабой ссылки для компоновщика, он также будет работать без проблем в симуляторе. Кто-нибудь знает, что там происходит? Это неудовлетворительное решение для добавления флага компоновщика только каждый раз, когда я хочу выполнить развертывание на своем древнем iPod.

Спасибо, привычный

Комментарии:

1. Проблема заключается просто в ошибке в симуляторе iOS. Коды отлично работают на устройстве. Я заполнил радар в Apple bug reporter (radar: // 9470793)

Ответ №1:

Инженер Apple знал правильный ответ:

-weak_library /usr/lib/libSystem.B.dylib нарушает работу симулятора iOS. Вместо этого используйте -weak-lSystem.

Это действительно работает!