Кордова 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.
Ответ 5
Это решит вашу проблему (если вы используете плагин сканера штрих-кода)
Ответ 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]()
Это сэкономит мне много времени.