Ответ
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), иначе изменения не применятся. Вот такая, блядь, магия.