已添加NSPhotoLibraryUsageDescription仍崩溃?Swift3转Swift5问题咨询
老Swift升级项目相册权限崩溃问题排查
结合你描述的「读取相册功能正常、执行写入操作时崩溃、报错提示缺少NSPhotoLibraryUsageDescription但已在源文件配置」的特征,按以下优先级排查:
- 首先核对是否补全了拆分后的相册写入权限配置
iOS 14之后PhotoKit权限做了拆分:原有的NSPhotoLibraryUsageDescription仅覆盖相册读取的权限校验,你目前导入照片功能正常,就说明这个键的配置是生效的。但涉及保存内容到相册的写入操作,系统要求单独配置对应的权限描述项NSPhotoLibraryAddUsageDescription。
这里有个非常容易误导人的系统提示bug:当检测到写入权限校验失败时,系统不会精准抛出缺失NSPhotoLibraryAddUsageDescription的提示,只会笼统报「缺少NSPhotoLibraryUsageDescription」的错误,很多开发者会被误导反复检查已经配置好的读取权限键,完全想不到是写入权限的描述没加。 - 其次检查老项目迁移后的Info.plist实际构建路径
从Swift 3升级到Swift 5的过程中,Xcode版本通常会同步大幅迭代,很容易出现项目内留存多份Info.plist的问题:- 进入项目Build Settings,搜索
Info.plist File,确认当前配置指向的文件,就是你手动编辑加权限的那个文件,而不是迁移过程中遗留的旧版本Info.plist - 不要只检查项目目录下的源Info.plist文件,一定要打开DerivedData里实际构建生成的
.app包,展开查看包内的Info.plist,搜索两个相册权限键的内容,确认配置真的被打包进了应用
- 进入项目Build Settings,搜索
- 最后排查新版Xcode的默认配置覆盖问题
Xcode 13及以上版本默认开启Generate Info.plist File(对应Build Setting里的GENERATE_INFOPLIST_FILE),老项目升级时这个配置会被Xcode自动同步开启,构建阶段Xcode会自动合并生成最终的Info.plist,过程中很可能冲掉你手动在源Info.plist里添加的权限内容,导致最终打包的应用包里没有对应的权限描述。
内容的提问来源于stack exchange,提问作者Joe
相关产品推荐
相关产品推荐

