Приложение iOS 4 аварийно завершает работу при запуске 3.1.3: символ не найден: __NSConcreteStackBlock - PullRequest
3 голосов
/ 27 октября 2011

Мое приложение падает на 3.1.3 из-за этой ошибки NSConcreteBlock.Я прочитал другой пост на эту тему , и ответ был на слабую ссылку на libSystem.B.dylib.

Однако я вообще не включаю эту библиотеку в свое приложение, иЯ все еще получаю ту же ошибку.

Что еще может быть причиной этого сбоя?

Вот журнал:

Тип кода: ARM (собственный) Родительский процесс:launchd 1

Дата / Время: 2011-10-20 14: 05: 08.189 -0700 Версия ОС: iPhone OS 3.1.3 (7E18) Версия отчета: 104

Тип исключения: EXC_BREAKPOINT (SIGTRAP) Коды исключений: 0x00000001, 0xe7ffdefe Crashed Thread: 0

Сообщение об ошибке Dyld: Символ не найден: __NSConcreteStackBlock Ожидается в: /usr/lib/libSystem.B.dyli9y D9

Ответы [ 5 ]

3 голосов
/ 04 ноября 2011

Тем не менее, я вообще не включаю эту библиотеку в свое приложение, и все еще получаю ту же ошибку.

За исключением того, что от libSystem нет выхода, поскольку она, помимо прочего, реализует стандартную библиотеку времени выполнения Си. Всякий раз, когда вы компилируете программу Objective-C, компилятор автоматически связывает libSystem. И, если вы проверяете системные платформы, такие как UIKit или Foundation, через otool -L, вы обнаружите, что они также связаны с libSystem.

Это означает, что решение, описанное Бардом Ларсоном в этом ответе , должно работать и для вас.

1 голос
/ 27 октября 2011

Вы, наверное, видели это, но все же стоит попробовать: http://longweekendmobile.com/2011/03/15/the-backwards-compatibility-blues-supporting-ios-3-1-4-2/

Там говорят, что даже если вы не используете блоки в своем коде, libSystem ссылается на них, поэтому слабое связывание с libSystem также должно работать для вас.

1 голос
/ 27 октября 2011

Блоки - это функция языка Objective C, представленная в iOS 4.0 - она ​​никогда не будет работать в iOS 3.x.

0 голосов
/ 03 ноября 2011

Возможно, вы не используете какие-либо блочные методы, но вы можете использовать некоторые методы, которые используют некоторые методы UIKit, которые сейчас используют блочные методы для внутреннего использования. Возможно, вы захотите проверить следующее:

  1. Убедитесь, что ваша цель развертывания в настройках сборки установлена ​​на 3.1.3.
  2. Возможно, вы используете какие-либо новые или обновленные методы из iOS4 или 5? то есть метод, который теперь может вызывать / выполнять блок за сценой

как говорили другие, возможно, вы могли бы использовать слабую ссылку на библиотеку libSystem в качестве крайней меры.

Удачи

0 голосов
/ 03 ноября 2011

В настройках сборки убедитесь, что версия вашего компилятора C / C ++ - LLVM GCC, а не GCC.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...