从Xcode 15编译的小部件在iOS 16上不可用,而在iOS 15和17上可用

nle07wnf  于 2023-10-21  发布在  iOS
关注(0)|答案(1)|浏览(172)

为什么来自iOS应用程序的小部件在iOS 16上的列表中不可用,而在iOS 17和15上可用?
这就是它们在widget bundle中的定义:

import WidgetKit
import SwiftUI

@main
struct ZeroWidgetBundle: WidgetBundle {
    @WidgetBundleBuilder
    var body: some Widget {
        FirstWidgetBundle().body
        SecondWidgetBundle().body
        ThirdWidgetBundle().body
    }
}

struct FirstWidgetBundle: WidgetBundle {
    @WidgetBundleBuilder
    var body: some Widget {
        WidgetLatestNews()
        WidgetLatestVideos()
        WidgetDailyText()
        WidgetOfficialSite()
    }
}

struct SecondWidgetBundle: WidgetBundle {
    @WidgetBundleBuilder
    var body: some Widget {
        WidgetWatchtowerStudy()
        WidgetCurrentMonth()
        WidgetComing()
        if #available(iOS 16.1, *) {
            WidgetCurrentTime()
        }
    }
}

struct ThirdWidgetBundle: WidgetBundle {
    @WidgetBundleBuilder
    var body: some Widget {
        WidgetMinistry()
        if #available(iOS 17.0, *) {
            WidgetTimer()
        }
    }
}

它只对17和15有效,对16无效。17号被释放后就开始了。它以前是有效的。问题出在哪里?
这是屏幕截图,你可以看到问题。确切地说,THE EQUIPMENT代码是使用**Xcode 15.0(15A240d)**在三个设备上编译的。

苹果反馈助手:
https://feedbackassistant.apple.com/feedback/13250847

3htmauhk

3htmauhk1#

解决办法很简单。没有解释为什么Xcode编译被#available(这里是WidgetTimer)排除的代码。但工作的解决方案如下:

struct ThirdWidgetBundle: WidgetBundle {
    var body: some Widget {
        if #available(iOS 17.0, *) {
            return WidgetBundleBuilder.buildBlock(WidgetMinistry(), WidgetTimer())
        } else {
            return WidgetMinistry()
        }
    }
}

相关问题