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 плагин камеры (это решение специфично для плагина)

пожалуйста, поправьте меня, если я ошибаюсь. Дополнительная информация о локализации непосредственно из 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"

enter image description here

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


для 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

enter image description here

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