Суть проблемы:
Если ваше нативное расширение использует XIB файлы, то для работы во Flash приложении, эти файлы необходимо положить в каталог с приложением, и запаковать эти файлы в IPA. При попытке загрузить XIB файл во Flash приложение, компилятор ругается ошибкой. Опытным путем выяснил что XIB файл необходимо конвертировать в NIB. Для справки: NIB файл это тоже самое что и XIB только в другом формате. С чем связаны капризы Flash Builder и почему ему не нравятся XIB - выяснить не удалось. Если кто знает - поделитесь.В итоге для использования XIB файлов, необходимо сделать следующее:
Конвертировать все XIB файлы в NIBЗапаковать NIB файлы в IPA с помощью компилятора Flash Builder
Конвертация XIB->NIB#!/bin/bash # путь до утилиты ibtool="/Applications/Xcode.app/Contents/Developer/usr/bin/ibtool" # параметры утилиты: выводить на экран результаты выполнения: parameters="--errors --warnings --notices --output-format human-readable-text" # путь до каталога SDK sdkPath="/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS6.0.sdk" # путь до исходного XIB файла xibFile="../project/MyXibFile.xib" # путь до NIB файла, который мы хотим сгенерировать nibFile="../bin/MyNewNibFile.nib" # собственно команда конвертации: $ibtool $parameters --compile $nibFile $xibFile --sdk $sdkPath
Конечно же не удобно каждый раз после изменения XIB файла, дергать этот скрипт руками что бы создать новый измененный NIB, тем более если XIB файлов в проекте множество. Для автоматизации в своих проектах я написал sh-скрипт который ищет все XIB файлы в каталоге xcode-приложения, и конвертирует их в соответствующие NIB файлы.
ibtool="/Applications/Xcode.app/Contents/Developer/usr/bin/ibtool"
parameters="--errors --warnings --notices --output-format human-readable-text"
sdkPath="/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS6.0.sdk"
# путь до каталога проекта, где лежат XIB файлы
xibsPath="../project/xcode/"
# путь до каталога куда складировать сгенерированные NIB файлы
buildPath="../project/flash/bin/"
# находим все файлы с раширением .xib в каталоге xibsPath
files=`find $xibsPath -name "*.xib" `
for xibFile in $files
do
# получить имя файла без пути и расширения .xib
xibName=`basename $xibFile | awk -F"\." '{print $1}'`
# задаем имя и путь до файла .nib
nibFile=$buildPath"/"$xibName".nib"
# конвертируем xib->nib
$ibtool $parameters --compile $nibFile $xibFile --sdk $sdkPath
done
Упаковка NIB файлов в IPAActionScript Build Packaging -> Apple iOS -> Package Contents
P.S.
Для автоматизации конвертации можно настроить xcode таким образом, что бы sh-скрипт для конвертации XIB->NIB запускался каждый раз когда мы компилируем xcode-приложение нативного расширения. Если в кратце, то необходимо добавить новый Target, добавить Add Build Phase (Run Script) и указать этому Target что перед выполнением необходимо скомпилировать основной Target. Если кому интересно, могу подробно описать данную проедуру.
