Разница между фреймворком и статической библиотекой в ​​xcode4, и как их вызывать - PullRequest
130 голосов
/ 06 июня 2011

Я новичок в xcode и target-c.Я хочу задать очень простой вопрос.

Я увидел, что при «связывании двоичного файла с библиотеками» в настройках проекта возникают различия в структуре и библиотеках, импортированных из других проектов в рабочей области.

Первый вопрос, почему есть рамки?И почему там библиотека?Разве моя библиотека не может быть фреймворком?

А затем, из файла .h , как я могу вызывать классы из моей импортированной статической библиотеки?префикс, но я не смог его найти.Ни "ProjName / Myclass.h" не работают.

Пожалуйста, будьте как можно точнее.

Спасибо

Ответы [ 2 ]

140 голосов
/ 17 июня 2011

Самое большое преимущество фреймворка перед статическими библиотеками состоит в том, что они действуют как удобный способ упаковки двоичного файла скомпилированной библиотеки и любых связанных заголовков. Они могут быть добавлены в ваш проект (так же, как встроенные фреймворки SDK, такие как Foundation и UIKit), и они должны просто работать (большую часть времени).

Большинство фреймворков содержат динамические библиотеки; рамки, созданные в Xcode с использованием шаблона Mac Framework, создадут динамическую библиотеку. IPhone не поддерживает динамические платформы, поэтому распространенные библиотеки кода iOS стали распространяться в виде статических библиотек.

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

Итак: в общем, я считаю, что лучший способ распространения вашей библиотеки - это фреймворк. Чтобы создать «статический» фреймворк для iOS, вы можете взять нормальный фреймворк и заменить двоичный файл вашей скомпилированной статической библиотекой. Вот как я распространяю одну из моих библиотек, Resty , и именно так я собираюсь распространять свои библиотеки в будущем.

Возможно, вы захотите взглянуть на предоставленный Rakefile в этом проекте (если вы не знаете, Rake является эквивалентом Ruby для Make). У меня есть несколько задач для компиляции моего проекта (с использованием xcodebuild) и упаковки их в качестве статической среды для iOS. Вы должны найти это полезным.

В качестве альтернативы вы можете использовать эти шаблоны Xcode 4 для создания платформы iOS.

Обновление 9 декабря 2013 г. : это популярный ответ, поэтому я решил отредактировать его, сказав, что мой первый выбор для распространения библиотеки изменился. Мой первый выбор для любой сторонней библиотеки в качестве потребителя или производителя - CocoaPods. Я распространяю свои библиотеки с использованием CocoaPods и предлагаю заранее скомпилированную статическую библиотеку с заголовками в качестве запасного варианта.

19 голосов
/ 06 июня 2011

В основном, фреймворки являются библиотеками и предоставляют удобный механизм для работы с ними.Если вы посмотрите «внутри» фреймворка, это просто каталог, содержащий статическую библиотеку и заголовочные файлы (в некоторой структуре папок с метаданными).

Если вы хотите создать свой собственный фреймворк, вы должны создатьстатическая библиотека »и упакуйте ее определенным образом.см. этот вопрос

В общем, framworks на платформах используется для многоразового поведения, когда вы добавляете свой собственный код «в существующую среду».если вы хотите иметь определенную функциональность, вы можете использовать библиотеку (например, three20) и упаковать ее в свой дистрибутив приложения

...