В данной статье я расскажу как создавать статическую iOS-библиотеку. Да не простую, а универсальную! Но об этом позднее. Давайте разберемся для чего вообще нужны библиотеки.
Вы сделали какой-нибудь емкий модуль, использующий много классов, ресурсов и всего прочего. Модуль нужно использовать сразу в нескольких проектах, не зависящих друг от друга. Для таких целей благоразумно будет скомпилировать модуль в единый файл — библиотеку.
Создаем свою библиотеку в Xcode:
- File — New — Project
- iOS — Framework & Library — Cocoa Touch Static Library (Скриншот 1)
- Задаем название библиотеки
Создастся проект библиотеки с классом, названным также, как мы назвали библиотеку. Можно использовать его, можно добавлять другие классы — все на свое усмотрение.
Компилируем библиотеку:
- Выбираем устройство для компиляции (iOS Device или iOS Simulator)
- Нажимаем Build
Если ошибок компиляции не будет(зависит от Вашего кода), то в конечном итоге будем создавана библиотека «libИМЯ_ПРОЕКТА.a». Найти его можно в Навигаторе проекта в группе «Products».
Для того, чтобы использовать библиотеку в других проектах, необходимо добавить хидеры используемых классов, помимо самой библиотеки. Это нужно для того, чтобы вслепую не использовать классы библиотеки в других проектах. Достаточно нажать в Xcode правой кнопкой на файле «libИМЯ_ПРОЕКТА.a» — Show in Finder. Рядом с библиотекой будет папка include, содержащая в себе все заголовочные файлы библиотеки. (Скриншот 2)
Все было бы хорошо, но собранная таким простым образом библиотека будет работать либо на ARM (iOS-устройство), либо на x86 (iOS-симулятор). Это негативно сказывается на разработке проектов, использующих данную библиотеку, ибо приходится для сборки под другую архитектуру все время отключать данную библиотеку.
Для этого есть способ создания универсальной библиотеки, которая работает как на ARM, так и на x86. Суть простая: нужно сделать скрипт, который бы собирал две библиотеки (под ARM и под x86), а потом их объединял воедино:
- Добавляем Таргет для уже созданного нами проекта библиотеки в свойствах проекта — кнопка Add Target
- Выбираем OS X — Other — Aggregate (Скриншот 3)
- Задаем название Агрегата
- Заходим во вкладку Build Phases — Add Build Phase — Add Run Script
В тело скрипта добавляем следующее (Скриншот 4):
BUILD_TARGET_DIR=$PROJECT_DIR/build xcodebuild -target $PROJECT_NAME -sdk "iphonesimulator" -configuration "Release" clean build xcodebuild -target $PROJECT_NAME -sdk "iphoneos" -configuration "Release" clean build lipo -create -output "$BUILD_TARGET_DIR/$PROJECT_NAME-Combined.a" "$BUILD_TARGET_DIR/Release-iphoneos/lib$PROJECT_NAME.a" "$BUILD_TARGET_DIR/Release-iphonesimulator/lib$PROJECT_NAME.a"
- Выбираем Схему Агрегата
- Нажимаем Build
После успешной компиляции в папке проекта должна появиться папка «build», а которой будет находиться библиотека с префиксом «-Combined» (Скриншот 5), что намекает на то, что библиотека универсальная. Ее можно успешно использовать в проектах, а также собирать под архитектуры ARM и x86.
Скачать готовый проект универсальной библиотеки можно с GitHub
Немає коментарів:
Дописати коментар