mirror of
https://github.com/samsonjs/vibetunnel.git
synced 2026-03-25 09:25:50 +00:00
- Pin SwiftTerm to exact version 1.2.5 for stability - Add Dynamic framework export to VibeTunnelDependencies - Set Swift 5 compatibility for dependencies package - Fix Swift 6 concurrency issues in MacCatalystWindow - Update @StateObject to @State for @Observable pattern - Disable Dynamic-dependent window styling gracefully - Remove redundant DynamicImport.swift file The iOS app now builds successfully and runs via Mac Catalyst.
129 lines
4.2 KiB
Swift
129 lines
4.2 KiB
Swift
@preconcurrency import SwiftUI
|
|
#if targetEnvironment(macCatalyst)
|
|
import UIKit
|
|
|
|
// MARK: - Window Style
|
|
|
|
/// Mac Catalyst window appearance styles.
|
|
/// Controls title bar visibility and traffic light positioning.
|
|
enum MacWindowStyle {
|
|
case standard // Normal title bar with traffic lights
|
|
case inline // Hidden title bar with repositioned traffic lights
|
|
}
|
|
|
|
// MARK: - UIWindow Extension
|
|
|
|
/// UIWindow extension for accessing NSWindow in Mac Catalyst.
|
|
/// Provides bridge to AppKit window functionality on macOS.
|
|
extension UIWindow {
|
|
/// Access the underlying NSWindow in Mac Catalyst
|
|
var nsWindow: NSObject? {
|
|
// Dynamic framework not available, return nil for now
|
|
return nil
|
|
}
|
|
}
|
|
|
|
// MARK: - Window Manager
|
|
|
|
/// Manages Mac Catalyst window customizations.
|
|
/// Handles window style changes and traffic light button repositioning.
|
|
@MainActor
|
|
@Observable
|
|
class MacCatalystWindowManager {
|
|
static let shared = MacCatalystWindowManager()
|
|
|
|
var windowStyle: MacWindowStyle = .standard
|
|
|
|
private var window: UIWindow?
|
|
private var windowResizeObserver: NSObjectProtocol?
|
|
private var windowDidBecomeKeyObserver: NSObjectProtocol?
|
|
private let logger = Logger(category: "MacCatalystWindow")
|
|
|
|
// Traffic light button configuration
|
|
private let trafficLightInset = CGPoint(x: 20, y: 20)
|
|
private let trafficLightSpacing: CGFloat = 20
|
|
|
|
private init() {}
|
|
|
|
/// Configure the window with the specified style
|
|
func configureWindow(_ window: UIWindow, style: MacWindowStyle) {
|
|
self.window = window
|
|
self.windowStyle = style
|
|
|
|
// Wait for window to be fully initialized
|
|
DispatchQueue.main.asyncAfter(deadline: .now() + 0.25) {
|
|
self.applyWindowStyle(style)
|
|
}
|
|
|
|
// Observe window events
|
|
setupWindowObservers()
|
|
}
|
|
|
|
/// Switch between window styles at runtime
|
|
func setWindowStyle(_ style: MacWindowStyle) {
|
|
windowStyle = style
|
|
applyWindowStyle(style)
|
|
}
|
|
|
|
private func applyWindowStyle(_ style: MacWindowStyle) {
|
|
guard let window,
|
|
let _ = window.nsWindow
|
|
else {
|
|
logger.warning("Unable to access NSWindow - Dynamic framework not available")
|
|
return
|
|
}
|
|
|
|
// Dynamic functionality disabled for now
|
|
logger.info("Mac Catalyst window styling disabled - Dynamic framework not available")
|
|
}
|
|
|
|
// Dynamic framework methods removed - not available without proper package integration
|
|
|
|
private func setupWindowObservers() {
|
|
// Window observation disabled - Dynamic framework not available
|
|
logger.info("Window observation disabled - Dynamic framework not available")
|
|
}
|
|
|
|
deinit {
|
|
// No observers to clean up since Dynamic framework is not available
|
|
}
|
|
}
|
|
|
|
// MARK: - View Modifier
|
|
|
|
/// View modifier for applying Mac Catalyst window styles.
|
|
/// Configures window appearance when the view appears.
|
|
struct MacCatalystWindowStyle: ViewModifier {
|
|
let style: MacWindowStyle
|
|
@State private var windowManager = MacCatalystWindowManager.shared
|
|
|
|
func body(content: Content) -> some View {
|
|
content
|
|
.onAppear {
|
|
setupWindow()
|
|
}
|
|
}
|
|
|
|
private func setupWindow() {
|
|
guard let windowScene = UIApplication.shared.connectedScenes.first as? UIWindowScene,
|
|
let window = windowScene.windows.first
|
|
else {
|
|
return
|
|
}
|
|
|
|
windowManager.configureWindow(window, style: style)
|
|
}
|
|
}
|
|
|
|
// MARK: - View Extension
|
|
|
|
/// View extension for Mac Catalyst window configuration.
|
|
/// Enables views to configure window style on Mac Catalyst builds.
|
|
extension View {
|
|
/// Configure the Mac Catalyst window style
|
|
func macCatalystWindowStyle(_ style: MacWindowStyle) -> some View {
|
|
modifier(MacCatalystWindowStyle(style: style))
|
|
}
|
|
}
|
|
|
|
#endif
|