Проблема с описанием использования в сборках Ionic и iOS 10

Мое ионное приложение для iOS отлично работало, до сегодняшнего дня, когда я хотел создать новую сборку.

Это то, что возвращается Apple:

Уважаемый разработчик,

Мы обнаружили одну или несколько проблем с вашей недавней доставкой для "AppName". Для обработки вашей доставки необходимо устранить следующие проблемы:

Это приложение пытается получить доступ к конфиденциальным данным без описания использования. Приложение Info.plist должно содержать ключ NSPhotoLibraryUsageDescription со строковым значением, объясняющим пользователю, как приложение использует эти данные.

Это приложение пытается получить доступ к конфиденциальным данным без описания использования. Приложение Info.plist должно содержать ключ NSCameraUsageDescription со строковым значением, объясняющим пользователю, как приложение использует эти данные.

Хотя вы не обязаны исправлять следующие проблемы, мы хотели сообщить вам об этом:

Отсутствие права на уведомление Push Push - ваше приложение включает в себя API для службы Apple Push Notification, но права на aps-environment отсутствуют в подписке приложения. Чтобы решить эту проблему, убедитесь, что ваш идентификатор приложения включен для push-уведомления в Provisioning Portal. Затем подпишите свое приложение с профилем распределения, который включает права aps-environment. Это создаст правильную подпись, и вы можете повторно отправить свое приложение. Дополнительную информацию см. В разделе "Профилактика и разработка" в Руководстве по программированию локального и Push Notification. Если ваше приложение не использует службу Apple Push Notification, никаких действий не требуется. Вы можете удалить API из будущих представлений, чтобы остановить это предупреждение. Если вы используете стороннюю структуру, вам может потребоваться обратиться к разработчику за информацией об удалении API.

Это мои зависимости:

  • "ngstorage": "~0.3.10",
  • "ion-image-lazy-load": "*",
  • "ngCordova": "~0.1.24-alpha",

И я использую сканер штрих-кода в ngCordova. Итак, я сделал это: $ cordova plugin rm phonegap-plugin-barcodescanner $ cordova plugin add phonegap-plugin-barcodescanner --variable CAMERA_USAGE_DESCRIPTION="Scan QR-Codes" --save

Теперь config.xml имеет это внизу:

 <plugin name="cordova-plugin-camera" spec="~1.2.0">
        <variable name="CAMERA_USAGE_DESCRIPTION" value="description" />
        <variable name="PHOTOLIBRARY_USAGE_DESCRIPTION" value="description" />
    </plugin>
    <plugin name="phonegap-plugin-barcodescanner" spec="https://github.com/phonegap/phonegap-plugin-barcodescanner.git">
        <variable name="CAMERA_USAGE_DESCRIPTION" value="Scan QR-Codes" />
    </plugin>

Но все-таки я получаю то же электронное письмо от Apple, что у моего приложения есть одна или несколько проблем.

Ответ 1

Тем не менее, почти все плагины Cordova теперь обновлены для поддержки описания использования, чувствительного к пользователю. Например, обновите версию своего плагина штрих-кода до последней сборки (по состоянию на 7 ноября 2016 г.), где добавлена поддержка описания использования:

<plugin name="phonegap-plugin-barcodescanner" spec="~6.0.3">

Но если вы еще не нашли плагин, поддерживающий его, и вам нужно установить описание в *-Info.plist тогда ВАМ НУЖНО ОСТАНОВИТЬСЯ

Модифицировать *-Info.plist для приложений Cordova не рекомендуется, поскольку для этого потребуется сохранить это изменение, которое может быть перезаписано после процесса сборки. Так что в качестве чистой альтернативы вы должны использовать cordova-custom-config.

cordova plugin add cordova-custom-config --save

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

Хотя некоторые настройки платформы могут быть установлены через Cordova/Phonegap в config.xml, многие (особенно те, которые связаны с более новыми выпусками платформы) не могут. Одним из решений является ручное редактирование файлов конфигурации в каталоге platform/, однако это невозможно поддерживать на нескольких машинах разработки или в среде CI, где последующие операции сборки могут перезаписать ваши изменения.

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

Теперь добавьте следующее в файл config.xml блоке <platform name="ios">:

<custom-config-file parent="NSPhotoLibraryUsageDescription" platform="ios" target="*-Info.plist">
    <string>This app needs access to your Photo Library to include a screenshot with feedback foo.</string>
</custom-config-file>
<custom-config-file parent="NSCameraUsageDescription" platform="ios" target="*-Info.plist">
    <string>Allow to scan member pass</string>
</custom-config-file>

Это автоматически добавит их в ваш *-Info.plist.

Обновление 1 (23 февраля 2018 г.)

Если вы используете cordova-custom-config версии <5, замените тег custom-config-file на config-file.

https://github.com/dpa99c/cordova-custom-config#changes-in-cordova-custom-config5

Самый последний

Смотрите этот ответ для Cordova CLI> = 6:

fooobar.com/questions/279116/...

Ответ 2

Вы должны добавить NSPhotoLibraryUsageDescription и NSCameraUsageDescription в свой *.plist в xcode;

NSPhotoLibraryUsageDescription = Конфиденциальность - Библиотека фотографий Описание использования NSCameraUsageDescription = Конфиденциальность - Использование камеры Описание

Затем в значение просто добавьте описание для этих настроек конфиденциальности.

Надеюсь, поможет

Ответ 3

Я использую плагин phonegap org.apache.cordova.camera и решение, которое работает на 100%:

Все, что вам нужно сделать, это поместить значения в файл config.xml и построить с помощью телефонной завивки.

Мой config.xml:

<plugin name="org.apache.cordova.camera">
      <variable name="CAMERA_USAGE_DESCRIPTION" value="App would like to access the camera." />
      <variable name="PHOTOLIBRARY_USAGE_DESCRIPTION" value="App would like to access the library." />
  </plugin>

Ответ 4

Найденное решение: $ cordova plugin list и переустановить все плагины и прочитать их документы о том, как их установить в отношении NSPhotoLibraryUsageDescription т.д.

Ответ 5

Вы должны добавить ключ NSPhotoLibraryUsageDescription в Info.plist (в Xcode), и значение должно быть причиной того, что пользователь разрешает использование камеры (появляется в диалоговом окне подтверждения камеры запроса)

Ответ 6

Добавьте ниже в файл config.xml, и он будет работать нормально.

<gap:plugin name="cordova-plugin-media-capture" source="npm">
    <param name="CAMERA_USAGE_DESCRIPTION" value="We'd like to access your camera to let you take a photo"/>
    <param name="PHOTOLIBRARY_USAGE_DESCRIPTION" value="We'd like to access your photo library to let you pick a photo"/>
    <param name="MICROPHONE_USAGE_DESCRIPTION" value="We'd like to access your microphone to let you record an audio"/>
</gap:plugin>

Вот полный файл config.xml для PhoneGap Build. https://github.com/moodlehq/moodlemobile-phonegapbuild/blob/master/config.xml