Кордова Info.plist NSCameraUsageDescription отсутствует

После недавних изменений Apple требует определенных ключей, если ваше приложение пытается получить доступ к конфиденциальным данным. Поэтому я добавил в свой файл config.xml ключ NSCameraUsageDescription:

<platform name="ios">
    <config-file parent="NSCameraUsageDescription" target="*-Info.plist">
        <string>We are using a camera to </string>
    </config-file>
</platform>

Тогда

cordova build ios --release --device

создает ipa, который, по-видимому, не имеет правильной информации в info.plist. Кажется, что я что-то пропустил.

Вопрос 1: Что мне нужно внести в config.xml для решения проблемы NSCameraUsageDescription? Вопрос 2: Можно ли использовать локализацию для этой строки?

Спасибо!

Ответ 1

НОВЫЙ ОТВЕТ:

Начиная с Cordova CLI 6.5.0 вы можете писать в info.plist напрямую, используя тег edit-config в config.xml следующим образом:

    <string>your usage message</string>
</edit-config>

Но убедитесь, что вы используете последнюю версию плагинов, или значения могут быть перезаписаны переменными плагина.

Для локализаций вы можете использовать тег resource-file и файлы InfoPlist.strings, как в этом плагине (но вам не нужен плагин, тег resource-file поддерживается из config.xml)

https://github.com/MBuchalik/cordova-plugin-ios-permissions


СТАРЫЙ ОТВЕТ:

Вы не можете писать на info.plist из config.xml с помощью тега config-file (над ним ведутся работы)

Последняя версия плагина камеры позволяет добавлять NSCameraUsageDescription при установке плагина

cordova plugin add cordova-plugin-camera --variable CAMERA_USAGE_DESCRIPTION="your usage message"

Сейчас невозможно локализовать эту строку

Ответ 2

Вот результаты моих собственных исследований:

    • Да, вы можете изменить info.plist из файла config.xml используя тег config-file, , но, вы должны использовать плагин для этого (собственная конфигурация corova) и следуйте инструкциям религиозно.
    • Однако, вероятно, лучшим вариантом является использование plugin.xml для выполнения того же самого. Подробнее об этом вы можете прочитать здесь (изменение информации plist из plugin.xml)
    • Еще один вариант, о котором упоминается @jcesarmobile - текущий плагин камеры, может поддерживать его как плагиновая камера cordova (это решение относится к плагин)

Пожалуйста, исправьте меня, если я ошибаюсь. Более подробная информация о локализации непосредственно из config.xml приветствуется.

Лично мне не нравится идея использовать настраиваемый плагин для изменения файла info.plist. Кажется, что с каждым новым плагином, который я использую, мое приложение становится все более хрупким.:)

Ответ 3

Во-первых, это работает для меня с Cli-7.1.0 после того, как яблоко отклоняет мой ipa.

1) В вашем коде, если вы используете для ex. cordova-plugin-barcodescanner и cordova-plugin-camera и cordova-plugin-ios-camera-permissions все переменные CAMERA_USAGE_DESCRIPTION, PHOTOLIBRARY_USAGE_DESCRIPTION должны иметь одинаковую строку внутри. Если один из них отличается, яблоко отклоняет ваш ipa, потому что в phonegap используется переменная по умолчанию.

EJ:

<plugin name="cordova-plugin-ios-camera-permissions" >
     <variable name="CAMERA_USAGE_DESCRIPTION" value="YOUR-PERMISSION-REQUEST" />
     <variable name="PHOTOLIBRARY_USAGE_DESCRIPTION" value="YOUR-PERMISSION-REQUEST" />
</plugin><!-- spec="1.0.3" !-->

<plugin name="cordova-plugin-camera" > 
     <variable name="CAMERA_USAGE_DESCRIPTION" value="YOUR-PERMISSION-REQUEST" />
     <variable name="PHOTOLIBRARY_USAGE_DESCRIPTION" value="YOUR-PERMISSION-REQUEST" />

<gap:plugin name="cordova-plugin-image-picker" source="npm" />
<gap:plugin name="cordova-plugin-base64-joewsh" source="npm" />   <!-- convertir a base64 los files !-->


