Автоматическое управление версиями с помощью agvtool
Xcode 11 изменил способ обработки версий.
До сих пор у меня было две цели, Dev & Prod, каждая с отдельной версией. Версия Prod будет полностью ручной, Dev будет автоматизированной:
- Во время сборки запускался скрипт, который затем извлекал теги git. Один тег будет содержать информацию о последней версии Dev. Если он новее, он обновит версию внутри Info.plist только для цели Dev.
- Когда Dev будет развернут с использованием сценария (создать ipa, отказаться от внутреннего распространения, загрузить), версия сборки будет увеличена. Затем будет обновлен удаленный тег, содержащий информацию о версии.
Таким образом, каждая версия для разработчиков будет автоматически синхронизироваться, и управление несколькими сборками для разработчиков станет проще. Prod будет обновляться относительно нечасто, поэтому им можно будет управлять вручную.
Однако в Xcode 11, когда версия (или сборка) обновляется на вкладке "Общие", записи в Info.plist
заменены на $(CURRENT_PROJECT_VERSION)
а также $(MARKETING_VERSION)
а также Current Project Version
а также Marketing Version
вместо этого используется вкладка настроек сборки.
Пока я бы использовал PlistBuddy
чтобы читать и обновлять версии внутри Info.plist
, но из того, что теперь понимаю, мне пришлось бы использовать agvtool
. Однако есть две проблемы:
- Если он выполняется как фаза запуска сценария, это приводит к отмене процесса сборки
- Он не может обрабатывать отдельные версии для двух целей (поэтому я не могу просто автоматически управлять Dev, оставляя Prod в покое)
Я знаю, что теоретически все еще могу использовать Info.plist
для управления версиями, но в тот момент, когда кто-то изменит версию вручную на вкладке "Общие", все будет испорчено (по опыту я знаю, что это произойдет).
У меня два вопроса:
- Правильно ли я понимаю процесс?
- Может по-прежнему иметь систему управления версиями, использующую
agvtool
похоже на то, что у меня было раньше?