You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

iOS 13Pro/iPad Pro 16.3.1调用ImagePicker.launchCameraAsync时App崩溃求助

iOS/iPad端调用相机App崩溃的解决建议

针对你遇到的Android正常、iOS/iPad调用相机直接退出的问题,从权限配置、代码逻辑、兼容性三个维度给出具体修复方案:

1. 修复权限申请逻辑

你的代码仅申请了相册(CAMERA_ROLL)权限,但调用相机需要单独申请相机(CAMERA)权限,iOS上权限缺失会直接导致App崩溃。修改权限申请函数:

import * as ImagePicker from "expo-image-picker";
import * as Device from "expo-device";
import * as Permissions from 'expo-permissions';
import { Alert } from 'react-native'; // 补充Alert的导入

const askPermission = async () => {
  // 同时请求相机和相册权限
  const [cameraPerm, galleryPerm] = await Promise.all([
    Permissions.getAsync(Permissions.CAMERA),
    Permissions.getAsync(Permissions.CAMERA_ROLL)
  ]);

  let hasCameraAccess = cameraPerm.status === 'granted';
  let hasGalleryAccess = galleryPerm.status === 'granted';

  // 申请缺失的相机权限
  if (!hasCameraAccess) {
    const cameraResult = await Permissions.askAsync(Permissions.CAMERA);
    hasCameraAccess = cameraResult.status === 'granted';
  }
  // 申请缺失的相册权限(可选,若后续用到相册)
  if (!hasGalleryAccess) {
    const galleryResult = await Permissions.askAsync(Permissions.CAMERA_ROLL);
    hasGalleryAccess = galleryResult.status === 'granted';
  }

  // 相机权限是调用相机的必要条件,返回其状态
  return hasCameraAccess;
};

2. 配置iOS权限描述

iOS强制要求在infoPlist中添加权限用途说明,否则调用敏感权限时App会直接崩溃。打开你的app.json,补充以下配置:

{
  "expo": {
    "ios": {
      "infoPlist": {
        "NSCameraUsageDescription": "需要访问相机拍摄照片",
        "NSPhotoLibraryUsageDescription": "需要访问相册选择照片"
      }
    }
  }
}

3. 适配iPad的相机弹出样式

iPad上FULL_SCREEN样式存在兼容性问题,替换为适合平板的PAGE_SHEET:

let result = await method({
  mediaTypes: ImagePicker.MediaTypeOptions.Images,
  // 替换为适配iPad的弹出样式
  presentationStyle: ImagePicker.UIImagePickerPresentationStyle.PAGE_SHEET,
  allowsEditing: false,
  ...(isNotDevice && {
    allowsEditing: true,
    aspect: [4, 3],
  }),
  quality: 1,
});

4. 确保依赖版本兼容

你使用的Expo 47对应expo-image-picker的稳定版本为~14.0.2,执行以下命令对齐版本:

npm install expo-image-picker@~14.0.2 --save

5. 排查崩溃日志(若以上方案无效)

通过Xcode查看具体崩溃原因:

  • 连接iOS/iPad设备到Mac,打开Xcode
  • 点击Window > Devices and Simulators,选择你的设备
  • 点击View Device Logs,找到你的App崩溃记录,定位具体报错信息(如权限未配置、方法调用异常等)

内容的提问来源于stack exchange,提问作者Simon Pasku

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 15:05:11