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