Pull to refresh

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

Reading time2 min
Views4K
Недавно столкнулся с необходимостью создания статической библиотеки (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 первого взгляда может показаться, что все очень просто, но мне пришлось долго повозиться для того, чтобы понять нюансы работы с статическими библиотеками. Надеюсь, кому-то эта статья поможет сэкономить время.

Спасибо за внимание!
Tags:
Hubs:
+12
Comments4

Articles