Flutter项目在iOS模拟器启动后立即崩溃,报RequestDenied及“Unable to lookup in current state: Shutdown”错误
Flutter项目在iOS模拟器启动后立即崩溃,报RequestDenied及“Unable to lookup in current state: Shutdown”错误
我来帮你排查这个问题,从你描述的情况来看,核心问题出在模拟器启动应用时的权限配置或者项目文件完整性上——结合你提到的是媒体编辑类应用(需要相机、相册等多个权限),咱们一步步来解决:
1. 优先检查Info.plist的权限描述(最可能的原因)
你在Podfile里已经配置了权限宏,但iOS系统要求必须在Info.plist中添加对应的权限使用描述,否则会直接拒绝应用启动(对应你遇到的RequestDenied错误)。打开Xcode的Runner/Info.plist,切换到Source Code模式,添加以下键值对:
<!-- 相机权限 --> <key>NSCameraUsageDescription</key> <string>需要访问相机进行拍摄与视频编辑</string> <!-- 相册读取权限 --> <key>NSPhotoLibraryUsageDescription</key> <string>需要访问相册选取素材进行编辑</string> <!-- 相册写入权限(如果需要保存编辑后的内容) --> <key>NSPhotoLibraryAddUsageDescription</key> <string>需要将编辑后的内容保存到相册</string> <!-- 通知权限 --> <key>NSNotificationUsageDescription</key> <string>需要发送编辑完成的通知提醒</string> <!-- App跟踪透明度权限 --> <key>NSTrackingUsageDescription</key> <string>需要跟踪应用使用情况以优化体验</string>
添加后记得保存,然后重新构建项目。
2. 修复可能损坏的Info.plist文件
错误日志里明确提到了malformed plist file,说明你的Info.plist可能存在语法错误:
- 用Xcode打开
Runner/Info.plist,切换到Source Code模式,检查是否有未闭合的XML标签、特殊字符未转义(比如引号、&符号)。 - 也可以用终端命令验证:
如果输出plutil -lint /Users/pragneshbhaisapra/Documents/body_plus_vid_generator/ios/Runner/Info.plistOK说明没问题,否则会提示具体的错误位置。
3. 彻底重置模拟器与Xcode缓存
你已经尝试过清除模拟器内容,但可能需要更彻底的重置:
- 关闭所有模拟器窗口,打开「活动监视器」,搜索
CoreSimulator、Simulator进程,全部强制退出。 - 打开Xcode,进入
Preferences -> Locations,点击Derived Data旁的箭头,删除当前项目对应的Derived Data文件夹。 - 打开Xcode的
Window -> Devices and Simulators,删除之前的iPhone 15模拟器,重新创建一个新的iPhone 15设备(选择iOS 17.5)。
4. 验证iOS项目文件完整性
你是复制lib和assets到新项目,可能漏了iOS端的关联配置:
- 确认pubspec.yaml里的assets配置正确,比如:
运行assets: - assets/ - assets/images/flutter pub get后,在Xcode里右键Runner项目,选择Add Files to "Runner",重新添加你的assets文件夹(勾选Copy items if needed和Create groups)。 - 检查Xcode的
Runner项目中,Build Phases -> Copy Bundle Resources里是否包含你的assets文件,如果没有,手动添加。
5. 重新配置Pod依赖与签名
- 进入ios目录,删除
Podfile.lock、Pods文件夹、Runner.xcworkspace,然后运行:
确保Pod依赖是最新的,并且没有缓存冲突。pod install --repo-update - 打开Xcode的
Runner -> Signing & Capabilities,确认Automatically manage signing已勾选,Team选择你的Apple ID,Bundle Identifier没有和其他应用重复(比如不要用和旧项目完全一样的ID,避免残留冲突)。
6. 用Xcode直接调试获取详细日志
如果以上步骤都没解决,打开ios/Runner.xcworkspace,选择模拟器后点击Run按钮,查看Xcode的Console面板(View -> Debug Area -> Activate Console),这里会输出应用启动时的详细崩溃日志,比如哪个权限缺失、哪个文件加载失败,能帮你定位更具体的问题。
按照这些步骤排查下来,大概率能解决你的启动崩溃问题——媒体类应用的权限配置是最容易踩坑的点,尤其是Info.plist的缺失会直接被系统拒绝启动。
内容来源于stack exchange
相关产品推荐
相关产品推荐

