Что такое Info.plist в контексте Flutter-проекта?

Ответ

Info.plist (Information Property List) — это обязательный конфигурационный файл для iOS-приложений, включая те, что собраны через Flutter. Это XML-файл, содержащий критически важные метаданные и настройки приложения для операционной системы iOS.

В Flutter-проекте он расположен по пути: ios/Runner/Info.plist.

Основное назначение:

  • Идентификация приложения: Уникальный Bundle Identifier (CFBundleIdentifier), например com.yourapp.name.
  • Запрос разрешений: Описание для системы, зачем приложению нужен доступ к защищенным ресурсам (камера, геолокация, фото, микрофон). Без этих описаний запрос на разрешение не будет показан пользователю.
  • Объявление возможностей: Настройка фоновых режимов (UIBackgroundModes), поддержка ориентации, настройка статус-бара.

Пример добавления описания для доступа к геолокации:

<key>NSLocationWhenInUseUsageDescription</key>
<string>Приложению требуется доступ к вашей геопозиции для показа ближайших заведений на карте.</string>

Практика: При добавлении нативных плагинов (например, camera, location) часто требуется вручную добавлять соответствующие ключи и описания в Info.plist. Изменения в этом файле требуют пересборки проекта (flutter build ios).

Ответ 18+ 🔞

А, ну это же классика, ёпта! Сейчас всё разжуем. Смотри, есть такая хитрая жопа в каждом iOS-приложении — файл Info.plist. В проекте на Flutter он валяется по адресу ios/Runner/Info.plist. Без этого файла твоё приложение — просто кусок бинарного кода, который система даже запускать не захочет, доверия к нему — ноль ебать.

Если по-простому, это такая анкета для операционки. Там ты пишешь: «Я приложение Вася Пупкин, мой уникальный номер вот такой, и, кстати, мне нужна камера, потому что...». И система читает эту анкету и либо доверяет, либо нет.

Зачем он вообще нужен, этот пиздопроебибна файл?

  • Представиться системе: Прописываешь CFBundleIdentifier — это как паспортный номер приложения, например com.mycompany.superapp. Без него — никуда.
  • Выпросить доступы: Вот это самое важное! Хочешь спросить у пользователя: «Можно я посмотрю твою геолокацию?» — так ты должен сначала объяснить системе, ЗАЧЕМ. И объяснение это пишешь прямо в Info.plist. Если не напишешь — запрос просто не появится, и ты будешь сидеть и думать: «Ну почему плагин не работает, ёб твою мать?».
  • Заявить о своих талантах: Настроить, будет ли приложение работать в фоне (например, музыку играть), как оно крутится на экране и прочую ерунду.

Вот реальный пример, как выпрашивать доступ к локации:

<key>NSLocationWhenInUseUsageDescription</key>
<string>Приложению требуется доступ к вашей геопозиции для показа ближайших заведений на карте.</string>

Видишь? Ключ (<key>) — это вопрос от системы: «А на каком основании?». А строка (<string>) — это твоё оправдание, которое увидит пользователь.

Важный лайфхак на будущее: Когда ты ставишь в проект какой-нибудь нативный плагин для камеры или микрофона, почти всегда нужно лезть в этот самый Info.plist и добавлять туда ключи вручную. Документацию плагина читать обязательно, а то потом будешь охуевать, почему ничего не пашет. И да, после любых правок в этом файле проект нужно пересобрать (flutter build ios), иначе изменения не применятся. Вот такая, блядь, магия.