вівторок, 10 вересня 2013 р.

Создание универсальной библиотеки под iOS

В данной статье я расскажу как создавать статическую iOS-библиотеку. Да не простую, а универсальную! Но об этом позднее. Давайте разберемся для чего вообще нужны библиотеки.

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

Создаем свою библиотеку в Xcode:

  • File — New — Project
  • iOS — Framework & Library — Cocoa Touch Static Library (Скриншот 1)
  • Скриншот 1

    Скриншот 1

  • Задаем название библиотеки

Создастся проект библиотеки с классом, названным также, как мы назвали библиотеку. Можно использовать его, можно добавлять другие классы — все на свое усмотрение.

Компилируем библиотеку:

  • Выбираем устройство для компиляции (iOS Device или iOS Simulator)
  • Нажимаем Build

Если ошибок компиляции не будет(зависит от Вашего кода), то в конечном итоге будем создавана библиотека «libИМЯ_ПРОЕКТА.a». Найти его можно в Навигаторе проекта в группе «Products».

Для того, чтобы использовать библиотеку в других проектах, необходимо добавить хидеры используемых классов, помимо самой библиотеки. Это нужно для того, чтобы вслепую не использовать классы библиотеки в других проектах. Достаточно нажать в Xcode правой кнопкой на файле «libИМЯ_ПРОЕКТА.a» — Show in Finder. Рядом с библиотекой будет папка include, содержащая в себе все заголовочные файлы библиотеки. (Скриншот 2)

Скриншот 2

Скриншот 2

 

Все было бы хорошо, но собранная таким простым образом библиотека будет работать либо на ARM (iOS-устройство), либо на x86 (iOS-симулятор). Это негативно сказывается на разработке проектов, использующих данную библиотеку, ибо приходится для сборки под другую архитектуру все время отключать данную библиотеку.

Для этого есть способ создания универсальной библиотеки, которая работает как на ARM, так и на x86. Суть простая: нужно сделать скрипт, который бы собирал две библиотеки (под ARM и под x86), а потом их объединял воедино:

  • Добавляем Таргет для уже созданного нами проекта библиотеки в свойствах проекта — кнопка Add Target
  • Выбираем OS X — Other — Aggregate (Скриншот 3)
  • Скриншот 3

    Скриншот 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"

Скриншот 4

Скриншот 4

  • Выбираем Схему Агрегата
  • Нажимаем Build

После успешной компиляции в папке проекта должна появиться папка «build», а которой будет находиться библиотека с префиксом «-Combined» (Скриншот 5), что намекает на то, что библиотека универсальная. Ее можно успешно использовать в проектах, а также собирать под  архитектуры ARM и x86.

Скриншот 5

Скриншот 5

Скачать готовый проект универсальной библиотеки можно с GitHub

Немає коментарів:

Дописати коментар

HyperComments for Blogger

comments powered by HyperComments