Суть проблемы:
Если ваше нативное расширение использует 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 файлов в IPA
ActionScript Build Packaging -> Apple iOS -> Package Contents
P.S.
Для автоматизации конвертации можно настроить xcode таким образом, что бы sh-скрипт для конвертации XIB->NIB запускался каждый раз когда мы компилируем xcode-приложение нативного расширения. Если в кратце, то необходимо добавить новый Target, добавить Add Build Phase (Run Script) и указать этому Target что перед выполнением необходимо скомпилировать основной Target. Если кому интересно, могу подробно описать данную проедуру.