Почему в Xcode 13 отсутствует Info.plist

17 января 2022

Когда вы создаете новый проект SwiftUI в Xcode 13, вы можете заметить, что в нем нет файла Info.plist. Почему так происходит?

Шаблоны проектов Xcode 13

Прежде всего, это изменение затрагивает только проекты, созданные в Xcode 13. Если вы открываете проект, созданный в Xcode 12 или более ранней версии, с помощью Xcode 13, это не повлияет на Info.plist.

Проект Сториборд

Создание нового проекта под iOS с использованием Сториборда в Xcode 13 также создаст и Info.plist:

Если нажмем на info.plist, чтобы посмотреть содержимое, то вы заметите, что этот файл несколько необычный:

Он имеет только некоторые дефолтные настройки для Application Scene Manifest, где отключены мультиокна. Но где же остальные настройки?

Проект SwiftUI

Изменение будет более заметным, если вы создадите новый проект SwiftUI. Вы заметите, что файла Info.plist в навигаторе проекта (или на диске) вообще не будет:

Обратите также внимание, что шаблон SwiftUI больше не использует сториборд стартового экрана.

Что же тут происходит?

Насколько я знаю, об этом не упоминали на WWDC21, и единственная документация по этому вопросу это, похоже, примечания к выпуску Xcode 13.

Для проектов, созданных на основе нескольких шаблонов, больше не требуются файлы конфигурации, такие как права доступа и файлы Info.plist. Настройте общие поля во вкладке таргета info и создайте параметры в редакторе проекта. Эти файлы добавляются в проект при использовании дополнительных полей. (68254857)

Идея, кажется, состоит в создании полного Info.plist для таргета во время сборки проекта и создании файла проекта Info.plist только для изменений, которые вы делаете отличными от значений по умолчанию.

Изменение настроек информации

Некоторые шаблоны Xcode, такие как шаблон SwiftUI, не создают Info.plist в исходном проекте. Вы по-прежнему можете вносить изменения, используя вкладку Info для настроек таргета:

После внесения изменений Xcode добавляет в проект файл Info.plist, и он отображается в навигаторе проекта. Например, если я добавлю какие-то параметры App Transport Security во вкладке Info:

Xcode создает файл Info.plist, содержащий только эти настройки App Transport:

Затем мы можем изменить настройку в любом месте, и теоретически Xcode поддерживает синхронизацию двух наборов настроек.

Я говорю теоретически, потому что на практике могут возникнуть проблемы. Например, если я редактирую настройки Info в навигаторе проекта, Xcode не обновляет настройки на вкладке Info для таргета, чтобы отразить созданные мной изменения. Мне нужно закрыть и снова открыть проект, чтобы он обновился. Будем надеяться, что это бета-ошибка, которая будет исправлена до финального релиза (FB9397345).

Настройки сборки

Чтобы добавить путаницы замечу, что есть также некоторые настройки Info.plist, которые отображаются только в настройках сборки для таргета. В основном это настройки, которые вы меняете на вкладке General для таргета, такие как поддерживаемые ориентации и экран запуска:

Вы можете изменить эти параметры на вкладке General, вкладке Info или в настройках сборки (но они не отображаются в файле Info.plist, который вы видите в навигаторе проекта).

Раздел Packaging в настройках сборки позволяет отключить создание Xcode файла Info.plist (подробнее об этом чуть позже):

Обратная совместимость

Формат проекта Xcode 13 не имеет обратной совместимости с Xcode 12. Если вы создаете проект в Xcode 13, вы не можете открыть его с помощью Xcode 12. Apple упоминает об этом в примечаниях к выпуску:

Новые проекты, созданные с помощью Xcode 13, используют новую версию проекта. Использование новых проектов с более старой версией Xcode требует изменения версии проекта в инспекторе файлов, а также ручного переноса параметров конфигурации для Info.plist и прав доступа, которые вы теперь можете указать в параметрах сборки таргета. (77344653)

Чтобы сделать проект совместимым с Xcode 12, измените формат проекта в инспекторе файлов Xcode:

Вам также необходимо вручную вернуться к сгенерированному не Xcode файлу Info.plist, иначе при создании проекта с помощью Xcode 12 вы потеряете настройки. Копирование каждого параметра вручную с вкладки Info трудозатратно. Возможно, вам будет проще начать с дефолтного Info.plist, созданного в Xcode 12, и добавить в него любые изменения.

Наконец, отключите в Xcode 13 создание файла Info.plist в настройках сборки:

Оригинал статьи

 

 

Содержание