From 630ab8e4672635349b2bdb63112433f3d6e54cd9 Mon Sep 17 00:00:00 2001 From: "sameerasw.com" Date: Sat, 11 Apr 2026 03:21:30 +0530 Subject: [PATCH 1/7] Update appcast.xml --- appcast.xml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/appcast.xml b/appcast.xml index 7d37b3d8..c05cb00a 100644 --- a/appcast.xml +++ b/appcast.xml @@ -3,12 +3,12 @@ AirSync - 3.0.0 - Sat, 14 Mar 2026 21:31:01 +0530 - 25 - 3.0.0 + 3.1.0 + Sat, 11 Apr 2026 02:32:57 +0530 + 26 + 3.1.0 14.5 - + From 62ca8964e0226fe5089f99191bb5fb2ff28fbb76 Mon Sep 17 00:00:00 2001 From: "sameerasw.com" Date: Wed, 22 Apr 2026 23:16:10 +0530 Subject: [PATCH 2/7] Update appcast.xml --- appcast.xml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/appcast.xml b/appcast.xml index c05cb00a..5fac5341 100644 --- a/appcast.xml +++ b/appcast.xml @@ -3,12 +3,12 @@ AirSync - 3.1.0 - Sat, 11 Apr 2026 02:32:57 +0530 - 26 - 3.1.0 + 3.1.1 + Wed, 22 Apr 2026 23:12:22 +0530 + 27 + 3.1.1 14.5 - + From a6de36956d087eabc4409ec9a10a053362940735 Mon Sep 17 00:00:00 2001 From: "sameerasw.com" Date: Sat, 9 May 2026 19:23:56 +0530 Subject: [PATCH 3/7] Update appcast.xml --- appcast.xml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/appcast.xml b/appcast.xml index 5fac5341..4d9f0d22 100644 --- a/appcast.xml +++ b/appcast.xml @@ -3,12 +3,12 @@ AirSync - 3.1.1 - Wed, 22 Apr 2026 23:12:22 +0530 - 27 - 3.1.1 + 3.2.0 + Sat, 09 May 2026 14:14:48 +0530 + 28 + 3.2.0 14.5 - + From 57ad673f70020c168aee5e9e68822ec25794e37a Mon Sep 17 00:00:00 2001 From: "sameerasw.com" Date: Sun, 31 May 2026 23:57:00 +0530 Subject: [PATCH 4/7] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 04ddb05a..f61190a5 100644 --- a/README.md +++ b/README.md @@ -12,7 +12,7 @@ ## Requirements - Min : macOS 14.5 -- Opt: scrcpy, adb & media-control brew installs +- Opt: scrcpy, adb & media-control installed from brew > For Windows? I don't build for that platform but check this cool project out at [shrimqy/Sefirah](https://github.com/shrimqy/Sefirah) From 6c83d96ec24257201c5a443551a40c346ea86c5f Mon Sep 17 00:00:00 2001 From: DinanathDash Date: Mon, 22 Jun 2026 19:14:09 +0530 Subject: [PATCH 5/7] feat: add cellular network status to menubar and update build script and dependencies --- .gitignore | 3 +- AirSync.xcodeproj/project.pbxproj | 13 +- .../xcshareddata/swiftpm/Package.resolved | 14 +- airsync-mac/Core/AppState.swift | 8 + airsync-mac/Core/MenuBarManager.swift | 195 ++++++++++-------- .../WebSocket/WebSocketServer+Handlers.swift | 5 +- airsync-mac/Localization/en.json | 2 + airsync-mac/Model/DeviceStatus.swift | 1 + .../PhoneView/DeviceStatusView.swift | 28 ++- .../Settings/MenubarSettingsView.swift | 8 + build_and_install.sh | 24 +++ 11 files changed, 194 insertions(+), 107 deletions(-) create mode 100755 build_and_install.sh diff --git a/.gitignore b/.gitignore index ef1803f1..5a5bf9b1 100644 --- a/.gitignore +++ b/.gitignore @@ -75,4 +75,5 @@ AGENTS.md .tend-stack docs/plans/ build.log -*.trace \ No newline at end of file +*.trace +build/ \ No newline at end of file diff --git a/AirSync.xcodeproj/project.pbxproj b/AirSync.xcodeproj/project.pbxproj index 52485a9f..f597a22a 100644 --- a/AirSync.xcodeproj/project.pbxproj +++ b/AirSync.xcodeproj/project.pbxproj @@ -185,7 +185,6 @@ buildActionMask = 2147483647; files = ( B9E423832FBD914900526D40 /* scrcpy-server in Resources */, - B99B04C62F641E1400FF3E2D /* AppIcon.icon in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -269,16 +268,16 @@ baseConfigurationReferenceAnchor = B9673B592E35A2A1006D284A /* airsync-mac */; baseConfigurationReferenceRelativePath = Configs/SelfCompiled.xcconfig; buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; ASSETCATALOG_COMPILER_INCLUDE_ALL_APPICON_ASSETS = NO; AUTOMATION_APPLE_EVENTS = NO; CODE_SIGN_ENTITLEMENTS = ""; + "CODE_SIGN_IDENTITY[sdk=macosx*]" = "Apple Development"; CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; CURRENT_PROJECT_VERSION = 29; DEAD_CODE_STRIPPING = YES; - DEVELOPMENT_TEAM = WCB4HTANA6; + DEVELOPMENT_TEAM = 52WCJ39DLM; ENABLE_APP_SANDBOX = NO; ENABLE_HARDENED_RUNTIME = YES; ENABLE_PREVIEWS = YES; @@ -449,16 +448,16 @@ baseConfigurationReferenceAnchor = B9673B592E35A2A1006D284A /* airsync-mac */; baseConfigurationReferenceRelativePath = Configs/Shared.xcconfig; buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; ASSETCATALOG_COMPILER_INCLUDE_ALL_APPICON_ASSETS = NO; AUTOMATION_APPLE_EVENTS = NO; CODE_SIGN_ENTITLEMENTS = ""; + "CODE_SIGN_IDENTITY[sdk=macosx*]" = "Apple Development"; CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; CURRENT_PROJECT_VERSION = 29; DEAD_CODE_STRIPPING = YES; - DEVELOPMENT_TEAM = WCB4HTANA6; + DEVELOPMENT_TEAM = 52WCJ39DLM; ENABLE_APP_SANDBOX = NO; ENABLE_HARDENED_RUNTIME = YES; ENABLE_PREVIEWS = YES; @@ -501,16 +500,16 @@ baseConfigurationReferenceAnchor = B9673B592E35A2A1006D284A /* airsync-mac */; baseConfigurationReferenceRelativePath = Configs/Shared.xcconfig; buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; ASSETCATALOG_COMPILER_INCLUDE_ALL_APPICON_ASSETS = NO; AUTOMATION_APPLE_EVENTS = NO; CODE_SIGN_ENTITLEMENTS = ""; + "CODE_SIGN_IDENTITY[sdk=macosx*]" = "Apple Development"; CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; CURRENT_PROJECT_VERSION = 29; DEAD_CODE_STRIPPING = YES; - DEVELOPMENT_TEAM = WCB4HTANA6; + DEVELOPMENT_TEAM = 52WCJ39DLM; ENABLE_APP_SANDBOX = NO; ENABLE_HARDENED_RUNTIME = YES; ENABLE_PREVIEWS = YES; diff --git a/AirSync.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved b/AirSync.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved index 5fca7086..bd8459b1 100644 --- a/AirSync.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved +++ b/AirSync.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved @@ -1,5 +1,5 @@ { - "originHash" : "c25f5f954fa374a1822ee23320d599862b08b1cd7a6d553c23b2e1e2785961bc", + "originHash" : "41897de538730832eed4fc72535da663981e93fdb2fdbbab62ad0984e1f42078", "pins" : [ { "identity" : "asn1", @@ -38,12 +38,12 @@ } }, { - "identity" : "lottie-spm", + "identity" : "lottie-ios", "kind" : "remoteSourceControl", - "location" : "https://github.com/airbnb/lottie-spm.git", + "location" : "https://github.com/airbnb/lottie-ios.git", "state" : { - "revision" : "04f2fd18cc9404a0a0917265a449002674f24ec9", - "version" : "4.5.2" + "revision" : "b4bd0604ded9574807f41b4004b57dd1226a30a4", + "version" : "3.5.0" } }, { @@ -51,8 +51,8 @@ "kind" : "remoteSourceControl", "location" : "https://github.com/tfmart/LottieUI", "state" : { - "revision" : "dd5b2f16213f89ab996a55fc2f51b56236da4bbe", - "version" : "1.3.3" + "revision" : "06cf691c4d1175c4fc9b9ddbf1472139107cd5a4", + "version" : "1.3.1" } }, { diff --git a/airsync-mac/Core/AppState.swift b/airsync-mac/Core/AppState.swift index 14efcea1..e92c09c2 100644 --- a/airsync-mac/Core/AppState.swift +++ b/airsync-mac/Core/AppState.swift @@ -55,6 +55,7 @@ class AppState: ObservableObject { self.menubarTextMaxLength = (savedMaxLength >= 50) ? savedMaxLength : 150 self.showMenubarIcon = UserDefaults.standard.object(forKey: "showMenubarIcon") == nil ? true : UserDefaults.standard.bool(forKey: "showMenubarIcon") + self.showMenubarNetworkStatus = UserDefaults.standard.object(forKey: "showMenubarNetworkStatus") == nil ? true : UserDefaults.standard.bool(forKey: "showMenubarNetworkStatus") self.menubarBatteryStyle = UserDefaults.standard.string(forKey: "menubarBatteryStyle") ?? "both" self.showMenubarMusicIcon = UserDefaults.standard.object(forKey: "showMenubarMusicIcon") == nil ? true : UserDefaults.standard.bool(forKey: "showMenubarMusicIcon") self.showMenubarAlbumArt = UserDefaults.standard.object(forKey: "showMenubarAlbumArt") == nil ? true : UserDefaults.standard.bool(forKey: "showMenubarAlbumArt") @@ -290,6 +291,7 @@ class AppState: ObservableObject { @Published var status: DeviceStatus? = nil { didSet { syncMediaTimerToPlayState() } } + @Published var cellularNetwork: String? = nil @Published var myDevice: Device? = nil @Published var port: UInt16 = Defaults.serverPort @Published var androidApps: [String: AndroidApp] = [:] @@ -423,6 +425,12 @@ class AppState: ObservableObject { } } + @Published var showMenubarNetworkStatus: Bool { + didSet { + UserDefaults.standard.set(showMenubarNetworkStatus, forKey: "showMenubarNetworkStatus") + } + } + @Published var menubarBatteryStyle: String { didSet { UserDefaults.standard.set(menubarBatteryStyle, forKey: "menubarBatteryStyle") diff --git a/airsync-mac/Core/MenuBarManager.swift b/airsync-mac/Core/MenuBarManager.swift index 894f2e8d..51305a83 100644 --- a/airsync-mac/Core/MenuBarManager.swift +++ b/airsync-mac/Core/MenuBarManager.swift @@ -105,6 +105,8 @@ class MenuBarManager: NSObject { appState.$temporaryDragLabel.map { _ in () }.eraseToAnyPublisher(), appState.$showMenubarPillStroke.map { _ in () }.eraseToAnyPublisher(), appState.$menubarNotificationStyle.map { _ in () }.eraseToAnyPublisher(), + appState.$showMenubarNetworkStatus.map { _ in () }.eraseToAnyPublisher(), + appState.$cellularNetwork.map { _ in () }.eraseToAnyPublisher(), BLECentralManager.shared.$connectionStatus.map { _ in () }.eraseToAnyPublisher(), BLECentralManager.shared.$connectedDeviceName.map { _ in () }.eraseToAnyPublisher() ] @@ -345,73 +347,79 @@ struct MenubarStatusView: View { .frame(maxWidth: CGFloat(appState.menubarTextMaxLength), alignment: .leading) } } else { - HStack(spacing: 5) { - // Left part: Device Name or Music Info - let showMusic = appState.showMenubarMusicIcon && (appState.status?.music?.isPlaying ?? false) - - if appState.showMenubarCallDetails, let callEvent = appState.activeCall { - HStack(spacing: 4) { - if let photoString = callEvent.contactPhoto, - !photoString.isEmpty, - let data = Data(base64Encoded: photoString, options: .ignoreUnknownCharacters) ?? Data(base64Encoded: photoString), - let nsImage = NSImage(data: data) { - let avatarSize = appState.menubarFontSize + 2 - Image(nsImage: nsImage) - .resizable() - .aspectRatio(contentMode: .fill) - .frame(width: avatarSize, height: avatarSize) - .clipShape(Circle()) - } else { - Image(systemName: callEvent.direction == .incoming ? "phone.arrow.down.left.fill" : "phone.arrow.up.right.fill") - .font(.system(size: appState.menubarFontSize)) - .foregroundColor(.green) - } - - Text(callEvent.contactName) - .font(.system(size: appState.menubarFontSize, weight: .medium)) - .lineLimit(1) - - Text("•") - .font(.system(size: appState.menubarFontSize)) - .foregroundColor(.secondary) - - Text(formatCallDuration(seconds: appState.activeCallDurationSec)) - .font(.system(size: appState.menubarFontSize, design: .monospaced)) - .layoutPriority(1) - } - } else if showMusic, let music = appState.status?.music { - let musicText = "\(music.title) — \(music.artist)" - - HStack(spacing: 3) { - if appState.showMenubarAlbumArt, - !music.albumArt.isEmpty, - let data = Data(base64Encoded: music.albumArt.stripBase64Prefix()) ?? Data(base64Encoded: music.albumArt), - let nsImage = NSImage(data: data) { - let albumArtSize = appState.menubarFontSize + 2 - let cornerRadius = albumArtSize * 3 / 14 - Image(nsImage: nsImage) - .resizable() - .aspectRatio(contentMode: .fill) - .frame(width: albumArtSize, height: albumArtSize) - .clipShape(RoundedRectangle(cornerRadius: cornerRadius)) - } else { - Image(systemName: "music.note") + let showMusic = appState.showMenubarMusicIcon && (appState.status?.music?.isPlaying ?? false) + let hasDeviceName = !(appState.device?.name ?? bleManager.connectedDeviceName ?? "").isEmpty + let showLeftPart = (appState.showMenubarCallDetails && appState.activeCall != nil) || showMusic || (appState.showMenubarDeviceName && hasDeviceName) + + let showNetwork = appState.showMenubarNetworkStatus && appState.cellularNetwork != nil + let showBattery = appState.status?.battery != nil && appState.menubarBatteryStyle != "none" + let showRightPart = showNetwork || showBattery + + if showLeftPart || showRightPart { + HStack(spacing: 5) { + // Left part: Device Name or Music Info + if appState.showMenubarCallDetails, let callEvent = appState.activeCall { + HStack(spacing: 4) { + if let photoString = callEvent.contactPhoto, + !photoString.isEmpty, + let data = Data(base64Encoded: photoString, options: .ignoreUnknownCharacters) ?? Data(base64Encoded: photoString), + let nsImage = NSImage(data: data) { + let avatarSize = appState.menubarFontSize + 2 + Image(nsImage: nsImage) + .resizable() + .aspectRatio(contentMode: .fill) + .frame(width: avatarSize, height: avatarSize) + .clipShape(Circle()) + } else { + Image(systemName: callEvent.direction == .incoming ? "phone.arrow.down.left.fill" : "phone.arrow.up.right.fill") + .font(.system(size: appState.menubarFontSize)) + .foregroundColor(.green) + } + + Text(callEvent.contactName) + .font(.system(size: appState.menubarFontSize, weight: .medium)) + .lineLimit(1) + + Text("•") .font(.system(size: appState.menubarFontSize)) - .foregroundColor(.accentColor) + .foregroundColor(.secondary) + + Text(formatCallDuration(seconds: appState.activeCallDurationSec)) + .font(.system(size: appState.menubarFontSize, design: .monospaced)) + .layoutPriority(1) } + } else if showMusic, let music = appState.status?.music { + let musicText = "\(music.title) — \(music.artist)" - if appState.enableMarquee { - MarqueeText(text: musicText, fontSize: appState.menubarFontSize, containerWidth: CGFloat(appState.menubarTextMaxLength)) - } else { - Text(musicText) - .font(.system(size: appState.menubarFontSize)) - .lineLimit(1) - .frame(maxWidth: CGFloat(appState.menubarTextMaxLength), alignment: .leading) + HStack(spacing: 3) { + if appState.showMenubarAlbumArt, + !music.albumArt.isEmpty, + let data = Data(base64Encoded: music.albumArt.stripBase64Prefix()) ?? Data(base64Encoded: music.albumArt), + let nsImage = NSImage(data: data) { + let albumArtSize = appState.menubarFontSize + 2 + let cornerRadius = albumArtSize * 3 / 14 + Image(nsImage: nsImage) + .resizable() + .aspectRatio(contentMode: .fill) + .frame(width: albumArtSize, height: albumArtSize) + .clipShape(RoundedRectangle(cornerRadius: cornerRadius)) + } else { + Image(systemName: "music.note") + .font(.system(size: appState.menubarFontSize)) + .foregroundColor(.accentColor) + } + + if appState.enableMarquee { + MarqueeText(text: musicText, fontSize: appState.menubarFontSize, containerWidth: CGFloat(appState.menubarTextMaxLength)) + } else { + Text(musicText) + .font(.system(size: appState.menubarFontSize)) + .lineLimit(1) + .frame(maxWidth: CGFloat(appState.menubarTextMaxLength), alignment: .leading) + } } - } - } else if appState.showMenubarDeviceName { - let deviceName = appState.device?.name ?? (bleManager.isAuthenticated ? bleManager.connectedDeviceName : nil) ?? "" - if !deviceName.isEmpty { + } else if appState.showMenubarDeviceName && hasDeviceName { + let deviceName = appState.device?.name ?? (bleManager.isAuthenticated ? bleManager.connectedDeviceName : nil) ?? "" if appState.enableMarquee { MarqueeText(text: deviceName, fontSize: appState.menubarFontSize, fontWeight: .medium, containerWidth: CGFloat(appState.menubarTextMaxLength)) } else { @@ -421,29 +429,44 @@ struct MenubarStatusView: View { .frame(maxWidth: CGFloat(appState.menubarTextMaxLength), alignment: .leading) } } - } - - // Right part: Battery - if let battery = appState.status?.battery { - let style = appState.menubarBatteryStyle - HStack(spacing: 3) { - // Show separator if there was a prefix shown - let hasPrefix = showMusic || (appState.showMenubarDeviceName && !(appState.device?.name ?? bleManager.connectedDeviceName ?? "").isEmpty) - if hasPrefix { - Text("•") - .font(.system(size: appState.menubarFontSize)) - .foregroundColor(.secondary) - } - - if style == "icon" || style == "both" { - Image(systemName: getBatteryIconName(level: battery.level, isCharging: battery.isCharging)) - .font(.system(size: appState.menubarFontSize)) - .foregroundColor(batteryColor(level: battery.level, isCharging: battery.isCharging)) - } - - if style == "percentage" || style == "both" { - Text("\(battery.level)%") - .font(.system(size: appState.menubarFontSize - 1, design: .monospaced)) + + // Right part: Battery & Network + if showRightPart { + HStack(spacing: 3) { + // Show separator if there was a prefix shown + if showLeftPart { + Text("•") + .font(.system(size: appState.menubarFontSize)) + .foregroundColor(.secondary) + } + + if appState.showMenubarNetworkStatus, let network = appState.cellularNetwork { + if network == "NO_SIGNAL" { + Image(systemName: "antenna.radiowaves.left.and.right.slash") + .font(.system(size: appState.menubarFontSize - 1, weight: .semibold)) + .foregroundColor(.red) + .padding(.trailing, showBattery ? 2 : 0) + } else { + Text(network.replacingOccurrences(of: "_", with: " ")) + .font(.system(size: appState.menubarFontSize - 1, weight: .semibold)) + .foregroundColor(network.contains("5G") ? .green : (network == "LTE" ? .orange : .primary)) + .padding(.trailing, showBattery ? 2 : 0) + } + } + + if showBattery, let battery = appState.status?.battery { + let style = appState.menubarBatteryStyle + if style == "icon" || style == "both" { + Image(systemName: getBatteryIconName(level: battery.level, isCharging: battery.isCharging)) + .font(.system(size: appState.menubarFontSize)) + .foregroundColor(batteryColor(level: battery.level, isCharging: battery.isCharging)) + } + + if style == "percentage" || style == "both" { + Text("\(battery.level)%") + .font(.system(size: appState.menubarFontSize - 1, design: .monospaced)) + } + } } } } diff --git a/airsync-mac/Core/WebSocket/WebSocketServer+Handlers.swift b/airsync-mac/Core/WebSocket/WebSocketServer+Handlers.swift index ea5c5d33..6282289c 100644 --- a/airsync-mac/Core/WebSocket/WebSocketServer+Handlers.swift +++ b/airsync-mac/Core/WebSocket/WebSocketServer+Handlers.swift @@ -345,6 +345,7 @@ extension WebSocketServer { } let oldTitle = AppState.shared.status?.music?.title + let cellularNetwork = dict["cellularNetwork"] as? String AppState.shared.status = DeviceStatus( battery: .init(level: level, isCharging: isCharging), @@ -360,10 +361,12 @@ extension WebSocketServer { duration: durationSec, position: positionSec, isBuffering: isBuffering - ) + ), + cellularNetwork: cellularNetwork ) DispatchQueue.main.async { + AppState.shared.cellularNetwork = cellularNetwork if oldTitle != title { AppState.shared.handleTrackChange() } else { diff --git a/airsync-mac/Localization/en.json b/airsync-mac/Localization/en.json index 6e724c22..755a9150 100644 --- a/airsync-mac/Localization/en.json +++ b/airsync-mac/Localization/en.json @@ -156,6 +156,8 @@ "settings.menubar.batteryStyle.both": "Both Icon & Percentage", "settings.menubar.batteryStyle.icon": "Icon Only", "settings.menubar.batteryStyle.percentage": "Percentage Only", + "settings.menubar.batteryStyle.none": "Disable", + "settings.menubar.showNetworkStatus": "Show Network Status", "settings.menubar.notifications": "Notifications", "settings.menubar.notifications.both": "Both Count & Icons", "settings.menubar.notifications.count": "Count Only", diff --git a/airsync-mac/Model/DeviceStatus.swift b/airsync-mac/Model/DeviceStatus.swift index 38b672d6..95ec36a2 100644 --- a/airsync-mac/Model/DeviceStatus.swift +++ b/airsync-mac/Model/DeviceStatus.swift @@ -32,4 +32,5 @@ struct DeviceStatus: Codable { var battery: Battery var isPaired: Bool var music: Music? + var cellularNetwork: String? } diff --git a/airsync-mac/Screens/HomeScreen/PhoneView/DeviceStatusView.swift b/airsync-mac/Screens/HomeScreen/PhoneView/DeviceStatusView.swift index c61750cb..bf8cf44d 100644 --- a/airsync-mac/Screens/HomeScreen/PhoneView/DeviceStatusView.swift +++ b/airsync-mac/Screens/HomeScreen/PhoneView/DeviceStatusView.swift @@ -34,11 +34,29 @@ struct DeviceStatusView: View { HStack{ - Image(systemName: batteryIcon(for: batteryLevel, isCharging: batteryIsCharging)) - .help("\(batteryLevel)%") - .contentTransition(.symbolEffect) - Text("\(batteryLevel)%") - .font(.caption2) + if appState.showMenubarNetworkStatus, let network = appState.cellularNetwork { + if network == "NO_SIGNAL" { + Image(systemName: "antenna.radiowaves.left.and.right.slash") + .font(.caption2.weight(.semibold)) + .foregroundColor(.red) + } else { + Text(network.replacingOccurrences(of: "_", with: " ")) + .font(.caption2.weight(.semibold)) + .foregroundColor(network.contains("5G") ? .green : (network == "LTE" ? .orange : .primary)) + } + } + + if appState.menubarBatteryStyle != "none" { + if appState.menubarBatteryStyle == "icon" || appState.menubarBatteryStyle == "both" { + Image(systemName: batteryIcon(for: batteryLevel, isCharging: batteryIsCharging)) + .help("\(batteryLevel)%") + .contentTransition(.symbolEffect) + } + if appState.menubarBatteryStyle == "percentage" || appState.menubarBatteryStyle == "both" { + Text("\(batteryLevel)%") + .font(.caption2) + } + } } .padding(.leading, 4) diff --git a/airsync-mac/Screens/Settings/MenubarSettingsView.swift b/airsync-mac/Screens/Settings/MenubarSettingsView.swift index 6ab5b3d2..b3e61c99 100644 --- a/airsync-mac/Screens/Settings/MenubarSettingsView.swift +++ b/airsync-mac/Screens/Settings/MenubarSettingsView.swift @@ -110,6 +110,13 @@ struct MenubarSettingsView: View { Toggle("", isOn: $appState.showMenubarDeviceName) .toggleStyle(.switch) } + + HStack { + Label(L("settings.menubar.showNetworkStatus"), systemImage: "antenna.radiowaves.left.and.right") + Spacer() + Toggle("", isOn: $appState.showMenubarNetworkStatus) + .toggleStyle(.switch) + } } .disabled(!appState.showMenubarText) .opacity(appState.showMenubarText ? 1.0 : 0.6) @@ -121,6 +128,7 @@ struct MenubarSettingsView: View { Text(L("settings.menubar.batteryStyle.both")).tag("both") Text(L("settings.menubar.batteryStyle.icon")).tag("icon") Text(L("settings.menubar.batteryStyle.percentage")).tag("percentage") + Text(L("settings.menubar.batteryStyle.none")).tag("none") } .pickerStyle(MenuPickerStyle()) } diff --git a/build_and_install.sh b/build_and_install.sh new file mode 100755 index 00000000..93065abd --- /dev/null +++ b/build_and_install.sh @@ -0,0 +1,24 @@ +#!/bin/bash +set -e + +echo "Building AirSync..." +# We use the "AirSync" scheme and "Self Compiled" configuration based on your setup. +# The package resolution is handled automatically by xcodebuild when using -scheme. +xcodebuild -project AirSync.xcodeproj -scheme "AirSync" -configuration "Self Compiled" -derivedDataPath ./build + +echo "Killing existing AirSync processes..." +pkill -f "AirSync.app/Contents/MacOS/airsync-mac" || true +pkill -x "airsync-mac" || true +pkill -x "AirSync" || true +sleep 1 + +echo "Removing old AirSync from /Applications..." +rm -rf /Applications/AirSync.app + +echo "Copying new AirSync to /Applications..." +cp -R build/Build/Products/Self\ Compiled/AirSync.app /Applications/AirSync.app + +echo "Launching new AirSync app..." +open /Applications/AirSync.app + +echo "Done!" From c0a672ba5b033cd8cc72280d5c42f7f8f45d0473 Mon Sep 17 00:00:00 2001 From: DinanathDash Date: Tue, 23 Jun 2026 12:07:55 +0530 Subject: [PATCH 6/7] feat: add app icon, implement localized network status display, and update device status documentation --- AirSync.xcodeproj/project.pbxproj | 3 + DOCUMENTATION.md | 5 +- .../AppIcon.appiconset/Contents.json | 59 ++++++++++++++++++ .../AppIcon.appiconset/icon-1024.png | Bin 0 -> 87222 bytes airsync-mac/Core/MenuBarManager.swift | 6 +- airsync-mac/Localization/en.json | 5 ++ .../PhoneView/DeviceStatusView.swift | 6 +- 7 files changed, 80 insertions(+), 4 deletions(-) create mode 100644 airsync-mac/Assets.xcassets/AppIcon.appiconset/Contents.json create mode 100644 airsync-mac/Assets.xcassets/AppIcon.appiconset/icon-1024.png diff --git a/AirSync.xcodeproj/project.pbxproj b/AirSync.xcodeproj/project.pbxproj index f597a22a..4138524f 100644 --- a/AirSync.xcodeproj/project.pbxproj +++ b/AirSync.xcodeproj/project.pbxproj @@ -268,6 +268,7 @@ baseConfigurationReferenceAnchor = B9673B592E35A2A1006D284A /* airsync-mac */; baseConfigurationReferenceRelativePath = Configs/SelfCompiled.xcconfig; buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; ASSETCATALOG_COMPILER_INCLUDE_ALL_APPICON_ASSETS = NO; AUTOMATION_APPLE_EVENTS = NO; @@ -448,6 +449,7 @@ baseConfigurationReferenceAnchor = B9673B592E35A2A1006D284A /* airsync-mac */; baseConfigurationReferenceRelativePath = Configs/Shared.xcconfig; buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; ASSETCATALOG_COMPILER_INCLUDE_ALL_APPICON_ASSETS = NO; AUTOMATION_APPLE_EVENTS = NO; @@ -500,6 +502,7 @@ baseConfigurationReferenceAnchor = B9673B592E35A2A1006D284A /* airsync-mac */; baseConfigurationReferenceRelativePath = Configs/Shared.xcconfig; buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; ASSETCATALOG_COMPILER_INCLUDE_ALL_APPICON_ASSETS = NO; AUTOMATION_APPLE_EVENTS = NO; diff --git a/DOCUMENTATION.md b/DOCUMENTATION.md index f5528e98..e2625533 100644 --- a/DOCUMENTATION.md +++ b/DOCUMENTATION.md @@ -416,7 +416,7 @@ For button-only actions without reply text: **Direction:** Android → Mac -**Purpose:** Report device state: battery level, music playback status, and pairing information +**Purpose:** Report device state: battery level, music playback status, pairing information, and cellular network status ```json { @@ -435,7 +435,8 @@ For button-only actions without reply text: "isMuted": false, "albumArt": "data:image/png;base64,iVBORw0KG...", "likeStatus": "liked" - } + }, + "cellularNetwork": "5G" } } ``` diff --git a/airsync-mac/Assets.xcassets/AppIcon.appiconset/Contents.json b/airsync-mac/Assets.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 00000000..c234cd2b --- /dev/null +++ b/airsync-mac/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1,59 @@ +{ + "images" : [ + { + "idiom" : "mac", + "size" : "16x16", + "scale" : "1x" + }, + { + "idiom" : "mac", + "size" : "16x16", + "scale" : "2x" + }, + { + "idiom" : "mac", + "size" : "32x32", + "scale" : "1x" + }, + { + "idiom" : "mac", + "size" : "32x32", + "scale" : "2x" + }, + { + "idiom" : "mac", + "size" : "128x128", + "scale" : "1x" + }, + { + "idiom" : "mac", + "size" : "128x128", + "scale" : "2x" + }, + { + "idiom" : "mac", + "size" : "256x256", + "scale" : "1x" + }, + { + "idiom" : "mac", + "size" : "256x256", + "scale" : "2x" + }, + { + "idiom" : "mac", + "size" : "512x512", + "scale" : "1x" + }, + { + "idiom" : "mac", + "size" : "512x512", + "scale" : "2x", + "filename" : "icon-1024.png" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/airsync-mac/Assets.xcassets/AppIcon.appiconset/icon-1024.png b/airsync-mac/Assets.xcassets/AppIcon.appiconset/icon-1024.png new file mode 100644 index 0000000000000000000000000000000000000000..c6aa74cb7534c371a2f5e5e2a04ad019cda4206d GIT binary patch literal 87222 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 z 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 literal 0 HcmV?d00001 diff --git a/airsync-mac/Core/MenuBarManager.swift b/airsync-mac/Core/MenuBarManager.swift index 51305a83..9ebf9f7d 100644 --- a/airsync-mac/Core/MenuBarManager.swift +++ b/airsync-mac/Core/MenuBarManager.swift @@ -446,8 +446,12 @@ struct MenubarStatusView: View { .font(.system(size: appState.menubarFontSize - 1, weight: .semibold)) .foregroundColor(.red) .padding(.trailing, showBattery ? 2 : 0) + .help(Localizer.shared.text("network.no_signal")) } else { - Text(network.replacingOccurrences(of: "_", with: " ")) + let locKey = "network.\(network.lowercased())" + let locVal = Localizer.shared.text(locKey) + let displayText = locVal == locKey ? network.replacingOccurrences(of: "_", with: " ") : locVal + Text(displayText) .font(.system(size: appState.menubarFontSize - 1, weight: .semibold)) .foregroundColor(network.contains("5G") ? .green : (network == "LTE" ? .orange : .primary)) .padding(.trailing, showBattery ? 2 : 0) diff --git a/airsync-mac/Localization/en.json b/airsync-mac/Localization/en.json index 755a9150..b6601bd7 100644 --- a/airsync-mac/Localization/en.json +++ b/airsync-mac/Localization/en.json @@ -158,6 +158,11 @@ "settings.menubar.batteryStyle.percentage": "Percentage Only", "settings.menubar.batteryStyle.none": "Disable", "settings.menubar.showNetworkStatus": "Show Network Status", + "network.no_signal": "No Signal", + "network.no_service": "No Service", + "network.emergency_only": "Emergency Only", + "network.wifi_calling": "Wi-Fi Calling", + "network.cellular_data_sync": "Cellular Data Sync", "settings.menubar.notifications": "Notifications", "settings.menubar.notifications.both": "Both Count & Icons", "settings.menubar.notifications.count": "Count Only", diff --git a/airsync-mac/Screens/HomeScreen/PhoneView/DeviceStatusView.swift b/airsync-mac/Screens/HomeScreen/PhoneView/DeviceStatusView.swift index bf8cf44d..11286ce5 100644 --- a/airsync-mac/Screens/HomeScreen/PhoneView/DeviceStatusView.swift +++ b/airsync-mac/Screens/HomeScreen/PhoneView/DeviceStatusView.swift @@ -39,8 +39,12 @@ struct DeviceStatusView: View { Image(systemName: "antenna.radiowaves.left.and.right.slash") .font(.caption2.weight(.semibold)) .foregroundColor(.red) + .help(Localizer.shared.text("network.no_signal")) } else { - Text(network.replacingOccurrences(of: "_", with: " ")) + let locKey = "network.\(network.lowercased())" + let locVal = Localizer.shared.text(locKey) + let displayText = locVal == locKey ? network.replacingOccurrences(of: "_", with: " ") : locVal + Text(displayText) .font(.caption2.weight(.semibold)) .foregroundColor(network.contains("5G") ? .green : (network == "LTE" ? .orange : .primary)) } From 478ccf44d1fea8b0a53630d9c102b8b908f59fdf Mon Sep 17 00:00:00 2001 From: DinanathDash Date: Tue, 23 Jun 2026 12:28:35 +0530 Subject: [PATCH 7/7] chore: update development team ID and remove explicit code sign identity in project settings --- AirSync.xcodeproj/project.pbxproj | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/AirSync.xcodeproj/project.pbxproj b/AirSync.xcodeproj/project.pbxproj index 4138524f..7197aecb 100644 --- a/AirSync.xcodeproj/project.pbxproj +++ b/AirSync.xcodeproj/project.pbxproj @@ -273,12 +273,11 @@ ASSETCATALOG_COMPILER_INCLUDE_ALL_APPICON_ASSETS = NO; AUTOMATION_APPLE_EVENTS = NO; CODE_SIGN_ENTITLEMENTS = ""; - "CODE_SIGN_IDENTITY[sdk=macosx*]" = "Apple Development"; CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; CURRENT_PROJECT_VERSION = 29; DEAD_CODE_STRIPPING = YES; - DEVELOPMENT_TEAM = 52WCJ39DLM; + DEVELOPMENT_TEAM = WCB4HTANA6; ENABLE_APP_SANDBOX = NO; ENABLE_HARDENED_RUNTIME = YES; ENABLE_PREVIEWS = YES; @@ -454,12 +453,11 @@ ASSETCATALOG_COMPILER_INCLUDE_ALL_APPICON_ASSETS = NO; AUTOMATION_APPLE_EVENTS = NO; CODE_SIGN_ENTITLEMENTS = ""; - "CODE_SIGN_IDENTITY[sdk=macosx*]" = "Apple Development"; CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; CURRENT_PROJECT_VERSION = 29; DEAD_CODE_STRIPPING = YES; - DEVELOPMENT_TEAM = 52WCJ39DLM; + DEVELOPMENT_TEAM = WCB4HTANA6; ENABLE_APP_SANDBOX = NO; ENABLE_HARDENED_RUNTIME = YES; ENABLE_PREVIEWS = YES; @@ -507,12 +505,11 @@ ASSETCATALOG_COMPILER_INCLUDE_ALL_APPICON_ASSETS = NO; AUTOMATION_APPLE_EVENTS = NO; CODE_SIGN_ENTITLEMENTS = ""; - "CODE_SIGN_IDENTITY[sdk=macosx*]" = "Apple Development"; CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; CURRENT_PROJECT_VERSION = 29; DEAD_CODE_STRIPPING = YES; - DEVELOPMENT_TEAM = 52WCJ39DLM; + DEVELOPMENT_TEAM = WCB4HTANA6; ENABLE_APP_SANDBOX = NO; ENABLE_HARDENED_RUNTIME = YES; ENABLE_PREVIEWS = YES;