Разработка iPhone/iPod touch приложений: IPA файл? Запросто!

Если возникла необходимость “дать попробовать” ваше приложение заказчику/тестеру/друзьям и т.п. на этапе разработки, когда еще ничего не готово, и скачивать его из Apple Store нет возможности, и XCode у этих людей не установлен… То вы обречены Есть возможность распространения приложения через iTunes (.IPA файл). Среди большого количества людей таким образом распространить приложение не удастся (ограничение Apple на количество UUID(100 в год), привязанных к Developer-аккаунту), но для тестирования сойдет.

Для этого понадобится

  • UUID телефон(ов) пользователя(ей), на которые необходимо установить приложение
  • Provisioning profile, который включает эти UUID’ы
  • XСode

Начинаем

picture-7
Создаем новый target в ХCode. Вид target’a выбираем из Other->Shell Script Target. Особо большой разницы не будет, если выберете другой, но тогда прийдется немного больше менять. А это лишнее.

Называем target как-нибудь оригинально, например IPA.
Сразу меняем в этом target’e PRODUCT_NAME на имя основного Target’a, например IPATest. Зачем это делается? Об этом чуть попозже.

Меняем PRODUCT_NAME

Меняем PRODUCT_NAME

Добавляем зависимость от главного target'a

Делаем 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 .

Оставить комментарий