Windows环境下Cordova iOS App调用cordova-plugin-camera崩溃求助
嘿,我帮你捋捋这个相机崩溃的问题——结合你用的iOS 11.3、旧版cordova-plugin-camera,还有PhoneGap云构建的场景,大概率是隐私权限配置不全或者插件版本兼容性的锅,给你几个针对性的修复方案:
1. 补全隐私权限描述,别偷懒!
iOS 10之后对隐私权限的要求特别严,你的PHOTOLIBRARY_USAGE_DESCRIPTION看起来没写完,而且iOS 11还新增了PHOTOLIBRARY_ADD_USAGE_DESCRIPTION(如果你的App需要存图到相册的话)。赶紧把config.xml里的插件配置补全:
<plugin name="cordova-plugin-camera" spec="~2.1.1"> <variable name="CAMERA_USAGE_DESCRIPTION" value="App需要访问您的相机来拍摄照片" /> <variable name="PHOTOLIBRARY_USAGE_DESCRIPTION" value="App需要访问您的相册来选择照片" /> <variable name="PHOTOLIBRARY_ADD_USAGE_DESCRIPTION" value="App需要访问您的相册来保存照片" /> </plugin>
划重点:描述要直白清晰,别写得模棱两可,不然iOS可能直接拒绝授权甚至崩给你看
2. 升级相机插件到兼容iOS 11的版本
你用的2.1.1是2016年的老古董了,对iOS 11的适配根本没做好。建议直接升级到4.1.0以上的稳定版(这个版本开始全面适配iOS 10+),修改config.xml里的spec就行:
<plugin name="cordova-plugin-camera" spec="^4.1.0"> <!-- 上面的权限变量保持不变 --> </plugin>
改完记得重新提交到PhoneGap云构建,让它拉取最新的插件代码。
3. 给相机调用代码加上错误处理
有时候崩溃不是插件的问题,是你的jQuery代码没处理回调错误——比如用户拒绝权限后,你没捕获异常,直接导致App崩了。赶紧检查下你的相机调用代码,确保有完整的错误处理:
navigator.camera.getPicture(onSuccess, onFail, { quality: 50, destinationType: Camera.DestinationType.DATA_URL }); function onSuccess(imageData) { var image = document.getElementById('myImage'); image.src = "data:image/jpeg;base64," + imageData; } function onFail(message) { alert('获取图片失败: ' + message); // 这里可以加更多逻辑,比如引导用户去设置里开权限 }
一定要把onFail回调用上,别让未处理的异常乱跑!
4. 检查PhoneGap云构建的环境设置
PhoneGap云构建的iOS环境要对应正确的SDK版本,确保你构建时选了支持iOS 11.3的SDK(一般云平台默认支持,但可以去构建设置里确认下)。另外,把App的iOS Deployment Target设为11.0或更低,避免版本不兼容。
要是以上步骤都试了还是崩,建议你去看PhoneGap云构建的日志,里面有具体的崩溃堆栈信息,能帮你精准定位问题。
内容的提问来源于stack exchange,提问作者mr debug

