Разработка iPhone/iPod touch приложений: IPA файл? Запросто!
Если возникла необходимость “дать попробовать” ваше приложение заказчику/тестеру/друзьям и т.п. на этапе разработки, когда еще ничего не готово, и скачивать его из Apple Store нет возможности, и XCode у этих людей не установлен… То вы обречены Есть возможность распространения приложения через iTunes (.IPA файл). Среди большого количества людей таким образом распространить приложение не удастся (ограничение Apple на количество UUID(100 в год), привязанных к Developer-аккаунту), но для тестирования сойдет.
Для этого понадобится
- UUID телефон(ов) пользователя(ей), на которые необходимо установить приложение
- Provisioning profile, который включает эти UUID’ы
- XСode
Начинаем

Создаем новый target в ХCode. Вид target’a выбираем из Other->Shell Script Target. Особо большой разницы не будет, если выберете другой, но тогда прийдется немного больше менять. А это лишнее.
Называем target как-нибудь оригинально, например IPA.
Сразу меняем в этом target’e PRODUCT_NAME на имя основного Target’a, например IPATest. Зачем это делается? Об этом чуть попозже.
Делаем target IPA напрямую зависящим от главного target’a. Для этого кликаем два раза на IPA target, + возле Direct Dependencies и добавляем. Должно получиться что-то вроде (картинка справа).
Почти все. теперь самое главное. В секцию таргета Run script вставляем следующий скрипт:
[sourcecode language='javascript'] # compress application. # Создаем Payload директорию /bin/mkdir $CONFIGURATION_BUILD_DIR/Payload #Копируем в нее результат BUILD'a основного таргета #Надо заметить, что $PRODUCT_NAME здесь берется из IPA target'a #Именно поэтому мы его переименовывали /bin/cp -R $CONFIGURATION_BUILD_DIR/$PRODUCT_NAME.app $CONFIGURATION_BUILD_DIR/Payload #Еще важная деталь - создаем иконку приложения #Здесь указываем путь к ней /bin/cp Resources/images/icon.png $CONFIGURATION_BUILD_DIR/iTunesArtwork cd $CONFIGURATION_BUILD_DIR # Пакуем все в IPA файл. /usr/bin/zip -r $PRODUCT_NAME.ipa Payload iTunesArtwork [/sourcecode]
После сборки IPA target’a в папке проекта в build директории будет создан IPA файл.
Этот IPA файл + Provisioning Profile можно спокойно отдавать людям, которые они перетянут в iTunes, и уже через iTunes закачают приложение в iPhone.
ВАЖНО: Сборка IPA target’a должна осуществляться на Device а не на iPhone Simulator. То есть при сборке в Active SDK указываем Device а не Simulator.
Вот и все ;) Надеюсь, кому-то это поможет.








Alex
в 15:41, 25.08.2009А какие преимущества у этого подхода перед обычным Ad-Hoc распространением?
Фдуч
в 15:55, 25.08.2009Я однажды в коде своего приложения добавил строку, которая вызывала его падение. Потом сделал АдХок билд в двух вариантах: 1) просто app-файл и 2) ipa-файл. Затем каждый файл я установил на девайс, запустил и скопировал крешлог на компьютер.
Крешлог, полученный после запуска ipa-файла не удалось символизировать с помощью утилиты symbolicatecrash. А вот с крешлогом от app-файла проблем не было. Для обоих использовался один и тот же dSYM-файл.
Подскажите, пожалуйста, действительно ли iTunes при установке приложения на айфон может изменить его идентификатор каким-либо образом в зависимости от способа упаковки? Или я что-то напутал?
Kilew
в 15:56, 25.08.2009В принципе – это одно и то же. Вот только для Ad-Hoc распространения нужно быть Team Agent’ом, насколько я правильно понимаю. А так – можно быть просто Admin’ом в iPhone Developer Program.
А так – один к одному. Технически – это Ad-Hoc.
Kilew
в 16:15, 25.08.2009Честно говоря, как-то не доводилось пользоваться symbolicatecrash ;)
Так что, в этом я не помощник, можно попробовать спросить в
http://groups.google.com/group/iphonedevcampua
Люди там добрые, может погут чем
Фдуч
в 16:30, 27.08.2009Ок, спасибо за ответ.
Леша
в 13:05, 23.10.2009Спасибо большое за информацию, на всякий случай кто не знает – если у вас в используемом пути есть пробелы – берем все переменные с такими путями в скобки “$…”.
Павел Тайкало
в 16:19, 23.10.2009Насколько я помню – у меня не получалось брать переменные в “скобки” – тогда переменные не обрабатывались. т.е получатся путь что-то вроде /User/bla-lba/$APPLICATION_NAME т.е. нужные значения не подставлялись
Леша
в 17:03, 23.10.2009Вот строка из моего скрипта:
/bin/mkdir “$CONFIGURATION_BUILD_DIR/Payload”
Переменная CONFIGURATION_BUILD_DIR как раз и содержит путь с пробелами, все работает :) .
Леша
в 15:48, 04.11.2009Недавно столкнулся с проблемой, при установке созданного ipa файла у заказчика вылезла ошибка – “The app was not installed because an unknown error occured, 0xE8008017″, погуглив нашел и источник проблемы и решение. Где-то в каком-то названии файла рисунка вкрался какой-то некошерный символ, искать его мне достаточно долго-бы пришлось. Решение: использовать такой же способ упаковки как через Finder, для этого вместо zip – берем ditto, а посколькоку он берет содержимое директории которую мы ему указываем, то нужно Payload переместить в еще одну директорию, например под названием Package. Соответственно нужно добавить вначале скрипта строку:
/bin/mkdir “$CONFIGURATION_BUILD_DIR/Package”
/bin/mkdir “$CONFIGURATION_BUILD_DIR/Package/Payload”
и позаменять ниже упопоминание Payload на Package/Payload.
А вместо /usr/bin/zip -r пишем /usr/bin/ditto -c -k –sequesterRsrc .