Как стать автором
Обновить

Статические библиотеки в iPhone SDK

Время на прочтение2 мин
Количество просмотров4K
Недавно столкнулся с необходимостью создания статической библиотеки (static library) в iPhone SDK. Обнаружил, что этот процесс достаточно плохо документирован, поэтому предлагаю вашему вниманию пошаговое руководство по созданию и использованию статических библиотек в iPhone SDK.


Создание статической библиотеки


Для описания процесса создания статической библиотеки я использовал материалы статьи «Building static libraries with the iPhone SDK» и немного личного опыта.

Исходная точка: готовый проект, в котором часть функционала вы хотите вынести в отдельную библиотеку.

1) В вашем Xcode проекте в секции «Targets» правым кликом добавляем новый target:

image

В открывшемся окне выбираем Static Library:

image

Задаем имя библиотеки, например TestStaticLib.

2) Переносим существующие .m файлы в нашу библиотеку. Не нужно добавлять .h файлы.

image

3) Удаляем файлы, которые мы перенесли в библиотеку, из нашего проекта:

image

4) Добавляем ссылку на библиотеку в вкладке «General» свойств нашего приложения:

image

Замечание: Если мы меняем что-то в исходном коде библиотеки, то необходимо сначала перекомпилировать ее, а потом уже само приложение. Перекомпиливать библиотеку вручную не обязательно, если добавить библиотеку не в Linked Libraries, а в Direct Dependencies.

5) В вкладке Build в секции Linking добавляем флаг "-ObjC" в «Other Linker Flags». Это нужно лишь в том случае, когда ваша статическая библиотека определяет Objective-C классы, которые будет использовать ваше приложение:

image

Замечание: флаг "-ObjC" не особо важен, пока в библиотеке нет ничего Objective-C specific, но стоит добавить в библиотеку, например, категории для какого-то класса — сразу возникает run-time exception. Причина — отсутствие флага -ObjC для линкера. Детальнее это описано здесь.

6) Компилируем библиотеку.

7) Компилируем приложение.

Общие замечания:

1. После того, как библиотека скомпилировалась, то исходный код можно из нее удалить.
2. Если библиотека и приложение, которое ее использует, скомпилированы для разных target (например, библиотека — release для симулятора, приложение — debug для устройства), то, наверняка, вы получите ошибку компиляции. В таких случаях нужно использовать несколько вариантов библиотеки или компилировать под одинаковые targets.
3. В результате компиляции библиотеки получим файл с расширением .a — это и есть наша статическая библиотека.

Использование библиотеки в новом приложении


1). Создаем новое приложение, например LinkingLibraryDemo:

image

2). Добавляем нашу *.a библиотеку (Add-> Existing Files->Navigate to the file -> Check “Copy items into destination group’s folder (if needed)” checkbox):

image

3). Идем в Targets, двойной клик – откроется окно Target Info. В вкладке General в секции Linked Libraries вы увидите подключаемую библиотеку.

image

4). В вкладке Build в секции Linking section нужно добавить флаг "–ObjC" в Other Linker Flags.

image

5). Добавляем все необходимые *.h файлы в проект.

После этих действий можно использовать библиотеку.

P.S. C первого взгляда может показаться, что все очень просто, но мне пришлось долго повозиться для того, чтобы понять нюансы работы с статическими библиотеками. Надеюсь, кому-то эта статья поможет сэкономить время.

Спасибо за внимание!
Теги:
Хабы:
Всего голосов 22: ↑17 и ↓5+12
Комментарии4

Публикации

Истории

Работа

Swift разработчик
34 вакансии
iOS разработчик
27 вакансий

Ближайшие события

One day offer от ВСК
Дата16 – 17 мая
Время09:00 – 18:00
Место
Онлайн
Конференция «Я.Железо»
Дата18 мая
Время14:00 – 23:59
Место
МоскваОнлайн
Антиконференция X5 Future Night
Дата30 мая
Время11:00 – 23:00
Место
Онлайн
Конференция «IT IS CONF 2024»
Дата20 июня
Время09:00 – 19:00
Место
Екатеринбург
Summer Merge
Дата28 – 30 июня
Время11:00
Место
Ульяновская область