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