Xcode Widget(小组件)预览报错问题
Xcode Widget(小组件)预览报错问题

Xcode Widget(小组件)预览报错问题

问题描述

在Xcode中尝试预览Widget(小组件),发现如下报错:

PotentialCrashError: BankletWidgetExtension may have crashed
    
BankletWidgetExtension may have crashed. Check ~/Library/Logs/DiagnosticReports for any crash logs from your application.
    
==================================
    
|  [Remote] ArchivingError
|  
|  ArchivingError: imageTooLarge(size: (1024.0, 1024.0), maximumSize: (1042.8000000000002, 948.0))

经过排查发现,当隐藏背景照片代码时,Xcode不再报错:

Image("WidgetBackground")

但是这一报错也仅局限在Xcode预览中,真机上的小组件正常显示背景照片。

根据Xcode报错提示:

ArchivingError: imageTooLarge(size: (1380.0, 920.0), maximumSize: (1042.8000000000002, 948.0))

这表示Widget 使用的图片尺寸太大了,超出了 WidgetKit 支持的最大尺寸限制,从而导致了 Widget Extension 可能崩溃(PotentialCrashError)。

排查过程

因为WidgetKit支持的最大尺寸限制,我尝试使用frame缩小照片尺寸:

StaticConfiguration(kind: kind, provider: BankletWidgetProvider()) { entry in
    BankletWidgetEntryView(entry: entry)
        .containerBackground(for: .widget) {
            Image("WidgetBackground")
                .resizable()
                .scaledToFit()
                .frame(width: 100,height: 100)
        }
}

尽管我尝试将frame尺寸设置为 100 * 100,但是Xcode预览仍然报错。

因此,怀疑Widget在渲染时,会根据这个照片的原始尺寸进行缩放,如果超过限制大小,就会触发崩溃。

当我检查原图尺寸时,发现原图尺寸为1024 * 1024,确实是超过了1042.8 * 948。

因此,我尝试修改资源文件夹中的照片尺寸为1042 * 948。

重新将修改后的照片拖动到资源文件夹后,Xcode预览恢复正常。

总结

之前配置小组件时,没有遇到过这种因为原图尺寸大小导致预览报错的问题。

因此,我判断是Xcode 16.3+,也就是最新的Xcode版本(2025年5月11日,16.3+)对Widget(小组件)的图像资源更严格限制,

在 Widget 中加载的所有图像都会经过预归档(Archiving)处理;

如果图像的原始尺寸超过 Apple 内部定义的最大渲染尺寸(如 1042×948),就会导致 ArchivingError: imageTooLarge;

这些限制的目标是为了适配 StandBy 模式、iPad 桌面小组件和 macOS Sonoma 桌面小组件,统一图像处理流程;

之前版本的 Xcode 对这个问题比较宽松,只在真机运行时才会偶发崩溃,现在连预览都强制检查。

在修改图片时,未必需要强制修改为1042.8 * 948,只需要设置宽度和高度小于这个范围即可。

通过resizable()和scaledToFill()等修饰符,可以实现填充的效果。

Image(entry.background)
    .resizable()
    .scaledToFill()

如果需要修改的图片过多,可以参考《macOS批量调整图片分辨率》一文,披露修改图片的分辨率。

相关文章

macOS批量调整图片分辨率:https://fangjunyu.com/2025/01/19/macos%e6%89%b9%e9%87%8f%e8%b0%83%e6%95%b4%e5%9b%be%e7%89%87%e5%88%86%e8%be%a8%e7%8e%87/

   

如果您认为这篇文章给您带来了帮助,您可以在此通过支付宝或者微信打赏网站开发者。

欢迎加入我们的 微信交流群QQ交流群,交流更多精彩内容!
微信交流群二维码 QQ交流群二维码

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注