Pull to refresh

Comments 16

UFO just landed and posted this here
Не пробовал. Не было необходимости в такой сложной штуке.
Тема одна, а подходы разные. Напрямую править Info.plist очень неудобно и оставляет репозиторий в грязном состоянии.
UFO just landed and posted this here
+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 — во время разработки-тестирования, может быть любой, т.к. он только для разработчиков. В магазин версия уходит со свежевыставленным тэгом и там только цифры и точки, все по стандарту.
При таком подходе получается, что после каждого билда репозиторий переходит в «грязное» состояние из-за того, что Info.plist изменился.
Попробуйте этот или любой другой подход в проекте, который использует мультиплеер через Game Center.
Если сначала собрать и установить на одном устройстве, потом на другом, номер билда будет разный на каждом устрйсте и протестировать мультиплеер через Game Center не получится, потому что версия приложения должна совпадать, вплоть до номера сборки. Так получается если запускать через Cmd+R каждый раз, пол умолчанию все скрипты из Build Phase запустятся.
Почему версия будет разной? Версия, это ревизия из репозитория проекта, а она по Cmd+R не увеличивается. Скрипты да, запускаются, но версия от этого каждый раз не меняется.
Это мы, похоже, о каких-то разных «версиях» говорим.
Скрипты обычно увеличивают или изменяют CFBundleVersion, по-крайней мере у меня такой был. Этот скрипт был в Build Phases и запускался по Cmd+R каждый раз, в результате на двух девайсах получались приложения несовместимые через Game Center из-за CFBundleVersion.
Под версией я подразумеваю CFBundleVersion.
На гитхабе специально лежит тестовый проект с одним контроллером, который показывает текущую версию. Не поленитесь, попробуйте позапускать.
Если у вас был скрипт, который каждый раз увеличивает CFBundleVersion, то толку от такого скрипта ровным счетом никакого, потому что получить исходный код по номеру такой версии нереально.
Sign up to leave a comment.

Articles