longitachi / ZLPhotoBrowser

Wechat-like image picker. Support select photos, videos, gif and livePhoto. Support edit image and crop video. 微信样式的图片选择器,支持预览/相册内拍照及录视频、拖拽/滑动选择,编辑图片/视频,支持多语言国际化等功能;
MIT License
4.72k stars 953 forks source link

Crash: 上传特定的一些 低分辨率图片时,会崩溃-> 非主线程操作 #771

Closed dennis-crypto closed 1 year ago

dennis-crypto commented 1 year ago

Issue Description

Description and Steps

1.点击选择图片 2.选中一张特殊的图片(高度很小, 比如0.01,长度正常,且低分辨率 ),直接崩溃,而且居然报非主线操作UI crash 没办法在pod 外部修复, 亲测 在对应的地方显示加上 ZLMainAsync 可修复 ··· ZLMainAsync { crash code } ··· 如下图:

截屏2022-10-12 18 36 58

Info

ZLPhotoBrowser version: e.g. 4.3.5 + 4.3.6 + 4.3.7 Device: e.g. iPhone 13 +13 pro ( 所有机型) Device version: e.g. iOS 14.0 Xcode version: e.g. Xcode 12.0

Configuration code of ZLPhotoConfiguration

  let config = ZLPhotoConfiguration.default()
  config.maxSelectCount = 1
  let picker = ZLPhotoPreviewSheet()
  picker.selectImageBlock = { [weak self] (images, assets, _) in
       // some logic
  }
picker.showPhotoLibrary(sender: self)
longitachi commented 1 year ago

你在这个方法里面第一行调试下看下崩溃的时候是不是主线程吧 private func requestSelectPhoto(viewController: UIViewController? = nil)

如果不是的话试试加上这句代码看能解决不能,如果能的话我修复下

guard Thread.isMainThread else {
    requestSelectPhoto(viewController: viewController)
    return
}
dennis-crypto commented 1 year ago

@longitachi 感谢回复

你在这个方法里面第一行调试下看下崩溃的时候是不是主线程吧
private func requestSelectPhoto(viewController: UIViewController? = nil)

崩溃的场景下,在这一行还是处在主线程的.然后执行到了 callback 的block里面才莫名切换到后台线程(而且十分奇怪的是只有某些图片会这样)

截屏2022-10-13 13 53 06
dennis-crypto commented 1 year ago

矩形 (4)

@longitachi 你可以用这张图片来调试来更准确的定位问题

longitachi commented 1 year ago

xcode14.0.1 iPhone 12 iOS 16试了下这张图片,没有出现崩溃

dennis-crypto commented 1 year ago

one 12 iOS 16 😮‍💨 那么奇怪, 我用这张图片(目前除了这张图片其他都不会出现,好巧不巧用sketch 编辑点图片来测试edge case就正好中了 🤣)测试大概率出现非主线程错误 我测试的机型有: iPhone 11 Pro iOS 15 or 16 模拟器 13 pro iOS 15

这 case 蛮极端的, 我先看firebase 监测情况, 大概率不会有用户出现 🙏 感谢跟进

截屏2022-10-14 16 40 42