Ответ 1
Самое большое преимущество, которое имеет инфраструктура над статическими библиотеками, заключается в том, что они действуют как аккуратный способ компоновки скомпилированных бинарных библиотек и любых связанных заголовков. Они могут быть удалены в ваш проект (так же, как встроенные в SDK фреймворки, такие как Foundation и UIKit), и они должны просто работать (большую часть времени).
Большинство фреймворков содержат динамические библиотеки; фреймворки, созданные в Xcode с использованием шаблона Mac Framework, создадут динамическую библиотеку. IPhone не поддерживает динамические фреймворки, поэтому он стал обычным явлением для повторного использования библиотек iOS-кода, которые будут распространяться как статические библиотеки.
Статические библиотеки прекрасны, но они требуют немного дополнительной работы со стороны пользователя. Вам нужно связать свой проект с библиотекой, и вам нужно скопировать файлы заголовков в ваш проект или указать их где-нибудь, установив соответствующие пути поиска заголовка в настройках сборки.
Итак: в заключение, я считаю, что лучший способ распространения вашей библиотеки - это основа. Чтобы создать "статическую" среду для iOS, вы можете по существу принять нормальную структуру и заменить двоичный файл на свою скомпилированную статическую библиотеку. Вот как я распространяю одну из моих библиотек, Resty и как я собираюсь распространять мои библиотеки в будущем.
Вы можете посмотреть предоставленный Rakefile в этом проекте (если вы не знаете, Rake - эквивалент Ruby для Make). У меня есть несколько задач для компиляции моего проекта (с использованием xcodebuild
) и упаковки их в качестве статической основы для iOS. Вы должны найти это полезным.
В качестве альтернативы вы можете использовать эти шаблоны Xcode 4 для создания инфраструктуры iOS.
Обновление 9 декабря 2013 г.. Это популярный ответ, поэтому я решил изменить его, чтобы сказать, что мой первый выбор для распространения библиотеки изменился. Мой первый выбор для любой сторонней библиотеки как потребителя или продюсера - это CocoaPods. Я распространяю свои библиотеки с помощью CocoaPods и предлагаю предварительно скомпилированную статическую библиотеку с заголовками в качестве резервной опции.