Разница между фреймворком и статической библиотекой в ​​xcode4 и как их называть

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

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

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

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

Я предполагаю, что должен быть префикс, но я не мог его найти. Ни "ProjName/Myclass.h" не работают.

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

Спасибо

Ответ 1

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

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

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

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

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

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

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

Ответ 2

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

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

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