iPhone: использование статической библиотеки в приложении приводит к сбою устройства, но не симулятора iphone - PullRequest
0 голосов
/ 10 октября 2009

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

  • Установить путь поиска заголовка
  • Установить другие флаги компоновщика на "-ObjC"
  • Добавлен проект статической библиотеки xcode
  • Убедитесь, что lib.a указан в качестве целевого фреймворка
  • Добавлена ​​библиотека как прямая зависимость

Как я уже сказал в заголовке, я успешно запустил приложение со статической библиотекой в ​​симуляторе. Как только я пытаюсь протестировать приложение с помощью устройства, оно вылетает в секунду, когда ему приходится использовать функцию из библиотеки:

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** +[NSDate firstOfCurrentMonth]: unrecognized selector sent to class 0x3841bb44'
2009-10-10 12:45:31.159 Basement[2372:207] Stack:

Ответы [ 2 ]

2 голосов
/ 10 октября 2009

Это связано с ошибкой в ​​текущем компоновщике SDK. См. этот пост для получения дополнительной информации о проблеме и возможных обходных путях. (см. также этот пост .)

Обновление:

Еще одна вещь, которую вы можете попробовать - удалить статическую библиотеку и включить исходные файлы библиотеки непосредственно в проект приложения. Я столкнулся с похожей проблемой связывания статических библиотек, и я остановился на том, чтобы заставить его работать успешно. Если это работает (каким бы обходным ни был обходной путь), это определенно проблема компоновщика.

0 голосов
/ 24 марта 2010

Я столкнулся с этой проблемой недавно. Я не смог заставить работать -all_load, когда заметил, что другая категория у меня работала. Я был ленив для этой категории и включил ее в другой файл.

В итоге я создал фиктивный класс (без методов, переменных экземпляра) и включил реализацию моих категорий в файл .m для этого фиктивного класса. После этого мои категории начали работать даже после того, как я убрал флаг -all_load.

Это было на iPhone OS 3.1.3.

Конечно, это НЕ ПРАВИЛЬНЫЙ способ исправить это, но, похоже, это сработало.

Полный пример кода есть в моем блоге для моих (тривиальных) категорий.

...