Добавление OCHamcrest в проект IOS

Документация по проекту гласит: просто добавьте фреймворк и флаги компоновщика, и все готово. Часы и часы потерянного времени спустя, я понял, что это не так. Если вы сделаете это, проект не увидит заголовочные файлы. Вы должны поместить фреймворк где-нибудь, где компилятор найдет заголовки. В моем случае это сработало, когда я поместил фреймворк в /Developer/Library/Frameworks, а затем велел ему вернуться к поиску в этом каталоге фреймворка (не возиться с каталогами поиска по заголовкам).

Тогда проблема, которую я получаю, состоит в том, что ссылка завершается с сообщением:

ld: framework not found OCHamcrestIOS

Я заметил, что документация для проекта говорит, что он был обновлен для Xcode 4. Я вытащил двоичный код из фреймворка после проверки кода и тратить кучу времени, не в состоянии построить версию IOS фреймворка.

Документация здесь.

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

В прошлый раз, когда я упал в яму, это было потому, что библиотека была C++ кодом. Может быть, это все еще проблема.

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


Обновление: переустановил Xcode. Все еще не работает. Есть дешевые способы сделать это, например, добавить файлы заголовков в проект. Сделал пост в блоге об этом, который выявил человека с таким же опытом.

2 ответа

Решение

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

  1. Создайте группу внутри проекта Xcode под названием Third Party.
  2. Свяжите это с папкой под названием thirdparty.
  3. Перейдите в Add Files in Xcode и выберите фреймворк.
  4. Перетащите его на зависимости.
  5. Запустите тесты, они проходят!

Это может быть предпочтительнее в любом случае, потому что ссылка на него в /System/Library/Frameworks создаст некоторые проблемы с версиями, и это может быть настроено очень быстро. Кроме того, у нас есть сервер непрерывной интеграции, и нам приходится заходить туда и синхронизировать версии, когда что-то меняется, не так уж и здорово.

Спасибо за проверку, Дерек.

Я использую ряд фреймворков в своих проектах. Некоторые из других людей, а некоторые мои. Глядя на документацию, я бы предположил, что этап копирования не предназначен для разработки под iOS. Так что я бы не стал этого делать. Я скачал последнюю версию zip с https://github.com/jonreid/OCHamcrest и она, похоже, содержит готовую статическую библиотеку iOS. (Не на моем Mac, поэтому я не могу проверить, чтобы подтвердить).

В любом случае, я включаю статические библиотеки в

  • Выберите проект (XCode 4).
  • Выберите цель, к которой я хочу добавить библиотеку.
  • Выберите вкладку "Построить фазы".
  • Разверните ссылку на двоичный файл с библиотеками.
  • Нажмите кнопку [+], чтобы добавить рамку.
  • Нажмите кнопку [Добавить другое...] и перейдите в каталог, содержащий каталог .framework, и выберите его.

Это все. Пути поиска целей будут обновлены для включения каталога фреймворка, а фреймворк будет указан слева под проектом. Развернув его, вы увидите заголовки.

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

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

Однако загруженный zip-архив с OCHamcrest, похоже, содержит правильную структуру OCHamcrestiOS.framework. Так что если вы храните этот каталог где-то и ссылаетесь на него, используя шаги, которые я описал выше, он должен работать просто отлично.

Другие вопросы по тегам