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