2011-01-11 3 views
41

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

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

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

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

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

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

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

+0

Хороший вопрос, и я хотел бы, чтобы было много примеров этого. Я рассмотрю связанный с ним учебник и посмотрю, есть ли что-нибудь, что я могу добавить. ваша цель - создать универсальную статическую библиотеку lib, которую вы можете использовать с другими приложениями в виде двоичного ресурса или хотите ли вы создать зависимость проекта от какого-либо продукта сборки совместного проекта? – Jonah

+0

универсальная статическая библиотека. :) – Alex

+0

Проверьте этот документ яблока: https://developer.apple.com/library/ios/technotes/iOSStaticLibraries/Articles/configuration.html –

ответ

25

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

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

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

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

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

4.Select New Target затем добавить новый этап сборки (Редактор> Добавить этап сборки> Добавить Run Script Построить Фазу New Build Phase

5.Select на этапе построения и введите сценарий по этой ссылке в перспективе сценарий окна. https://gist.github.com/sponno/7228256

Run Script Code

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

6.2.Select наш libary, а затем IOS устройств, нажмите построить или запустить (Ctrl + B)

6.3.Then для Simulator (выберите Library Icon очень левом верхнем углу Xcode, а затем IOS Simulator) enter image description here

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

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

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

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

enter image description here

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

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

** BONUS POINTS *** Установите VVDocumenter https://github.com/onevcat/VVDocumenter-Xcode и используйте это, чтобы документировать любые файлы header.h, которые вы поделитесь с библиотекой.

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

Context Aware Help based on header file

+1

Это потрясающе! Xcode и Apple прошли долгий путь с тех пор, как я задал свой первоначальный вопрос, и теперь я это делаю. http://cocoapods.org/ также выглядит многообещающим, если вы играете в рубиновый камень. – Alex

+1

Удивительный ответ чувак. Большое спасибо! – CalZone

12

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

+2

Можете ли вы просто отметить это как принятый ответ? – FreeAsInBeer

+0

Может ли кто-нибудь ссылаться на более недавний учебник? – Stavash

+0

http://www.raywenderlich.com/41377/creating-a-status-library-in-ios-tutorial Это тот, который я использую. В конце 2013 года стало более актуальным. –

11

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

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

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

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

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

- или -

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

+1

+1, интересные мысли. – Alex

2

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

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

Смежные вопросы