<gap:plugin name="cordova-plugin-barcodescanner"   source="npm" spec="0.7.0" >

     <variable name="CAMERA_USAGE_DESCRIPTION" value="YOUR-PERMISSION-REQUEST" />
</gap:plugin>

2) добавьте этот код (не забудьте использовать ту же строку в переменных, как я упоминал ранее):

<platform name="ios">

     <edit-config target="NSLocationWhenInUseUsageDescription" file="*-Info.plist" mode="merge" overwrite="true">
          <string>YOUR-PERMISSION-REQUEST</string>
     </edit-config>
     <edit-config target="NSPhotoLibraryUsageDescription" file="*-Info.plist" mode="merge" overwrite="true" >
          <string>YOUR-PERMISSION-REQUEST</string>
     </edit-config>
     <edit-config target="NSCameraUsageDescription" file="*-Info.plist" mode="merge" overwrite="true">
          <string>YOUR-PERMISSION-REQUEST</string>
     </edit-config>
</platform>

Ответ 4

Вы можете вручную отредактировать файл .plist в своем проекте cordova, если хотите. Это сработало для меня, но поскольку это сгенерированный файл, я действительно переживаю в какой-то момент, когда мои изменения могут быть переписаны.

Но на помощь!

Файл .plist должен быть расположен в вашем проекте Cordova в пределах /platforms/ios/[Cordova Project Name]/[Cordova Project Name]-Info.plist. Вы также можете открыть проект в Xcode, а по левой стороне щелкните значок Magnifier, который позволит вам искать файлы в проекте. Если вы входите в info.plist, он должен вернуть результат, который показывает что-то вроде:

INFOPLIST_FILE = [Some]/[Path]/[Cordova Project Name]-Info.plist

Этот путь должен быть относительно вашей установки проекта Кордовы, поэтому поиск в вашем проекте должен привести вас к правильному файлу.

Я открыл этот файл в своем редакторе и добавил следующие строки только в первом открытии тега <dict>:

<key>NSCameraUsageDescription</key> <string>Uses camera to allow video chatting between two clients</string>

Я смог отправить и показать свою сборку и остаться в itunesconnect. В настоящее время все еще ждет обзора приложения.

Я запустил cordova prepare ios, чтобы проверить, не изменились ли мои изменения, что они не сделали, так что вы должны быть в состоянии сделать это и не беспокоиться об этом, но устали от других разработчиков, устанавливающих ваше приложение и столкнувшись с тем же вопросом. Я только что скопировал обновленный файл .plist в корень моего репо и записал его в readme.

Ответ 6

$ cordova plugin add cordova-plugin-camera --variable CAMERA_USAGE_DESCRIPTION="this app will use your camera" --variable PHOTOLIBRARY_USAGE_DESCRIPTION="this app will access to your photo library"

Вам нужно прочитать внутри. /plugins/plugin -what-ever/plugin.xml, чтобы узнать, какие имена ключей поддерживаются.

Ответ 7

Перейдите в свой проект → Откройте терминал там

и запустите эту команду

cordova plugin add cordova-plugin-camera --variable CAMERA_USAGE_DESCRIPTION="Allow the app to use your camera" --variable PHOTOLIBRARY_USAGE_DESCRIPTION="Allow the app to access your photos"

введите описание изображения здесь

Вы можете изменить значения "Разрешить приложению использовать вашу камеру" "Разрешить приложению получать доступ к вашим фотографиям" в соответствии с вашими потребностями.

Ответ 8

Для iOS 10/11 вы можете использовать cordova-plugin-ios-camera-permissions в качестве ярлыка.

Предоставляет настройки по умолчанию и четкую документацию о том, как предоставлять настраиваемые сообщения.

cordova plugin add cordova-plugin-ios-camera-permissions --save

Если вы уже настроили платформу iOS, может потребоваться удаление и повторное добавление.

$ cordova platform rm ios
$ cordova platform add ios

Ответ 9

Я искал много времени и безуспешно пытался найти много решений.

Наконец, я определил эти данные с помощью XCode на вкладке Info в строке

Privacy - Camera usage description

enter image description here

Это сэкономит мне много времени.