14 авг. 2009 г.

Создание *.ipa для ad-hoc дистрибуции

При сборке проекта в Xcode получается папка *.app — бандл приложения.

Тестерам значительно удобнее отдавать вместо папки, один файл — *.ipa. В отличие от *.app, он устанавливаетсч в iTunes автоматически по двойному щелчку.

Приятная мелочь — в *.ipa-файле задать картинку для отображения приложения в iTunes — так, чтобы всё было совсем уж по-взрослому.

Две вещи, на которые нужно обратить внимание:

1. Тестерам вместе с *.ipa нужно отдавать *.mobileprovision, который был сгенерирован при привязке UDID-а их iPhone к аккаунту разработчика.
2. В каждом новом билде обязательно нужно увеличивать номер версии — иначе iTunes не обновит установленное приложение.

Вот скрипт для генерации *.ipa. Удобно добавить его в проект Xcode последним шагом сборки. Скрипт заточен под мои конкретные нужды, но всё должно быть понятно без комментариев.

#!/bin/bash

VER=$1

if [ "${VER}" != "lite" -a "${VER}" != "full" ]; then
echo "bad version ${VER}, exepected 'lite' or 'full'"
exit 1
fi

RES=./res
COMMON=${RES}/common
CONCRETE=${RES}/${VER}

APP=${BUILT_PRODUCTS_DIR}/${TARGET_NAME}.app
PAYLOAD=${TEMP_FILES_DIR}/Payload
IPA=${BUILT_PRODUCTS_DIR}/${TARGET_NAME}.ipa

if [ ! -d "${APP}" ]; then
echo "output .app not found: '${APP}'"
exit 1
fi

if [ "${PLATFORM_NAME}" = "iphonesimulator" ]; then
echo "Simulator detected. Skipping .ipa generation"
exit 0
fi

rm -rf ${PAYLOAD}
mkdir -p ${PAYLOAD}/Payload
cp -Rp ${APP} ${PAYLOAD}/Payload
cp ${CONCRETE}/standard/iTunesArtwork.png ${PAYLOAD}/iTunesArtwork
ditto -c -k ${PAYLOAD} ${IPA}
rm -rf ${PAYLOAD}


Пока раскапывал этот вопрос, открыл для себя команду ditto. Если сборка идёт не под OS X, ditto можно заменить на zip — *.ipa-файл — это просто zip-архив.

4 комментария:

Анонимный комментирует...
Этот комментарий был удален администратором блога.
Jeremi комментирует...

добрый день, не могли бы вы по подробней описать как добавить скрипт в проект, чтобы он сам запускался?? и как сделать чтобы скрипт не выдавал "bad version"??
не судите строго только начал работать с xcode

Александр Гладыш комментирует...

По добавлению в проект ничего не посоветую.

Про bad version — нужно передавать скрипту аргумент, лайт-версия собирается ("lite") или же полная ("full").

Xcode 4 сам умеет делать .ipa: http://stackoverflow.com/a/5372142/6236

Jeremi комментирует...

Спасибо за помощь, но по тому мануалу не хочет работать