2016-09-19 3 views
14

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

<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 

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

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

Спасибо!

ответ

10

НОВЫЙ ОТВЕТ:

Поскольку Кордова 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> Но убедитесь, что вы используете последнюю версию плагины или значения могут быть перезаписаны переменными плагина.

OLD ОТВЕТ:

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

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

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

Прямо сейчас это не представляется возможным локализовать эту строку

+0

Не уверен, если поддержка была удалена для этого, но я использовал тег «edit-config» для камеры плагинов cordova https://github.com/apache/cordova-plugin-camera#ios-quirks – kmanzana

+1

Да, мы отказываемся от поддержки этого, но он еще не выпущен. Это будет сделано через несколько дней в основной версии (3.0.0). Не должен влиять на вас, если вы не установите из github url вместо npm – jcesarmobile

+0

@jcesarmobile, а что касается Q2? Можно ли использовать локализацию для этой строки? –

6

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

    • Да, вы можете изменить info.plist из config.xml файл используя конфигурационный файл-тег, но вы должны использовать плагин для этого (cordova custom config) и следуйте инструкциям религиозно.
    • Однако, вероятно, лучшим вариантом является использование plugin.xml, чтобы сделать то же самое.Подробнее об этом вы можете прочитать здесь (modifying info plist from plugin.xml)
    • Другой вариант, как @jcesarmobile упоминалось - текущий плагин камера может поддерживать его как cordova plugin camera (этого решения является специфичным для плагина)
    • Да, возможно localize a string inside the info.plist file, но для этого требуется использовать xcode. Я не уверен, как локализовать строки внутри info.plist файла с помощью Кордова config.xml или plugin.xml

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

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

+0

Вы нашли способ локализовать строка из config.xml или любых других плагинов cordova? Благодаря! –

+1

@MathieuG единственный способ, который я нашел до сих пор, - использовать встроенную функцию xcode (которая в основном создает различные файлы info.plist для каждого языка). Недостаток этого подхода очевиден: если вы делаете «кордовая платформа rm ios»/«кордовая платформа add ios», вы потеряете все свои изменения. Я бы предложил локализовать Info.plist как последний шаг, когда все остальное настроено правильно ... если вы сможете найти лучший способ сделать это, пожалуйста, пинги меня! :-) –

+0

Это помогло мне и в разработке приложений ionic2, спасибо – Luckylooke

1

Вы можете вручную отредактировать файл .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.

0
$ 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, чтобы увидеть, какие ключевые имена поддерживаются.

0

Перейти к вашему проекту >> Открыть терминал там

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

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

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

2

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

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

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 !--> 


<!-- barcode la v.0.7.2 tiene problemas, ojo !--> 
<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"> 
      <stringYOUR-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>