Поиск по этому блогу

вторник, 18 декабря 2012 г.

Hello Ane for Mac. Создание нативного расширения для MacOS.

В статье Hello ANE! Или как создать нативное расширение для iOS я рассказывал как создать первое нативное расширение для платформы iOS. В этой попробуем разобрать пример аналогичного расширения только для платформы MacOS.

Как я рассказывал прошлый раз, разработка нативного расширения делится на три этапа:

  1. создание библиотеки SWC
  2. создание библиотеки Xcode
  3. сборка пакета ANE

Создание библиотеки SWC.
Библиотеку SWC будем использовать такую же как и в предыдущей статье, без изменений.


Создание библиотеки Xcode.
Создание библиотеки Xcode для платформы MacOS немного отличается от предыдущей статьи: File->New->Project. В появившемся окне выбираем раздел:
OS X -> Framework & Library -> Cocoa Framework.

После создания проекта в прошлый раз мы добавляли в проект файл FlashRuntimeExtensions.h. Для платформы MacOS необходимо добавить фреймфорк: Adobe AIR.framework. Этот фреймфорк должен лежать в каталоге <flexSdkPath>/runtimes/air/mac/Adobe AIR.framework/, если вы его не нашли забрать можно от сюда.

Вот список изменений в коде библиотеки:
  1. Название файлов поменял на helloaneMac.h и helloaneMac.m.
    Теоретически этого можно было не делать, но это будет необходимо для следующей статьи где я расскажу как можно объединить два расширения для платформ iOS и MacOS в один ane файл (т.е. если ваше приложение мультиплатформенное, то нет необходимости создавать ane файл для каждой платформы отдельно.) Напоминаю, если вы поменяли методы глобальной инициализации/финализации в коде Xcode, то необходимо так же изменить названия этих методов в файле extension.xml.
  2. В прошлом проекте в файле helloane.h в самом начале мы писали строку: #import "FlashRuntimeExtensions.h", надо заменить её на #include <Adobe AIR/Adobe AIR.h>
  3. поменял методы глобальной инициализации/финализации с helloaneExtInitializer/helloaneExtFinalizer на
    helloaneMacExtInitializer/helloaneMacExtFinalizer. Смысл этого тот же, что и в пункте 1.
На этом различия в проекте Xcode заканчиваются.

Сборка пакета ANE
Для сборки ane под платформу MacOS используем следующий sh-скрипт:
#!/bin/sh

AIR_SDK_PATH="/Users/zaab/work/sdks/AdobeAIRSDK_3.3/"
ANE_NAME="hello.ane"
SWC_FILE_NAME="helloaneLib.swc"
STATIC_LIB_NAME="helloaneMac.framework"
BUILD_DIR="./build/"

mkdir $BUILD_DIR

cp -f "extension.xml" $BUILD_DIR"extension.xml"
cp -f "platformoptions.xml" $BUILD_DIR"platformoptions.xml"
cp -r "../xcode/build/"$STATIC_LIB_NAME $BUILD_DIR
cp -f "../asLib/bin/"$SWC_FILE_NAME $BUILD_DIR

/usr/bin/unzip -o "$BUILD_DIR$SWC_FILE_NAME" -d "$BUILD_DIR"
rm $BUILD_DIR"catalog.xml"

pushd "$BUILD_DIR"
"$AIR_SDK_PATH"/bin/adt -package -target ane "$ANE_NAME" extension.xml -swc "$SWC_FILE_NAME" -platform MacOS-x86 "$STATIC_LIB_NAME" library.swf
popd

rm $BUILD_DIR$SWC_FILE_NAME
rm -r $BUILD_DIR$STATIC_LIB_NAME
rm $BUILD_DIR"extension.xml"
rm $BUILD_DIR"platformoptions.xml"
rm $BUILD_DIR"library.swf"

Различия с прошлым скриптом здесь лишь в том что убрали платформу -platform iPhone-ARM и добавили новую -platform MacOS-x86.

extension.xml
Также необходимо изменить файл extension.xml, теперь он выглядит так:
<extension xmlns="http://ns.adobe.com/air/extension/3.1">
 <id>com.anedevelop.helloane</id>
 <versionNumber>1</versionNumber>
 <platforms>
  <platform name="MacOS-x86">
   <applicationDeployment>
    <nativeLibrary>helloaneMac.framework</nativeLibrary>
    <initializer>helloaneMacExtInitializer</initializer>
    <finalizer>helloaneMacExtfinalizer</finalizer>
   </applicationDeployment>
  </platform>
 </platforms>
</extension>


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

Скачать исходники можно от сюда. Пользуйтесь и не забывайте комментировать/лайкать ).