✨ App info header on watchOS
This commit is contained in:
		
							
								
								
									
										21
									
								
								ios/WatchRunner Watch App/Assets.xcassets/Logo.imageset/Contents.json
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										21
									
								
								ios/WatchRunner Watch App/Assets.xcassets/Logo.imageset/Contents.json
									
									
									
									
										vendored
									
									
										Normal 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 | ||||
|   } | ||||
| } | ||||
							
								
								
									
										
											BIN
										
									
								
								ios/WatchRunner Watch App/Assets.xcassets/Logo.imageset/icon.png
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								ios/WatchRunner Watch App/Assets.xcassets/Logo.imageset/icon.png
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| After Width: | Height: | Size: 70 KiB | 
| @@ -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") | ||||
|             } | ||||
|   | ||||
| @@ -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)") | ||||
|   | ||||
| @@ -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) | ||||
|   | ||||
							
								
								
									
										25
									
								
								ios/WatchRunner Watch App/Views/AppInfoHeaderView.swift
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										25
									
								
								ios/WatchRunner Watch App/Views/AppInfoHeaderView.swift
									
									
									
									
									
										Normal 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)) | ||||
|                 } | ||||
|             } | ||||
|         } | ||||
|     } | ||||
| } | ||||
		Reference in New Issue
	
	Block a user