WatchConnectivity を追加したため、起動時にアプリがクラッシュします。削除するとバグも削除されるまで、アプリを簡素化しました。
現在、この最小限のアプリは、まったく関係のないものを削除するとバグが消えるという奇妙な状態になっています。たとえば、@AppStorage
プロパティをに置き換える@State
か、修飾子の別のバリエーションを選択するか、ビューの行.fullScreenCover()
の修飾子を削除するか、ビューをビューのコンテンツに置き換えると、バグは消えます。.frame(maxWidth: .infinity, alignment: .leading)
ForEach
ForEach
ForEach
問題はある種の競合状態であると思います。なぜこれが起こるのかがわかれば、バグが再びランダムに現れる方法がないことを確認できます.
再現するには、XCode で新しい iOS アプリを作成し、内部のすべてのコードを次のように置き換えますContentView
。
import SwiftUI
import WatchConnectivity
struct ContentView: View {
@StateObject var connectivity = Connectivity()
@AppStorage("setupKey") var hasBeenSetupBefore: Bool = false
var body: some View {
let sheetBinding = Binding<ActiveSheet?>(
get: {
if !hasBeenSetupBefore {
return ActiveSheet.setup
} else {
return nil
}
},
set: { _ in }
)
Text("Hello World")
.fullScreenCover(
item: sheetBinding,
content: { _ in
WelcomeScreen()
}
)
}
enum ActiveSheet: Identifiable {
case setup, settings
var id: Int {
hashValue
}
}
}
struct WelcomeScreen: View {
var body: some View {
NavigationView {
VStack {
ForEach(features) { feature in
Text("hello")
.frame(maxWidth: .infinity, alignment: .leading)
}
}
}
}
let features = [
Feature()
]
}
struct Feature: Identifiable {
var id = UUID()
}
class Connectivity: NSObject, ObservableObject, WCSessionDelegate {
@Published var activationState = WCSessionActivationState.notActivated
override init() {
super.init()
if WCSession.isSupported() {
let session = WCSession.default
session.delegate = self
session.activate()
}
}
func session(
_ session: WCSession,
activationDidCompleteWith activationState: WCSessionActivationState,
error: Error?
) {
DispatchQueue.main.async {
self.activationState = activationState
}
}
func sessionDidBecomeInactive(_ session: WCSession) {}
func sessionDidDeactivate(_ session: WCSession) {}
func updateComplication(with data: [String: Any]) {}
func session(_ session: WCSession, didReceiveUserInfo userInfo: [String: Any] = [:]) {}
}