Cordova Info.отсутствует ключ plist NSCameraUsageDescription
после недавних изменений Apple требует определенных ключей, если ваше приложение пытается получить доступ к конфиденциальным данным. Поэтому я добавил ключ NSCameraUsageDescription в свою конфигурацию.xml, как это:
<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, который, по-видимому, не имеет правильной информации в информации.файл plist. Кажется, я что-то упускаю.
Вопрос 1: Что мне нужно поместить в config.xml для решения NSCameraUsageDescription проблема? Вопрос 2: Можно ли использовать локализацию для этой строки?
спасибо!
8 ответов
ОТВЕТ:
так как Cordova CLI 6.5.0 вы можете написать в info.plist
с помощью edit-config
в теге config.xml
такой:
<edit-config target="NSCameraUsageDescription" file="*-Info.plist" mode="merge">
<string>your usage message</string>
</edit-config>
Но убедитесь, что вы используете последнюю версию плагинов или значения могут быть перезаписаны переменных плагин.
для локализации вы можете использовать resource-file
tag и InfoPlist.строковые файлы, как в этом плагине (но вам не нужен плагин, тег resource-file поддерживается из конфиг.в 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"
прямо сейчас невозможно локализовать эту строку
вот результаты моих собственных исследований:
- Да, вы можете изменить информация.файл plist С config.в XML используя тег config-file,но вы должны использовать плагин для этого (cordova custom config) и следовать инструкциям неукоснительно.
- однако, вероятно, лучшим вариантом является использование плагин.в XML сделать то же самое. Подробнее об этом вы можете прочитать вот!--20-->(изменение информации plist из плагина.в XML)
- другой вариант, как упоминалось @jcesarmobile - текущий плагин камеры может поддерживать его как cordova плагин камеры (это решение специфично для плагина)
- Да, можно локализовать строку внутри информация.plist file но для этого требуется использовать xcode. Я не уверен, как локализовать строку внутри информации.plist файл с помощью Cordova config.в XML или плагин.в XML
пожалуйста, поправьте меня, если я ошибаюсь. Дополнительная информация о локализации непосредственно из config.в XML ценится.
лично мне не нравится идея использовать специальный плагин для изменения информация.файл plist. Похоже, что с каждым новым плагином, который я использую, мое приложение становится все более хрупким. :)
во-первых, это работает для меня с Cli-7.1.0 после того, как apple отвергает мой ipa.
1) в вашем коде, если вы используете для ex. cordova-плагин-barcodescanner и cordova-плагин-камера и cordova-плагин-ios-камера-разрешения все переменные CAMERA_USAGE_DESCRIPTION, PHOTOLIBRARY_USAGE_DESCRIPTION должны иметь одну и ту же строку внутри. Если один из них отличается, apple отклоняет ваш 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>
вы можете вручную отредактировать .plist файл в вашем проекте cordova, если вы хотите. Это сработало для меня, но поскольку это сгенерированный файл, я беспокоюсь, что в какой-то момент мои изменения могут быть написаны.
но на помощь!
The .файл plist должен находиться в пределах вашего проекта Cordova в пределах /platforms/ios/[Cordova Project Name]/[Cordova Project Name]-Info.plist
. Вы также можете открыть проект в Xcode и вдоль левой стороны нажмите на значок лупы, который позволит вам искать файлы в проект. Если вы войдите в info.plist
Она должна возвращать результат, который показывает что-то вроде:
INFOPLIST_FILE = [Some]/[Path]/[Cordova Project Name]-Info.plist
этот путь должен быть относительно вашей установки проекта Cordova, поэтому поиск в вашем проекте должен привести вас к правильному файлу.
Я открыл этот файл в редакторе и добавил следующие строки только внутри первого открытия <dict>
tag:
<key>NSCameraUsageDescription</key>
<string>Uses camera to allow video chatting between two clients</string>
я смог представить и иметь мою сборку показать и остаться in itunesconnect. В настоящее время еще не приложение.
я запустила cordova prepare ios
просто чтобы проверить, будут ли мои изменения написаны, чего они не сделали, поэтому похоже, что вы сможете это сделать и не беспокоиться об этом, но устанете от других разработчиков, устанавливающих ваше приложение и запускающих ту же проблему. Я только что скопировал обновленную версию .plist файл в корень моего РЕПО и отметил его в readme.
$ 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"
вам нужно прочитать внутри ./ Плагины / plugin-what-ever / плагин.xml, чтобы узнать, какие имена ключей поддерживаются.
перейдите в свой проект > > откройте терминал там
и выполнить команду
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"
вы можете продолжать изменять значения "разрешить приложению использовать камеру" "разрешить приложению доступ к вашим фотографиям" в соответствии с вашими потребностями.
для iOS 10/11, вы можете использовать cordova-плагин-ios-камера-разрешения как ярлык.
предоставляет значения по умолчанию и четкую документацию для предоставления настраиваемых сообщений.
cordova plugin add cordova-plugin-ios-camera-permissions --save
Если вы уже настроили платформу iOS, может потребоваться удаление и повторное добавление.
$ cordova platform rm ios
$ cordova platform add ios
Я искал много раз и пробовал много решений без успеха.
наконец, я определил эти данные с помощью Xcode в Info в строке
Privacy - Camera usage description
Это сэкономит мне много времени.