Добавление OCHamcrest в проект IOS
Документация по проекту гласит: просто добавьте фреймворк и флаги компоновщика, и все готово. Часы и часы потерянного времени спустя, я понял, что это не так. Если вы сделаете это, проект не увидит заголовочные файлы. Вы должны поместить фреймворк где-нибудь, где компилятор найдет заголовки. В моем случае это сработало, когда я поместил фреймворк в /Developer/Library/Frameworks, а затем велел ему вернуться к поиску в этом каталоге фреймворка (не возиться с каталогами поиска по заголовкам).
Тогда проблема, которую я получаю, состоит в том, что ссылка завершается с сообщением:
ld: framework not found OCHamcrestIOS
Я заметил, что документация для проекта говорит, что он был обновлен для Xcode 4. Я вытащил двоичный код из фреймворка после проверки кода и тратить кучу времени, не в состоянии построить версию IOS фреймворка.
Документация здесь.
В этой документации я также заметил, что в инструкциях по какао сказано, что в сборку нужно включить фазу копирования файлов. Я попробовал это. Не изменил результат.
В прошлый раз, когда я упал в яму, это было потому, что библиотека была C++ кодом. Может быть, это все еще проблема.
За исключением быстрого решения здесь, я собираюсь вернуться к использованию STAsserts, как бы ни была отвратительна эта перспектива, это намного, намного хуже.
Обновление: переустановил Xcode. Все еще не работает. Есть дешевые способы сделать это, например, добавить файлы заголовков в проект. Сделал пост в блоге об этом, который выявил человека с таким же опытом.
2 ответа
Таким образом, решение, которое я принял сейчас, после долгих раздумий, заключалось в том, чтобы включить структуру в проект.
- Создайте группу внутри проекта Xcode под названием Third Party.
- Свяжите это с папкой под названием thirdparty.
- Перейдите в Add Files in Xcode и выберите фреймворк.
- Перетащите его на зависимости.
- Запустите тесты, они проходят!
Это может быть предпочтительнее в любом случае, потому что ссылка на него в /System/Library/Frameworks создаст некоторые проблемы с версиями, и это может быть настроено очень быстро. Кроме того, у нас есть сервер непрерывной интеграции, и нам приходится заходить туда и синхронизировать версии, когда что-то меняется, не так уж и здорово.
Спасибо за проверку, Дерек.
Я использую ряд фреймворков в своих проектах. Некоторые из других людей, а некоторые мои. Глядя на документацию, я бы предположил, что этап копирования не предназначен для разработки под iOS. Так что я бы не стал этого делать. Я скачал последнюю версию zip с https://github.com/jonreid/OCHamcrest и она, похоже, содержит готовую статическую библиотеку iOS. (Не на моем Mac, поэтому я не могу проверить, чтобы подтвердить).
В любом случае, я включаю статические библиотеки в
- Выберите проект (XCode 4).
- Выберите цель, к которой я хочу добавить библиотеку.
- Выберите вкладку "Построить фазы".
- Разверните ссылку на двоичный файл с библиотеками.
- Нажмите кнопку [+], чтобы добавить рамку.
- Нажмите кнопку [Добавить другое...] и перейдите в каталог, содержащий каталог
.framework, и выберите его.
Это все. Пути поиска целей будут обновлены для включения каталога фреймворка, а фреймворк будет указан слева под проектом. Развернув его, вы увидите заголовки.
Проблема, о которой вы говорите, звучит как пара вещей. Во-первых, не найденный фреймворк звучит так, как если бы фреймворк не был включен в цель. Когда вы выберете фреймворк в списке проектов слева, вы сможете увидеть его целевое членство, отображаемое справа. Проверьте, включена ли цель, которую вы компилируете.
Во-вторых, сборка фреймворков не является тривиальной задачей, поэтому не пытайтесь выполнить ее, если у вас нет сценариев для этого. Я говорю это потому, что создание статической среды iOS означает компиляцию как для симулятора, так и для устройств, объединение скомпилированных файлов lib в универсальный, а затем сохранение его и заголовка в определенной структуре каталогов.
Однако загруженный zip-архив с OCHamcrest, похоже, содержит правильную структуру OCHamcrestiOS.framework. Так что если вы храните этот каталог где-то и ссылаетесь на него, используя шаги, которые я описал выше, он должен работать просто отлично.