Add AppKit bundle, fix light appearance

This commit is contained in:
Shadowfacts 2022-01-16 12:32:45 -05:00
parent 75be4141dd
commit b8a415b6fd
7 changed files with 258 additions and 21 deletions

View File

@ -18,6 +18,8 @@
D68408E827947D0800E327D2 /* PrefsSceneDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = D68408E727947D0800E327D2 /* PrefsSceneDelegate.swift */; }; D68408E827947D0800E327D2 /* PrefsSceneDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = D68408E727947D0800E327D2 /* PrefsSceneDelegate.swift */; };
D68408ED2794803D00E327D2 /* PrefsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D68408EC2794803D00E327D2 /* PrefsView.swift */; }; D68408ED2794803D00E327D2 /* PrefsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D68408EC2794803D00E327D2 /* PrefsView.swift */; };
D68408EF2794808E00E327D2 /* Preferences.swift in Sources */ = {isa = PBXBuildFile; fileRef = D68408EE2794808E00E327D2 /* Preferences.swift */; }; D68408EF2794808E00E327D2 /* Preferences.swift in Sources */ = {isa = PBXBuildFile; fileRef = D68408EE2794808E00E327D2 /* Preferences.swift */; };
D68409132794870000E327D2 /* ReaderMac.swift in Sources */ = {isa = PBXBuildFile; fileRef = D68409122794870000E327D2 /* ReaderMac.swift */; };
D6840914279487DC00E327D2 /* ReaderMac.bundle in Embed PlugIns */ = {isa = PBXBuildFile; fileRef = D684090D279486BF00E327D2 /* ReaderMac.bundle */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
D68B303627907D9200E8B3FA /* ExcerptGenerator.swift in Sources */ = {isa = PBXBuildFile; fileRef = D68B303527907D9200E8B3FA /* ExcerptGenerator.swift */; }; D68B303627907D9200E8B3FA /* ExcerptGenerator.swift in Sources */ = {isa = PBXBuildFile; fileRef = D68B303527907D9200E8B3FA /* ExcerptGenerator.swift */; };
D68B303D2792204B00E8B3FA /* read.js in Resources */ = {isa = PBXBuildFile; fileRef = D68B303C2792204B00E8B3FA /* read.js */; }; D68B303D2792204B00E8B3FA /* read.js in Resources */ = {isa = PBXBuildFile; fileRef = D68B303C2792204B00E8B3FA /* read.js */; };
D68B30402792729A00E8B3FA /* AppSplitViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D68B303F2792729A00E8B3FA /* AppSplitViewController.swift */; }; D68B30402792729A00E8B3FA /* AppSplitViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D68B303F2792729A00E8B3FA /* AppSplitViewController.swift */; };
@ -58,6 +60,13 @@
/* End PBXBuildFile section */ /* End PBXBuildFile section */
/* Begin PBXContainerItemProxy section */ /* Begin PBXContainerItemProxy section */
D6840915279487DC00E327D2 /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = D6C687E0272CD27600874C10 /* Project object */;
proxyType = 1;
remoteGlobalIDString = D684090C279486BF00E327D2;
remoteInfo = ReaderMac;
};
D6C68802272CD27700874C10 /* PBXContainerItemProxy */ = { D6C68802272CD27700874C10 /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy; isa = PBXContainerItemProxy;
containerPortal = D6C687E0272CD27600874C10 /* Project object */; containerPortal = D6C687E0272CD27600874C10 /* Project object */;
@ -82,6 +91,17 @@
/* End PBXContainerItemProxy section */ /* End PBXContainerItemProxy section */
/* Begin PBXCopyFilesBuildPhase section */ /* Begin PBXCopyFilesBuildPhase section */
D6840917279487DD00E327D2 /* Embed PlugIns */ = {
isa = PBXCopyFilesBuildPhase;
buildActionMask = 2147483647;
dstPath = "";
dstSubfolderSpec = 13;
files = (
D6840914279487DC00E327D2 /* ReaderMac.bundle in Embed PlugIns */,
);
name = "Embed PlugIns";
runOnlyForDeploymentPostprocessing = 0;
};
D6C6882E272CD2BA00874C10 /* Embed Frameworks */ = { D6C6882E272CD2BA00874C10 /* Embed Frameworks */ = {
isa = PBXCopyFilesBuildPhase; isa = PBXCopyFilesBuildPhase;
buildActionMask = 2147483647; buildActionMask = 2147483647;
@ -107,6 +127,8 @@
D68408E727947D0800E327D2 /* PrefsSceneDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PrefsSceneDelegate.swift; sourceTree = "<group>"; }; D68408E727947D0800E327D2 /* PrefsSceneDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PrefsSceneDelegate.swift; sourceTree = "<group>"; };
D68408EC2794803D00E327D2 /* PrefsView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PrefsView.swift; sourceTree = "<group>"; }; D68408EC2794803D00E327D2 /* PrefsView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PrefsView.swift; sourceTree = "<group>"; };
D68408EE2794808E00E327D2 /* Preferences.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Preferences.swift; sourceTree = "<group>"; }; D68408EE2794808E00E327D2 /* Preferences.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Preferences.swift; sourceTree = "<group>"; };
D684090D279486BF00E327D2 /* ReaderMac.bundle */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = ReaderMac.bundle; sourceTree = BUILT_PRODUCTS_DIR; };
D68409122794870000E327D2 /* ReaderMac.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ReaderMac.swift; sourceTree = "<group>"; };
D68B3032278FDD1A00E8B3FA /* Reader-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Reader-Bridging-Header.h"; sourceTree = "<group>"; }; D68B3032278FDD1A00E8B3FA /* Reader-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Reader-Bridging-Header.h"; sourceTree = "<group>"; };
D68B303527907D9200E8B3FA /* ExcerptGenerator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ExcerptGenerator.swift; sourceTree = "<group>"; }; D68B303527907D9200E8B3FA /* ExcerptGenerator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ExcerptGenerator.swift; sourceTree = "<group>"; };
D68B3037279099FD00E8B3FA /* liblolhtml.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = liblolhtml.a; path = "lol-html/c-api/target/aarch64-apple-ios-sim/release/liblolhtml.a"; sourceTree = "<group>"; }; D68B3037279099FD00E8B3FA /* liblolhtml.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = liblolhtml.a; path = "lol-html/c-api/target/aarch64-apple-ios-sim/release/liblolhtml.a"; sourceTree = "<group>"; };
@ -152,6 +174,13 @@
/* End PBXFileReference section */ /* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */ /* Begin PBXFrameworksBuildPhase section */
D684090A279486BF00E327D2 /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
);
runOnlyForDeploymentPostprocessing = 0;
};
D6C687E5272CD27600874C10 /* Frameworks */ = { D6C687E5272CD27600874C10 /* Frameworks */ = {
isa = PBXFrameworksBuildPhase; isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647; buildActionMask = 2147483647;
@ -224,6 +253,14 @@
path = Preferences; path = Preferences;
sourceTree = "<group>"; sourceTree = "<group>";
}; };
D6840911279486C400E327D2 /* ReaderMac */ = {
isa = PBXGroup;
children = (
D68409122794870000E327D2 /* ReaderMac.swift */,
);
path = ReaderMac;
sourceTree = "<group>";
};
D68B302E278FDCE200E8B3FA /* Frameworks */ = { D68B302E278FDCE200E8B3FA /* Frameworks */ = {
isa = PBXGroup; isa = PBXGroup;
children = ( children = (
@ -253,6 +290,7 @@
D6C687EA272CD27600874C10 /* Reader */, D6C687EA272CD27600874C10 /* Reader */,
D6C68804272CD27700874C10 /* ReaderTests */, D6C68804272CD27700874C10 /* ReaderTests */,
D6C6880E272CD27700874C10 /* ReaderUITests */, D6C6880E272CD27700874C10 /* ReaderUITests */,
D6840911279486C400E327D2 /* ReaderMac */,
D6C68824272CD2BA00874C10 /* Fervor */, D6C68824272CD2BA00874C10 /* Fervor */,
D6C687E9272CD27600874C10 /* Products */, D6C687E9272CD27600874C10 /* Products */,
D68B302E278FDCE200E8B3FA /* Frameworks */, D68B302E278FDCE200E8B3FA /* Frameworks */,
@ -266,6 +304,7 @@
D6C68801272CD27700874C10 /* ReaderTests.xctest */, D6C68801272CD27700874C10 /* ReaderTests.xctest */,
D6C6880B272CD27700874C10 /* ReaderUITests.xctest */, D6C6880B272CD27700874C10 /* ReaderUITests.xctest */,
D6C68823272CD2BA00874C10 /* Fervor.framework */, D6C68823272CD2BA00874C10 /* Fervor.framework */,
D684090D279486BF00E327D2 /* ReaderMac.bundle */,
); );
name = Products; name = Products;
sourceTree = "<group>"; sourceTree = "<group>";
@ -362,6 +401,23 @@
/* End PBXHeadersBuildPhase section */ /* End PBXHeadersBuildPhase section */
/* Begin PBXNativeTarget section */ /* Begin PBXNativeTarget section */
D684090C279486BF00E327D2 /* ReaderMac */ = {
isa = PBXNativeTarget;
buildConfigurationList = D6840910279486BF00E327D2 /* Build configuration list for PBXNativeTarget "ReaderMac" */;
buildPhases = (
D6840909279486BF00E327D2 /* Sources */,
D684090A279486BF00E327D2 /* Frameworks */,
D684090B279486BF00E327D2 /* Resources */,
);
buildRules = (
);
dependencies = (
);
name = ReaderMac;
productName = ReaderMac;
productReference = D684090D279486BF00E327D2 /* ReaderMac.bundle */;
productType = "com.apple.product-type.bundle";
};
D6C687E7272CD27600874C10 /* Reader */ = { D6C687E7272CD27600874C10 /* Reader */ = {
isa = PBXNativeTarget; isa = PBXNativeTarget;
buildConfigurationList = D6C68815272CD27700874C10 /* Build configuration list for PBXNativeTarget "Reader" */; buildConfigurationList = D6C68815272CD27700874C10 /* Build configuration list for PBXNativeTarget "Reader" */;
@ -371,11 +427,13 @@
D6C687E5272CD27600874C10 /* Frameworks */, D6C687E5272CD27600874C10 /* Frameworks */,
D6C687E6272CD27600874C10 /* Resources */, D6C687E6272CD27600874C10 /* Resources */,
D6C6882E272CD2BA00874C10 /* Embed Frameworks */, D6C6882E272CD2BA00874C10 /* Embed Frameworks */,
D6840917279487DD00E327D2 /* Embed PlugIns */,
); );
buildRules = ( buildRules = (
); );
dependencies = ( dependencies = (
D6C68828272CD2BA00874C10 /* PBXTargetDependency */, D6C68828272CD2BA00874C10 /* PBXTargetDependency */,
D6840916279487DC00E327D2 /* PBXTargetDependency */,
); );
name = Reader; name = Reader;
packageProductDependencies = ( packageProductDependencies = (
@ -449,6 +507,10 @@
LastSwiftUpdateCheck = 1320; LastSwiftUpdateCheck = 1320;
LastUpgradeCheck = 1320; LastUpgradeCheck = 1320;
TargetAttributes = { TargetAttributes = {
D684090C279486BF00E327D2 = {
CreatedOnToolsVersion = 13.2;
LastSwiftMigration = 1320;
};
D6C687E7272CD27600874C10 = { D6C687E7272CD27600874C10 = {
CreatedOnToolsVersion = 13.2; CreatedOnToolsVersion = 13.2;
}; };
@ -486,11 +548,19 @@
D6C68800272CD27700874C10 /* ReaderTests */, D6C68800272CD27700874C10 /* ReaderTests */,
D6C6880A272CD27700874C10 /* ReaderUITests */, D6C6880A272CD27700874C10 /* ReaderUITests */,
D6C68822272CD2BA00874C10 /* Fervor */, D6C68822272CD2BA00874C10 /* Fervor */,
D684090C279486BF00E327D2 /* ReaderMac */,
); );
}; };
/* End PBXProject section */ /* End PBXProject section */
/* Begin PBXResourcesBuildPhase section */ /* Begin PBXResourcesBuildPhase section */
D684090B279486BF00E327D2 /* Resources */ = {
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
);
runOnlyForDeploymentPostprocessing = 0;
};
D6C687E6272CD27600874C10 /* Resources */ = { D6C687E6272CD27600874C10 /* Resources */ = {
isa = PBXResourcesBuildPhase; isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647; buildActionMask = 2147483647;
@ -548,6 +618,14 @@
/* End PBXShellScriptBuildPhase section */ /* End PBXShellScriptBuildPhase section */
/* Begin PBXSourcesBuildPhase section */ /* Begin PBXSourcesBuildPhase section */
D6840909279486BF00E327D2 /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
D68409132794870000E327D2 /* ReaderMac.swift in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
D6C687E4272CD27600874C10 /* Sources */ = { D6C687E4272CD27600874C10 /* Sources */ = {
isa = PBXSourcesBuildPhase; isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647; buildActionMask = 2147483647;
@ -619,6 +697,11 @@
/* End PBXSourcesBuildPhase section */ /* End PBXSourcesBuildPhase section */
/* Begin PBXTargetDependency section */ /* Begin PBXTargetDependency section */
D6840916279487DC00E327D2 /* PBXTargetDependency */ = {
isa = PBXTargetDependency;
target = D684090C279486BF00E327D2 /* ReaderMac */;
targetProxy = D6840915279487DC00E327D2 /* PBXContainerItemProxy */;
};
D6C68803272CD27700874C10 /* PBXTargetDependency */ = { D6C68803272CD27700874C10 /* PBXTargetDependency */ = {
isa = PBXTargetDependency; isa = PBXTargetDependency;
target = D6C687E7272CD27600874C10 /* Reader */; target = D6C687E7272CD27600874C10 /* Reader */;
@ -648,6 +731,65 @@
/* End PBXVariantGroup section */ /* End PBXVariantGroup section */
/* Begin XCBuildConfiguration section */ /* Begin XCBuildConfiguration section */
D684090E279486BF00E327D2 /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
CLANG_ENABLE_MODULES = YES;
CODE_SIGN_STYLE = Automatic;
COMBINE_HIDPI_IMAGES = YES;
CURRENT_PROJECT_VERSION = 1;
DEVELOPMENT_TEAM = ZPBBSK8L8B;
GENERATE_INFOPLIST_FILE = YES;
INFOPLIST_KEY_NSHumanReadableCopyright = "";
INFOPLIST_KEY_NSPrincipalClass = "";
INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Bundles";
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/../Frameworks",
"@loader_path/../Frameworks",
);
MACOSX_DEPLOYMENT_TARGET = 12.1;
MARKETING_VERSION = 1.0;
PRODUCT_BUNDLE_IDENTIFIER = net.shadowfacts.Reader.ReaderMac;
PRODUCT_NAME = "$(TARGET_NAME)";
SDKROOT = macosx;
SKIP_INSTALL = YES;
SWIFT_EMIT_LOC_STRINGS = YES;
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
SWIFT_VERSION = 5.0;
WRAPPER_EXTENSION = bundle;
};
name = Debug;
};
D684090F279486BF00E327D2 /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
CLANG_ENABLE_MODULES = YES;
CODE_SIGN_STYLE = Automatic;
COMBINE_HIDPI_IMAGES = YES;
CURRENT_PROJECT_VERSION = 1;
DEVELOPMENT_TEAM = ZPBBSK8L8B;
GENERATE_INFOPLIST_FILE = YES;
INFOPLIST_KEY_NSHumanReadableCopyright = "";
INFOPLIST_KEY_NSPrincipalClass = "";
INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Bundles";
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/../Frameworks",
"@loader_path/../Frameworks",
);
MACOSX_DEPLOYMENT_TARGET = 12.1;
MARKETING_VERSION = 1.0;
PRODUCT_BUNDLE_IDENTIFIER = net.shadowfacts.Reader.ReaderMac;
PRODUCT_NAME = "$(TARGET_NAME)";
SDKROOT = macosx;
SKIP_INSTALL = YES;
SWIFT_EMIT_LOC_STRINGS = YES;
SWIFT_VERSION = 5.0;
WRAPPER_EXTENSION = bundle;
};
name = Release;
};
D6C68813272CD27700874C10 /* Debug */ = { D6C68813272CD27700874C10 /* Debug */ = {
isa = XCBuildConfiguration; isa = XCBuildConfiguration;
buildSettings = { buildSettings = {
@ -996,6 +1138,15 @@
/* End XCBuildConfiguration section */ /* End XCBuildConfiguration section */
/* Begin XCConfigurationList section */ /* Begin XCConfigurationList section */
D6840910279486BF00E327D2 /* Build configuration list for PBXNativeTarget "ReaderMac" */ = {
isa = XCConfigurationList;
buildConfigurations = (
D684090E279486BF00E327D2 /* Debug */,
D684090F279486BF00E327D2 /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
D6C687E3272CD27600874C10 /* Build configuration list for PBXProject "Reader" */ = { D6C687E3272CD27600874C10 /* Build configuration list for PBXProject "Reader" */ = {
isa = XCConfigurationList; isa = XCConfigurationList;
buildConfigurations = ( buildConfigurations = (

View File

@ -14,6 +14,10 @@ import Combine
class AppDelegate: UIResponder, UIApplicationDelegate { class AppDelegate: UIResponder, UIApplicationDelegate {
private var cancellables = Set<AnyCancellable>() private var cancellables = Set<AnyCancellable>()
#if targetEnvironment(macCatalyst)
private var readerMac: NSObject!
#endif
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
swizzleWKWebView() swizzleWKWebView()
@ -25,6 +29,23 @@ class AppDelegate: UIResponder, UIApplicationDelegate {
} }
.store(in: &cancellables) .store(in: &cancellables)
#if targetEnvironment(macCatalyst)
let macBundleURL = Bundle.main.builtInPlugInsURL!.appendingPathComponent("ReaderMac.bundle")
let bundle = Bundle(url: macBundleURL)!
do {
try bundle.loadAndReturnError()
let clazz = NSClassFromString("ReaderMac.ReaderMac")! as! NSObject.Type
readerMac = clazz.init()
readerMac.perform(Selector(("setup")))
} catch {
print("Unable to load ReaderMac bundle: \(error)")
}
#endif
NotificationCenter.default.addObserver(self, selector: #selector(updateAppearance), name: .appearanceChanged, object: nil)
updateAppearance()
return true return true
} }
@ -112,7 +133,16 @@ class AppDelegate: UIResponder, UIApplicationDelegate {
} }
@objc private func showPreferences() { @objc private func showPreferences() {
UIApplication.shared.requestSceneSessionActivation(nil, userActivity: .preferences(), options: nil, errorHandler: nil) let existing = UIApplication.shared.connectedScenes.first {
$0.session.configuration.name == "prefs"
}
UIApplication.shared.requestSceneSessionActivation(existing?.session, userActivity: .preferences(), options: nil, errorHandler: nil)
}
@objc private func updateAppearance() {
#if targetEnvironment(macCatalyst)
readerMac.perform(Selector(("updateAppearance:")), with: Preferences.shared.appearance.rawValue)
#endif
} }
} }

View File

@ -5,7 +5,7 @@
// Created by Shadowfacts on 1/16/22. // Created by Shadowfacts on 1/16/22.
// //
import UIKit import Foundation
class Preferences: Codable, ObservableObject { class Preferences: Codable, ObservableObject {
@ -36,7 +36,7 @@ class Preferences: Codable, ObservableObject {
required init(from decoder: Decoder) throws { required init(from decoder: Decoder) throws {
let container = try decoder.container(keyedBy: CodingKeys.self) let container = try decoder.container(keyedBy: CodingKeys.self)
self.appearance = try container.decode(UIUserInterfaceStyle.self, forKey: .appearance) self.appearance = try container.decode(Appearance.self, forKey: .appearance)
} }
func encode(to encoder: Encoder) throws { func encode(to encoder: Encoder) throws {
@ -44,12 +44,11 @@ class Preferences: Codable, ObservableObject {
try container.encode(appearance, forKey: .appearance) try container.encode(appearance, forKey: .appearance)
} }
var appearance = UIUserInterfaceStyle.unspecified { @Published var appearance = Appearance.unspecified {
willSet {
objectWillChange.send()
}
didSet { didSet {
NotificationCenter.default.post(name: .userInterfaceStyleChanged, object: nil) NotificationCenter.default.post(name: .appearanceChanged, object: nil, userInfo: [
"appearance": appearance.rawValue
])
} }
} }
@ -59,9 +58,12 @@ class Preferences: Codable, ObservableObject {
} }
extension UIUserInterfaceStyle: Codable { enum Appearance: Int, Codable {
case unspecified = 0
case light = 1
case dark = 2
} }
extension Notification.Name { extension Notification.Name {
static let userInterfaceStyleChanged = Notification.Name("userInterfaceStyleChanged") static let appearanceChanged = Notification.Name("appearanceChanged")
} }

View File

@ -34,12 +34,19 @@ class PrefsSceneDelegate: UIResponder, UIWindowSceneDelegate {
window!.makeKeyAndVisible() window!.makeKeyAndVisible()
NotificationCenter.default.addObserver(self, selector: #selector(updateUserInterfaceStyle), name: .userInterfaceStyleChanged, object: nil) NotificationCenter.default.addObserver(self, selector: #selector(updateAppearance), name: .appearanceChanged, object: nil)
updateUserInterfaceStyle() updateAppearance()
} }
@objc private func updateUserInterfaceStyle() { @objc private func updateAppearance() {
window?.overrideUserInterfaceStyle = Preferences.shared.appearance switch Preferences.shared.appearance {
case .unspecified:
window!.overrideUserInterfaceStyle = .unspecified
case .light:
window!.overrideUserInterfaceStyle = .light
case .dark:
window!.overrideUserInterfaceStyle = .dark
}
} }
} }

View File

@ -55,8 +55,8 @@ class SceneDelegate: UIResponder, UIWindowSceneDelegate {
window!.makeKeyAndVisible() window!.makeKeyAndVisible()
NotificationCenter.default.addObserver(self, selector: #selector(updateUserInterfaceStyle), name: .userInterfaceStyleChanged, object: nil) NotificationCenter.default.addObserver(self, selector: #selector(updateAppearance), name: .appearanceChanged, object: nil)
updateUserInterfaceStyle() updateAppearance()
} }
func sceneDidDisconnect(_ scene: UIScene) { func sceneDidDisconnect(_ scene: UIScene) {
@ -120,8 +120,15 @@ class SceneDelegate: UIResponder, UIWindowSceneDelegate {
} }
} }
@objc private func updateUserInterfaceStyle() { @objc private func updateAppearance() {
window?.overrideUserInterfaceStyle = Preferences.shared.appearance switch Preferences.shared.appearance {
case .unspecified:
window!.overrideUserInterfaceStyle = .unspecified
case .light:
window!.overrideUserInterfaceStyle = .light
case .dark:
window!.overrideUserInterfaceStyle = .dark
}
} }
} }

View File

@ -24,9 +24,9 @@ struct PrefsView: View {
private var appearance: some View { private var appearance: some View {
Picker("Appearance", selection: $preferences.appearance) { Picker("Appearance", selection: $preferences.appearance) {
Text("System").tag(UIUserInterfaceStyle.unspecified) Text("System").tag(Appearance.unspecified)
Text("Dark").tag(UIUserInterfaceStyle.dark) Text("Dark").tag(Appearance.dark)
Text("Light").tag(UIUserInterfaceStyle.light) Text("Light").tag(Appearance.light)
} }
} }
} }

40
ReaderMac/ReaderMac.swift Normal file
View File

@ -0,0 +1,40 @@
//
// ReaderMac.swift
// ReaderMac
//
// Created by Shadowfacts on 1/16/22.
//
import AppKit
class ReaderMac: NSObject {
private(set) static var shared: ReaderMac!
override init() {
if ReaderMac.shared != nil {
fatalError()
}
super.init()
ReaderMac.shared = self
}
@objc func setup() {
}
@objc func updateAppearance(_ appearance: NSNumber) {
switch appearance {
case 0:
NSApp.appearance = nil
case 1:
NSApp.appearance = NSAppearance(named: .aqua)
case 2:
NSApp.appearance = NSAppearance(named: .darkAqua)
default:
fatalError("unexpected appeaerance value: \(appearance)")
}
}
}