Как стать автором
Обновить

Комментарии 16

НЛО прилетело и опубликовало эту надпись здесь
Не пробовал. Не было необходимости в такой сложной штуке.
Тема одна, а подходы разные. Напрямую править Info.plist очень неудобно и оставляет репозиторий в грязном состоянии.
НЛО прилетело и опубликовало эту надпись здесь
+1. Я тоже пользуюсь git describe. Хорошо читаемые версии получаются. И можно между делом наблюдать сколько коммитов с последнего релиза была. Кроме этого сохраняю текущую версию в имени основного потока, чтобы в крэш-логе сразу было видно в какой версии это случилось.

// выполняем 1 раз в application:didFinishLaunchingWithOptions:
NSString *ver = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleVersion"];
[[NSThread mainThread] setName:ver];
const char *name = [ver UTF8String];
if (name)
    pthread_setname_np(name);
А какую часть git describe используете в качестве CFBundleVersion? Если полностью, то это не тот формат, который ожидает Apple. А если частично, то как потом находите нужный коммит?
Про NSThread очень интересно, спасибо!
Вот такой скрипт выполняется при каждой сборке:
git=/usr/local/bin/git
touch *.plist
version=`$git describe`
version=`echo $version | sed 's/[a-zA-Z]*//'`
versionNum=`echo $version | sed 's/\-[0-9]*\-[a-zA-Z0-9]*//'`
echo "#define GIT_VERSION $version" > InfoPlist.h
echo "#define APP_VERSION $versionNum" >> InfoPlist.h

и далее в plist-e:
	<key>CFBundleVersion</key>
	<string>GIT_VERSION</string>
	<key>CFBundleShortVersionString</key>
	<string>APP_VERSION</string>
Вижу, что используете полностью строку вместе с хэшэм. Я предпочитаю придерживаться документации:
CFBundleVersion (String — iOS, OS X). The string should only contain numeric (0-9) and period (.) characters

CFBundleVersion — во время разработки-тестирования, может быть любой, т.к. он только для разработчиков. В магазин версия уходит со свежевыставленным тэгом и там только цифры и точки, все по стандарту.
Сложно это. Я делаю вот так www.prudnikov.com/2011/10/blog-post.html. Скрипт в 4 строчки в Build Phases который использует PlistBuddy и обновляет номер билда прямо в Info.plist.
При таком подходе получается, что после каждого билда репозиторий переходит в «грязное» состояние из-за того, что Info.plist изменился.
Попробуйте этот или любой другой подход в проекте, который использует мультиплеер через Game Center.
Если сначала собрать и установить на одном устройстве, потом на другом, номер билда будет разный на каждом устрйсте и протестировать мультиплеер через Game Center не получится, потому что версия приложения должна совпадать, вплоть до номера сборки. Так получается если запускать через Cmd+R каждый раз, пол умолчанию все скрипты из Build Phase запустятся.
Почему версия будет разной? Версия, это ревизия из репозитория проекта, а она по Cmd+R не увеличивается. Скрипты да, запускаются, но версия от этого каждый раз не меняется.
Это мы, похоже, о каких-то разных «версиях» говорим.
Скрипты обычно увеличивают или изменяют CFBundleVersion, по-крайней мере у меня такой был. Этот скрипт был в Build Phases и запускался по Cmd+R каждый раз, в результате на двух девайсах получались приложения несовместимые через Game Center из-за CFBundleVersion.
Под версией я подразумеваю CFBundleVersion.
На гитхабе специально лежит тестовый проект с одним контроллером, который показывает текущую версию. Не поленитесь, попробуйте позапускать.
Если у вас был скрипт, который каждый раз увеличивает CFBundleVersion, то толку от такого скрипта ровным счетом никакого, потому что получить исходный код по номеру такой версии нереально.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации