Как построить статическую библиотеку Objective-C? - PullRequest
42 голосов
/ 11 января 2011

У меня есть несколько классов Objective-C, которые я сейчас использую как в приложении Cocoa (Mac OS X), так и в приложении Cocoa-Touch (iOS). В настоящее время, когда я обновляю эти классы, мне приходится копировать эти обновленные файлы .h и .m в оба проекта. Не так уж и много, но я собираюсь использовать их во многих других проектах.

Итак, я хочу встроить эти классы в статическую библиотеку Objective-C. А затем ссылка на эту библиотеку во всех других проектах.

Есть ли способ создать статическую библиотеку, которая бы работала как с приложениями Cocoa, так и с приложениями Cocoa?

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

Итак, как мне построить статическую библиотеку Objective-C right ? Нужно ли создавать статическую библиотеку Cocoa-Touch и Cocoa? Или я могу просто сделать один? Как это сделать?

Есть ли хорошие учебники по этому вопросу?

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

Ответы [ 4 ]

26 голосов
/ 29 октября 2013

Для XCode 5. Эти ответы кажутся немного устаревшими.Вы можете увидеть основные шаги здесь http://www.raywenderlich.com/41377/creating-a-status-library-in-ios-tutorial.Но Xcode 5 делает для вас намного больше работы и теперь работает почти так, как вы этого хотите.

1. Создайте новое приложение статической библиотеки в Xcode New Static Library in Xcode

2.Вы можете удалить любойфайлы, которые он создает, и добавьте свои собственные.Добавьте свои методы и т. Д. Code Code Code

3.Небольшая проблема со статическими библиотеками заключается в том, что вы можете создавать только для устройства или запускать в симуляторе.Поэтому нам нужно создать библиотеку, которая поддерживает архитектуры ARM и i386, для этого нам нужно создать универсальный двоичный файл (чтобы он поддерживал симулятор и сборки устройства).

Создание новой цели (Файл> Создать> Цель).New Target

4.Выберите новую цель, затем добавьте новую фазу сборки («Редактор»> «Добавить фазу сборки»> «Добавить этап сборки сценария запуска») New Build Phase

5.Выберите фазу сборки и введитеСкрипт из этой ссылки в окно скрипта запуска. https://gist.github.com/sponno/7228256

Run Script Code

6. Теперь вам нужно построить каждую архитектуру (симулятор и устройство iOS)

6.2.Выберите нашу библиотеку, а затем устройство iOS, нажмите кнопку «Создать или запустить» (Command + B)

6.3. Затем для симулятора (выберите значок библиотеки в верхнем левом углу Xcode, а затем симулятор iOS) enter image description here

7. Теперь вы хотите создать значок BullsEye> iOS-устройство. Это будет общая цель и объединит наши две библиотеки в новый универсальный файл.

8. Посмотрим, сработало ли все этоРазверните папку «Продукты» в левом дереве, щелкните правой кнопкой мыши файл, заканчивающийся на «.a» и «Показать в Finder»

9. Если все это работает, вы должны увидеть следующие файлы в Finder.Вы увидите Library .a file and include files

10. Последний шаг прост,просто перетащите файл "library.a" и включенную папку в новый проект Xcode.enter image description here

enter image description here

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

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

** БОНУСНЫЕ ТОЧКИ *** Установите VVDocumenter https://github.com/onevcat/VVDocumenter-Xcode и используйте его для документирования любых файлов header.h, которыми вы будете делиться с библиотекой.

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

Context Aware Help based on header file

12 голосов
/ 11 января 2011

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

11 голосов
/ 11 января 2011

(используя учебное пособие в качестве отправной точки)

теперь создайте вторую цель в библиотеке xcodeproj для другой ОС.

настройте параметры sdk каждой цели с помощью файла xcconfig (один длякаждая ОС).используйте эти файлы xcconfig в других ваших библиотеках.это также позволяет легко управлять глобальными настройками сборки.

настроить ссылки и ссылки на зависимости в ваших целях (приложениях) как обычно, но выбрать правильную целевую библиотеку.

добавить совокупную цель вБиблиотечный проект для простой мета-компиляции / простого обслуживания.

- или -

Сделайте все это, введя слой сценариев или создав пользовательский инструмент для сборки.

2 голосов
/ 20 апреля 2012

Я также нашел это "Построение статической библиотеки с Дженкинсом" , это действительно хорошо. Рассказывается о том, как правильно настроить статическую библиотеку, как заставить Jenkins автоматически собрать ее, а затем поместить полученные файлы .a и .h в то место, откуда их можно получить.

Объедините это с CocoaPods или Maven (я еще этого не сделал), и вы можете получить довольно симпатичную маленькую экосистему.

...