Исправление ошибки «Missing Info.plist» при публикации Ionic приложения для iOS

После очередной успешной сборки приложения на Ionic, отправляемой в iTunes Connect, я неожиданно получил странное сообщение об ошибке от Apple на почку:

We have discovered one or more issues with your recent delivery for "****". To process your delivery, the following issues must be corrected:

Missing Info.plist key - This app attempts to access privacy-sensitive data without a usage description. The app's Info.plist must contain an NSCameraUsageDescription key with a string value explaining to the user how the app uses this data.

Once these issues have been corrected, you can then redeliver the corrected binary.

Regards,

After a quick search I found that in iOS 10 was a change after which all usage description Cocoa Keys which are shown when trying access privacy-sensitive data became mandatory.

Немного погуглив я обнаружил, что в iOS 10 произошло изменение, после которого все описания использования Cocoa Keys, которые отображаются при попытке доступа к конфиденциальным данным, стали обязательными.

Так, в моем случае это было не только NSCameraUsageDescription, но также в следующих письмах я получил NSPhotoLibraryUsageDescription, NSBluetoothPeripheralUsageDescription, NSLocationWhenInUseUsageDescription и NSLocationAlwaysUsageDescription.

Для устранения данной проблемы достаточно добавить edit-config опцию в Plugin.xml

<platform name="ios">
    <edit-config file="*-Info.plist" mode="merge" target="NSCameraUsageDescription">
        <string>Used to take pictures or videos if necessary</string>
    </edit-config>
    <edit-config file="*-Info.plist" mode="merge" target="NSPhotoLibraryUsageDescription">
        <string>Used to load pictures if necessary</string>
    </edit-config>
    <edit-config file="*-Info.plist" mode="merge" target="NSBluetoothPeripheralUsageDescription">
        <string>Used to communicate with beacons</string>
    </edit-config>
    <edit-config file="*-Info.plist" mode="merge" target="NSLocationWhenInUseUsageDescription">
        <string>Used to show your location on the map</string>
    </edit-config>
    <edit-config file="*-Info.plist" mode="merge" target="NSLocationAlwaysUsageDescription">
        <string>Used to trace your location</string>
    </edit-config>
</platform>

Вы так же можете посмотреть все коды developer.apple.com.

Fork me on GitHub