过去几天我一直在尝试解决此问题,因为它阻止我将更新部署到iOS应用商店。当我尝试其中一个解决方案,我找到并构建.ipa文件,然后我去检查.plist文件,但 NSCameraUsageDescription 属性永远不会显示我试图显示的自定义消息。
我无法判断我是否做错了,因为我已经做了几乎所有我能找到解决这个问题的事情。到目前为止,我已经尝试了this solution和其他一些只是将格式更改为属性设置的方式。我还升级了cordova版本,所以我可以使用最新版本的相机插件来尝试解决这个问题。
这是我当前的Config.xml文件:(评论的部分是我尝试过的其他方法。)
<widget xmlns="http://www.w3.org/ns/widgets" xmlns:gap="http://phonegap.com/ns/1.0" id="com.devexpress.apptemplate" version="1.0" versionCode="1" xmlns:android="http://schemas.android.com/apk/res/android">
<name>ApplicationTemplate</name>
<preference name="prerendered-icon" value="true" />
<preference name="android-windowSoftInputMode" value="adjustPan" />
<preference name="SplashScreen" value="splash" />
<preference name="SplashScreenDelay" value="3000" />
<preference name="FadeSplashScreen" value="false" />
<preference name="FadeSplashScreenDuration" value="2000" />
<preference name="SplashShowOnlyFirstTime" value="false" />
<preference name="DisallowOverscroll" value="true" />
<preference name="StatusBarOverlaysWebView" value="false" />
<preference name="StatusBarBackgroundColor" value="#000000" />
<preference name="android-minSdkVersion" value="16" />
<preference name="android-targetSdkVersion" value="26" />
<preference name="android-build-tool" value="gradle" />
<preference name="iosPersistentFileLocation" value="Compatibility" />
<preference name="AndroidPersistentFileLocation" value="Compatibility" />
<preference name="AndroidExtraFilesystems" value="files,files-external,documents,sdcard,cache,cache-external,assets,root" />
<preference name='phonegap-version' value='cli-7.1.0' />
<preference name='pgb-builder-version' value='1' />
<feature name="http://api.phonegap.com/1.0/network" />
<config-file platform="android" parent="/manifest" mode="add">
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.CAMERA" />
</config-file>
<platform name="ios">
<preference name="CAMERA_USAGE_DESCRIPTION" default=" " />
<config-file target="*-Info.plist" parent="NSCameraUsageDescription">
<string>Camera is used for uploading activation photos and profile pictures.</string>
</config-file>
<preference name="PHOTOLIBRARY_USAGE_DESCRIPTION" default=" " />
<config-file target="*-Info.plist" parent="NSPhotoLibraryUsageDescription">
<string>Photo Library is used for uploading activation photos and profile pictures.</string>
</config-file>
</platform>
<!--<edit-config target="NSCameraUsageDescription" file="*-Info.plist" mode="overwrite">
<string>Camera is used for uploading activation photos and profile pictures.</string>
</edit-config>-->
<!--<platform name="ios">
<edit-config target="NSCameraUsageDescription" file="*-Info.plist" mode="merge">
<string>Camera is used for uploading activation photos and profile pictures.</string>
</edit-config>
<edit-config target="NSPhotoLibraryUsageDescription" file="Info.plist" mode="merge">
<string>Photo Library is used for uploading activation photos and profile pictures.</string>
</edit-config>
</platform>-->
<preference name="ShowSplashScreenSpinner" value="false" />
<author email="email@address.com" href="address.com">Description</author>
<gap:plugin name="cordova-plugin-camera" version="4.0.3" source="npm" />
<gap:plugin name="cordova-plugin-device" version="1.1.5" source="npm" />
<gap:plugin name="cordova-plugin-file" version="4.2.0" source="npm" />
<gap:plugin name="cordova-plugin-file-transfer" version="1.5.1" source="npm" />
<gap:plugin name="cordova-plugin-geolocation" version="2.4.2" source="npm" />
<gap:plugin name="cordova-plugin-network-information" source="npm" />
<gap:plugin name="cordova-plugin-splashscreen" version="3.2.2" onload="true" source="npm" />
<gap:plugin name="cordova-plugin-whitelist" source="npm" />
<gap:plugin name="cordova-plugin-ios-longpress-fix" version="1.1.0" source="npm" />
<gap:plugin name="cordova-plugin-statusbar" version="2.1.3" source="npm" onload="true" />
<gap:plugin name="ionic-plugin-keyboard" source="npm" />
<gap:plugin name="cordova-plugin-market" source="npm" />
<gap:plugin name="cordova-plugin-appversion" source="npm" />
<gap:plugin name="cordova.plugins.diagnostic" source="npm" />
<plugin name="uk.co.workingedge.phonegap.plugin.launchnavigator" source="npm" />
<access origin="*" />
<access origin="tel:*" launch-external="yes" />
<access origin="geo:*" launch-external="yes" />
</widget>
有人能看出我做错了什么吗?任何建议都将不胜感激。
答案 0 :(得分:0)
找到答案here。
您需要使用edit-config
中的config.xml
。
像这样:
<edit-config target="NSCameraUsageDescription" file="*-Info.plist" mode="merge">
<string>need camera access to take pictures</string>
</edit-config>
答案 1 :(得分:0)
他们在cli-7.0.1中使用config-file更改为edit-config以更好地与plugin.xml保持一致(好吧,至少这是我的理论)。
阅读有关plugin.xml的文档以获取语法(注意:它与config-file不同!):https://cordova.apache.org/docs/en/latest/plugin_ref/spec.html
答案 2 :(得分:0)
也许是晚了,但我认为值得回答,您需要从Xcode本身进行更新,并在信息文件中添加密钥为
现在检查您项目的info.plist,代码应该像在其中添加
<key>NSCameraUsageDescription</key>
<string>APPNAME requires access to your phone's camera for this PURPOSE.</string>
现在,从Xcode清理项目并重新构建,您的应用现在应该可以正常工作。
我有Xcode版本10.3,并且在此解决方案中可以很好地工作。
希望对任何人有帮助!
答案 3 :(得分:0)
以我的经验,对config.xml文件的更改仅在添加平台(或其plugin.xml包含新权限的插件)时传播。
换句话说,如果您更改了与Android或iOS相关的权限或使用说明,而在cordova build
,cordova emulate
或cordova run
之后没有出现更改,则可能需要删除并重新添加适当的平台:
cordova platform rm android; cordova platform add android
cordova platform rm ios; cordova platform add ios