App info header on watchOS

This commit is contained in:
2025-10-30 21:20:41 +08:00
parent 983ae2a1fc
commit 8ba55eb1be
6 changed files with 65 additions and 23 deletions

View File

@@ -0,0 +1,21 @@
{
"images" : [
{
"filename" : "icon.png",
"idiom" : "universal",
"scale" : "1x"
},
{
"idiom" : "universal",
"scale" : "2x"
},
{
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 70 KiB

View File

@@ -22,26 +22,24 @@ struct ContentView: View {
var body: some View {
NavigationSplitView {
List(selection: $selection) {
Label("Explore", systemImage: "globe").tag(Panel.explore)
Label("Chat", systemImage: "message").tag(Panel.chat)
Label("Notifications", systemImage: "bell").tag(Panel.notifications)
Label("Account", systemImage: "person.circle").tag(Panel.account)
AppInfoHeaderView().listRowBackground(Color.clear)
Label("Explore", systemImage: "globe.fill").tag(Panel.explore)
Label("Chat", systemImage: "message.fill").tag(Panel.chat)
Label("Notifications", systemImage: "bell.fill").tag(Panel.notifications)
Label("Account", systemImage: "person.circle.fill").tag(Panel.account)
}
.listStyle(.automatic)
} detail: {
switch selection {
case .explore:
ExploreView()
.environmentObject(appState)
ExploreView().environmentObject(appState)
case .chat:
ChatView()
.environmentObject(appState)
ChatView().environmentObject(appState)
case .notifications:
NotificationView()
.environmentObject(appState)
NotificationView().environmentObject(appState)
case .account:
AccountView()
.environmentObject(appState)
AccountView().environmentObject(appState)
case .none:
Text("Select a panel")
}

View File

@@ -58,9 +58,8 @@ class ImageLoader: ObservableObject {
switch result {
case .success(let value):
self.image = Image(uiImage: value.image)
print("[watchOS] Image loaded successfully from \(value.cacheType == .none ? "network" : "cache (\(value.cacheType))").")
self.isLoading = false
case .failure(let error):
case .failure(_):
// If WebP processor fails (likely due to format), try with default processor
let defaultProcessor = DefaultImageProcessor.default
self.currentTask = KingfisherManager.shared.retrieveImage(
@@ -78,7 +77,6 @@ class ImageLoader: ObservableObject {
switch fallbackResult {
case .success(let value):
self.image = Image(uiImage: value.image)
print("[watchOS] Image loaded successfully from \(value.cacheType == .none ? "network" : "cache (\(value.cacheType))") using fallback processor.")
case .failure(let fallbackError):
self.errorMessage = fallbackError.localizedDescription
print("[watchOS] Image loading failed: \(fallbackError.localizedDescription)")

View File

@@ -380,16 +380,16 @@ class NetworkService {
print(context)
return []
} catch DecodingError.keyNotFound(let key, let context) {
print("Key '\(key)' not found:", context.debugDescription)
print("codingPath:", context.codingPath)
print("[watchOS] Message decode failed: Key '\(key)' not found:", context.debugDescription)
print("[watchOS] Message decode failed: codingPath:", context.codingPath)
return []
} catch DecodingError.valueNotFound(let value, let context) {
print("Value '\(value)' not found:", context.debugDescription)
print("codingPath:", context.codingPath)
print("[watchOS] Message decode failed: Value '\(value)' not found:", context.debugDescription)
print("[watchOS] Message decode failed: codingPath:", context.codingPath)
return []
} catch DecodingError.typeMismatch(let type, let context) {
print("Type '\(type)' mismatch:", context.debugDescription)
print("codingPath:", context.codingPath)
print("[watchOS] Message decode failed: Type '\(type)' mismatch:", context.debugDescription)
print("[watchOS] Message decode failed: codingPath:", context.codingPath)
return []
} catch {
print("error: ", error)

View File

@@ -0,0 +1,25 @@
//
// AppInfoHeader.swift
// Runner
//
// Created by LittleSheep on 2025/10/30.
//
import SwiftUI
struct AppInfoHeaderView : View {
var body: some View {
VStack(alignment: .leading) {
HStack(spacing: 12) {
Image("Logo")
.resizable()
.frame(width: 40, height: 40)
VStack(alignment: .leading) {
Text("Solian").font(.headline)
Text("for Apple Watch").font(.system(size: 11))
}
}
}
}
}