From bcc760fe0b2c50af25beade32cc720fdacdf7ce8 Mon Sep 17 00:00:00 2001 From: Tyshawn Cormier Date: Thu, 7 Nov 2019 02:35:08 -0800 Subject: [PATCH] Restore the ability to add adjustments, use Quick Brushes, and to print photos in Aperture. --- README.md | 2 +- Retroactive.xcodeproj/project.pbxproj | 8 ++- Retroactive/AppDelegate.swift | 11 +-- .../ApertureFixer.xcodeproj/project.pbxproj | 4 ++ .../xcschemes/ApertureFixer.xcscheme | 67 ++++++++++++++++++ .../ApertureFixer/NSObject+Fixer.m | 35 +++++++++ .../Libraries/ConfettiView/ConfettiView.swift | 14 ++-- Retroactive/RootViewController.swift | 15 ++-- .../StepFour/CompletionViewController.swift | 10 +-- Retroactive/StepOne/AppFinder.swift | 6 +- .../StepOne/ChoiceViewController.swift | 2 +- .../StepOne/VersionChoiceViewController.swift | 3 +- .../StepOne/VersionViewController.swift | 3 +- .../StepThree/ProgressViewController.swift | 38 +++++----- .../StepThree/SubProgressViewController.swift | 3 +- .../StepTwo/AuthenticateViewController.swift | 4 +- .../StepTwo/GuidanceViewController.swift | 10 +-- .../ApertureFixer/Versions/A/ApertureFixer | Bin 33568 -> 64704 bytes .../Versions/A/Resources/Info.plist | 14 ++-- .../Versions/A/_CodeSignature/CodeResources | 16 ++++- .../Support/Base.lproj/Main.storyboard | 8 ++- Retroactive/Support/Info.plist | 2 +- .../Support/RetroactiveWindowController.swift | 2 + Retroactive/Support/SupportPath.plist | 8 +-- Retroactive/Support/ViewExtras.swift | 38 ++++++++-- 25 files changed, 242 insertions(+), 81 deletions(-) create mode 100644 Retroactive/Dependencies/ApertureFixer/ApertureFixer.xcodeproj/xcshareddata/xcschemes/ApertureFixer.xcscheme diff --git a/README.md b/README.md index 96ebf76..5438eca 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -## Retroactive is an app that lets you run Aperture, iPhoto, and iTunes on macOS Catalina. [Click to download the Retroactive app](https://github.com/cormiertyshawn895/Retroactive/releases/download/1.0/Retroactive.1.0.zip), or [view the release page](https://github.com/cormiertyshawn895/Retroactive/releases). +## Retroactive is an app that lets you run Aperture, iPhoto, and iTunes on macOS Catalina. [Click to download the Retroactive app](https://github.com/cormiertyshawn895/Retroactive/releases/download/1.1/Retroactive.1.1.zip), or [view the release page](https://github.com/cormiertyshawn895/Retroactive/releases). --- diff --git a/Retroactive.xcodeproj/project.pbxproj b/Retroactive.xcodeproj/project.pbxproj index ba6f6b8..df23eff 100644 --- a/Retroactive.xcodeproj/project.pbxproj +++ b/Retroactive.xcodeproj/project.pbxproj @@ -492,12 +492,14 @@ CODE_SIGN_ENTITLEMENTS = Retroactive/Support/Retroactive.entitlements; CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; - CURRENT_PROJECT_VERSION = 2; + CURRENT_PROJECT_VERSION = 3; INFOPLIST_FILE = Retroactive/Support/Info.plist; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/../Frameworks", ); + MACOSX_DEPLOYMENT_TARGET = 10.10; + MARKETING_VERSION = 1.1; PRODUCT_BUNDLE_IDENTIFIER = com.retroactive.Retroactive; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_OBJC_BRIDGING_HEADER = "Retroactive/Libraries/Bridging-Header.h"; @@ -511,12 +513,14 @@ CODE_SIGN_ENTITLEMENTS = Retroactive/Support/Retroactive.entitlements; CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; - CURRENT_PROJECT_VERSION = 2; + CURRENT_PROJECT_VERSION = 3; INFOPLIST_FILE = Retroactive/Support/Info.plist; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/../Frameworks", ); + MACOSX_DEPLOYMENT_TARGET = 10.10; + MARKETING_VERSION = 1.1; PRODUCT_BUNDLE_IDENTIFIER = com.retroactive.Retroactive; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_OBJC_BRIDGING_HEADER = "Retroactive/Libraries/Bridging-Header.h"; diff --git a/Retroactive/AppDelegate.swift b/Retroactive/AppDelegate.swift index f36dc57..58056e5 100644 --- a/Retroactive/AppDelegate.swift +++ b/Retroactive/AppDelegate.swift @@ -29,6 +29,11 @@ class AppDelegate: NSObject, NSApplicationDelegate { return NSApp.mainWindow?.contentViewController as? RootViewController } } + + static func openKBArticle(_ identifier: String) { + let url = URL(string:"https://support.apple.com/en-us/HT\(identifier)")! + NSWorkspace.shared.open(url) + } static func showOptionSheet(title: String, text: String, firstButtonText: String, secondButtonText: String, thirdButtonText: String, callback: @escaping ((_ response: NSApplication.ModalResponse)-> ())) { let alert = NSAlert() @@ -148,9 +153,7 @@ class AppDelegate: NSObject, NSApplicationDelegate { if (AppManager.shared.hasNewerVersion == true) { self.promptForUpdateAvailable() } else { - Timer.scheduledTimer(withTimeInterval: 1.0, repeats: false) { (timer) in - self.promptForUpdateAvailable() - } + Timer.scheduledTimer(timeInterval: 1.0, target: self, selector: #selector(promptForUpdateAvailable), userInfo: nil, repeats: false) } } @@ -180,7 +183,7 @@ class AppDelegate: NSObject, NSApplicationDelegate { } } - func promptForUpdateAvailable() { + @objc func promptForUpdateAvailable() { if (AppManager.shared.hasNewerVersion == true) { AppDelegate.showOptionSheet(title: AppManager.shared.newVersionVisibleTitle ?? "Update available.", text: AppManager.shared.newVersionChangelog ?? "A newer version of Retroactive is available.", firstButtonText: "Download", secondButtonText: "Learn More...", thirdButtonText: "Cancel") { (response) in if (response == .alertFirstButtonReturn) { diff --git a/Retroactive/Dependencies/ApertureFixer/ApertureFixer.xcodeproj/project.pbxproj b/Retroactive/Dependencies/ApertureFixer/ApertureFixer.xcodeproj/project.pbxproj index 97d6c9f..9982e34 100644 --- a/Retroactive/Dependencies/ApertureFixer/ApertureFixer.xcodeproj/project.pbxproj +++ b/Retroactive/Dependencies/ApertureFixer/ApertureFixer.xcodeproj/project.pbxproj @@ -266,6 +266,7 @@ CLANG_ENABLE_OBJC_ARC = NO; CODE_SIGN_STYLE = Manual; COMBINE_HIDPI_IMAGES = YES; + CURRENT_PROJECT_VERSION = 2; DEFINES_MODULE = YES; DEVELOPMENT_TEAM = ""; DYLIB_COMPATIBILITY_VERSION = 1; @@ -278,6 +279,7 @@ "@executable_path/../Frameworks", "@loader_path/Frameworks", ); + MACOSX_DEPLOYMENT_TARGET = 10.10; PRODUCT_BUNDLE_IDENTIFIER = com.gentlemencoders.ApertureFixer; PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; PROVISIONING_PROFILE_SPECIFIER = ""; @@ -291,6 +293,7 @@ CLANG_ENABLE_OBJC_ARC = NO; CODE_SIGN_STYLE = Manual; COMBINE_HIDPI_IMAGES = YES; + CURRENT_PROJECT_VERSION = 2; DEFINES_MODULE = YES; DEVELOPMENT_TEAM = ""; DYLIB_COMPATIBILITY_VERSION = 1; @@ -303,6 +306,7 @@ "@executable_path/../Frameworks", "@loader_path/Frameworks", ); + MACOSX_DEPLOYMENT_TARGET = 10.10; PRODUCT_BUNDLE_IDENTIFIER = com.gentlemencoders.ApertureFixer; PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; PROVISIONING_PROFILE_SPECIFIER = ""; diff --git a/Retroactive/Dependencies/ApertureFixer/ApertureFixer.xcodeproj/xcshareddata/xcschemes/ApertureFixer.xcscheme b/Retroactive/Dependencies/ApertureFixer/ApertureFixer.xcodeproj/xcshareddata/xcschemes/ApertureFixer.xcscheme new file mode 100644 index 0000000..c6ab7ab --- /dev/null +++ b/Retroactive/Dependencies/ApertureFixer/ApertureFixer.xcodeproj/xcshareddata/xcschemes/ApertureFixer.xcscheme @@ -0,0 +1,67 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Retroactive/Dependencies/ApertureFixer/ApertureFixer/NSObject+Fixer.m b/Retroactive/Dependencies/ApertureFixer/ApertureFixer/NSObject+Fixer.m index c97b34e..b790ea4 100644 --- a/Retroactive/Dependencies/ApertureFixer/ApertureFixer/NSObject+Fixer.m +++ b/Retroactive/Dependencies/ApertureFixer/ApertureFixer/NSObject+Fixer.m @@ -31,6 +31,41 @@ + (void)load { method_exchangeImplementations(class_getInstanceMethod(NSClassFromString(@"NSWorkspace"), NSSelectorFromString(@"URLForApplicationWithBundleIdentifier:")), class_getInstanceMethod(class, @selector(patched_URLForApplicationWithBundleIdentifier:))); + + Class printClass = NSClassFromString(@"RKPrintPanel"); + method_exchangeImplementations(class_getInstanceMethod(NSClassFromString(@"RKPrintPanel"), NSSelectorFromString(@"_updatePageSizePopup")), + class_getInstanceMethod(printClass, @selector(patched_updatePageSizePopup))); + + method_exchangeImplementations(class_getInstanceMethod(NSClassFromString(@"RKRedRockApp"), NSSelectorFromString(@"_delayedFinishLaunching")), + class_getInstanceMethod(class, @selector(patched_delayedFinishLaunching))); + + method_exchangeImplementations(class_getInstanceMethod(NSClassFromString(@"NSConcretePrintOperation"), NSSelectorFromString(@"runOperation")), + class_getInstanceMethod(class, @selector(patched_runOperation))); + + method_exchangeImplementations(class_getInstanceMethod(NSClassFromString(@"RKPrinter"), NSSelectorFromString(@"paperWithID:")), + class_getInstanceMethod(class, @selector(patched_paperWithID:))); +} + +- (id)patched_paperWithID:(id)arg1 { + NSLog(@"patching paperWithID to prevent crashes"); + return nil; +} + +- (void)patched_runOperation { + NSLog(@"patching runOperation to run on main queue to prevent Auto Layout crashes"); + dispatch_sync(dispatch_get_main_queue(), ^{ + NSLog(@"running operation on main queue"); + [self patched_runOperation]; + }); +} + +- (void)patched_delayedFinishLaunching { + NSLog(@"kick delayedFinishLaunching to the next run loop, so that the adjustments menu can populate"); + [self performSelector:@selector(patched_delayedFinishLaunching) withObject:nil afterDelay:0]; +} + +- (void)patched_updatePageSizePopup { + NSLog(@"skipping updatePageSizePopup to prevent a crash"); } - (BOOL)_hasRowHeaderColumn { diff --git a/Retroactive/Libraries/ConfettiView/ConfettiView.swift b/Retroactive/Libraries/ConfettiView/ConfettiView.swift index c1f7d7d..68bebec 100644 --- a/Retroactive/Libraries/ConfettiView/ConfettiView.swift +++ b/Retroactive/Libraries/ConfettiView/ConfettiView.swift @@ -79,11 +79,11 @@ open class ConfettiView: ConfettiView.View { self.translatesAutoresizingMaskIntoConstraints = false NSLayoutConstraint.activate([ - leadingAnchor.constraint(equalTo: superview.leadingAnchor), - topAnchor.constraint(equalTo: superview.topAnchor), - trailingAnchor.constraint(equalTo: superview.trailingAnchor), - bottomAnchor.constraint(equalTo: superview.bottomAnchor) - ]) + NSLayoutConstraint(item: self, attribute: .leading, relatedBy: .equal, toItem: superview, attribute: .leading, multiplier: 1, constant: 0), + NSLayoutConstraint(item: self, attribute: .top, relatedBy: .equal, toItem: superview, attribute: .top, multiplier: 1, constant: 0), + NSLayoutConstraint(item: self, attribute: .trailing, relatedBy: .equal, toItem: superview, attribute: .trailing, multiplier: 1, constant: 0), + NSLayoutConstraint(item: self, attribute: .bottom, relatedBy: .equal, toItem: superview, attribute: .bottom, multiplier: 1, constant: 0), + ]) } #if canImport(AppKit) @@ -119,6 +119,10 @@ open class ConfettiView: ConfettiView.View { #endif } + deinit { + NotificationCenter.default.removeObserver(self) + } + open func startConfetti() { isActive = true diff --git a/Retroactive/RootViewController.swift b/Retroactive/RootViewController.swift index 5f4a3db..937949e 100644 --- a/Retroactive/RootViewController.swift +++ b/Retroactive/RootViewController.swift @@ -32,10 +32,10 @@ class RootViewController: NSViewController, CCNNavigationControllerDelegate, NSW self.view.addSubview(self.navigationController.view) NSLayoutConstraint.activate([ - self.view.topAnchor.constraint(equalTo: self.navigationController.view.topAnchor), - self.view.leadingAnchor.constraint(equalTo: self.navigationController.view.leadingAnchor), - self.view.trailingAnchor.constraint(equalTo: self.navigationController.view.trailingAnchor), - self.view.bottomAnchor.constraint(equalTo: self.navigationController.view.bottomAnchor), + NSLayoutConstraint(item: self.view, attribute: .top, relatedBy: .equal, toItem: self.navigationController.view, attribute: .top, multiplier: 1, constant: 0), + NSLayoutConstraint(item: self.view, attribute: .leading, relatedBy: .equal, toItem: self.navigationController.view, attribute: .leading, multiplier: 1, constant: 0), + NSLayoutConstraint(item: self.view, attribute: .trailing, relatedBy: .equal, toItem: self.navigationController.view, attribute: .trailing, multiplier: 1, constant: 0), + NSLayoutConstraint(item: self.view, attribute: .bottom, relatedBy: .equal, toItem: self.navigationController.view, attribute: .bottom, multiplier: 1, constant: 0), ]) titleStackView.wantsLayer = true @@ -44,12 +44,7 @@ class RootViewController: NSViewController, CCNNavigationControllerDelegate, NSW func alertForOSIncompatibility() { let osVersion = ProcessInfo.processInfo.operatingSystemVersion if osVersion.minorVersion > 15 { - let patchVersion = osVersion.patchVersion - var patchString = "" - if (patchVersion > 0) { - patchString = ".\(patchVersion)" - } - AppDelegate.showOptionSheet(title: "Update to a newer version of Retroactive", text: "This version of Retroactive is only designed and tested for macOS Catalina, and may be incompatible with macOS \(osVersion.majorVersion).\(osVersion.minorVersion)\(patchString).", firstButtonText: "Check for Updates", secondButtonText: "Run Anyways", thirdButtonText: "Quit") { (response) in + AppDelegate.showOptionSheet(title: "Update to a newer version of Retroactive", text: "This version of Retroactive is only designed and tested for macOS Catalina, and may be incompatible with \(ProcessInfo.versionString).", firstButtonText: "Check for Updates", secondButtonText: "Run Anyways", thirdButtonText: "Quit") { (response) in if (response == .alertFirstButtonReturn) { AppDelegate.current.checkForUpdates() // NSApplication.shared.terminate(self) diff --git a/Retroactive/StepFour/CompletionViewController.swift b/Retroactive/StepFour/CompletionViewController.swift index 7ede886..d77f11b 100644 --- a/Retroactive/StepFour/CompletionViewController.swift +++ b/Retroactive/StepFour/CompletionViewController.swift @@ -18,7 +18,7 @@ class CompletionViewController: NSViewController { static func instantiate() -> CompletionViewController { - return NSStoryboard.main!.instantiateController(withIdentifier: "CompletionViewController") as! CompletionViewController + return NSStoryboard.standard!.instantiateController(withIdentifier: "CompletionViewController") as! CompletionViewController } override func viewDidLoad() { @@ -39,9 +39,11 @@ class CompletionViewController: NSViewController { super.viewDidAppear() addConfettiView() confettiView?.startConfetti() - Timer.scheduledTimer(withTimeInterval: 1, repeats: false) { (_) in - self.confettiView?.stopConfetti() - } + Timer.scheduledTimer(timeInterval: 1, target: self, selector: #selector(stopConfetti), userInfo: nil, repeats: false) + } + + @objc func stopConfetti() { + self.confettiView?.stopConfetti() } func addConfettiView() { diff --git a/Retroactive/StepOne/AppFinder.swift b/Retroactive/StepOne/AppFinder.swift index 87cdacb..2f35cf7 100644 --- a/Retroactive/StepOne/AppFinder.swift +++ b/Retroactive/StepOne/AppFinder.swift @@ -162,7 +162,11 @@ class AppFinder: NSObject { } static func openMacAppStore() { - NSWorkspace.shared.openApplication(at: URL(fileURLWithPath: "/System/Applications/App Store.app"), configuration: .init(), completionHandler: nil) + if #available(OSX 10.15, *) { + NSWorkspace.shared.openApplication(at: URL(fileURLWithPath: "/System/Applications/App Store.app"), configuration: .init(), completionHandler: nil) + } else { + NSWorkspace.shared.launchApplication("App Store") + } } } diff --git a/Retroactive/StepOne/ChoiceViewController.swift b/Retroactive/StepOne/ChoiceViewController.swift index 5f64d9b..2081e90 100644 --- a/Retroactive/StepOne/ChoiceViewController.swift +++ b/Retroactive/StepOne/ChoiceViewController.swift @@ -24,7 +24,7 @@ class ChoiceViewController: NSViewController { static func instantiate() -> ChoiceViewController { - NSStoryboard.main!.instantiateController(withIdentifier: "ChoiceViewController") as! ChoiceViewController + NSStoryboard.standard!.instantiateController(withIdentifier: "ChoiceViewController") as! ChoiceViewController } override func viewDidLoad() { diff --git a/Retroactive/StepOne/VersionChoiceViewController.swift b/Retroactive/StepOne/VersionChoiceViewController.swift index 953d2fe..0ba8b75 100644 --- a/Retroactive/StepOne/VersionChoiceViewController.swift +++ b/Retroactive/StepOne/VersionChoiceViewController.swift @@ -14,7 +14,7 @@ class VersionChoiceViewController: NSViewController { static func instantiate() -> VersionChoiceViewController { - return NSStoryboard.main!.instantiateController(withIdentifier: "VersionChoiceViewController") as! VersionChoiceViewController + return NSStoryboard.standard!.instantiateController(withIdentifier: "VersionChoiceViewController") as! VersionChoiceViewController } override func viewDidLoad() { @@ -23,7 +23,6 @@ class VersionChoiceViewController: NSViewController { self.screenshotView.image = itunesApp?.previewScreenshot self.featureDescription.stringValue = itunesApp?.featureDescriptionString ?? "" self.versionDescription.stringValue = "iTunes \(itunesApp?.versionNumberString ?? "")" - AppManager.shared.choseniTunesVersion = .darkMode } } diff --git a/Retroactive/StepOne/VersionViewController.swift b/Retroactive/StepOne/VersionViewController.swift index c33ebed..737a24a 100644 --- a/Retroactive/StepOne/VersionViewController.swift +++ b/Retroactive/StepOne/VersionViewController.swift @@ -18,7 +18,7 @@ class VersionViewController: NSViewController { static func instantiate() -> VersionViewController { - return NSStoryboard.main!.instantiateController(withIdentifier: "VersionViewController") as! VersionViewController + return NSStoryboard.standard!.instantiateController(withIdentifier: "VersionViewController") as! VersionViewController } override func viewDidLoad() { @@ -36,6 +36,7 @@ class VersionViewController: NSViewController { } nextButton.updateTitle() self.selectedVersion = .darkMode + AppManager.shared.choseniTunesVersion = .darkMode } var selectedVersion: iTunesVersion? { diff --git a/Retroactive/StepThree/ProgressViewController.swift b/Retroactive/StepThree/ProgressViewController.swift index e9b1879..ef1bb6e 100644 --- a/Retroactive/StepThree/ProgressViewController.swift +++ b/Retroactive/StepThree/ProgressViewController.swift @@ -32,7 +32,7 @@ class ProgressViewController: NSViewController, URLSessionDelegate, URLSessionDa static func instantiate() -> ProgressViewController { - return NSStoryboard.main!.instantiateController(withIdentifier: "ProgressViewController") as! ProgressViewController + return NSStoryboard.standard!.instantiateController(withIdentifier: "ProgressViewController") as! ProgressViewController } override func viewDidLoad() { @@ -142,9 +142,9 @@ class ProgressViewController: NSViewController, URLSessionDelegate, URLSessionDa } } updateClosure() - self.progressTimer = Timer.scheduledTimer(withTimeInterval: 1/60, repeats: true) { (timer) in + self.progressTimer = Timer.scheduledTimer(timeInterval: 1/60, target: BlockOperation { updateClosure() - } + }, selector: #selector(Operation.main), userInfo: nil, repeats: true) } } @@ -433,23 +433,25 @@ class ProgressViewController: NSViewController, URLSessionDelegate, URLSessionDa if AppManager.shared.choseniTunesVersion == .darkMode { print("Chosen Dark Mode iTunes") - let timer = Timer.init(timeInterval: 15.0, repeats: true) { (timer) in - print("Timer fired to seek for extraction progress") - let libraryPath = "\(packageExtractionPath)/Payload/Library" - let libraryExists = FileManager.default.fileExists(atPath: libraryPath) - let afterPackageExists = FileManager.default.fileExists(atPath: afterPackagePath) - print("libraryPath = \(libraryPath), libraryExists = \(libraryExists), afterPackageExists = \(afterPackageExists)") - if libraryExists && afterPackageExists { - let resourcePath = Bundle.main.resourcePath!.fileSystemString - // Extracting the entire macOS installer takes way too long - // Kill pkg extraction before fans spin up too loud - ProgressViewController.runTask(toolPath: "killpkg", arguments: [], path: resourcePath) - timer.invalidate() - stageAfterExpansion() + if #available(OSX 10.12, *) { + let timer = Timer.init(timeInterval: 15.0, repeats: true) { (timer) in + print("Timer fired to seek for extraction progress") + let libraryPath = "\(packageExtractionPath)/Payload/Library" + let libraryExists = FileManager.default.fileExists(atPath: libraryPath) + let afterPackageExists = FileManager.default.fileExists(atPath: afterPackagePath) + print("libraryPath = \(libraryPath), libraryExists = \(libraryExists), afterPackageExists = \(afterPackageExists)") + if libraryExists && afterPackageExists { + let resourcePath = Bundle.main.resourcePath!.fileSystemString + // Extracting the entire macOS installer takes way too long + // Kill pkg extraction before fans spin up too loud + ProgressViewController.runTask(toolPath: "killpkg", arguments: [], path: resourcePath) + timer.invalidate() + stageAfterExpansion() + } } + RunLoop.main.add(timer, forMode: .common) + ProgressViewController.runTask(toolPath: "/usr/sbin/pkgutil", arguments: ["--expand-full", packagePath, packageExtractionPath], path: tempDir, wait: false) } - RunLoop.main.add(timer, forMode: .common) - ProgressViewController.runTask(toolPath: "/usr/sbin/pkgutil", arguments: ["--expand-full", packagePath, packageExtractionPath], path: tempDir, wait: false) } if AppManager.shared.choseniTunesVersion != .darkMode { diff --git a/Retroactive/StepThree/SubProgressViewController.swift b/Retroactive/StepThree/SubProgressViewController.swift index d987de8..51d2765 100644 --- a/Retroactive/StepThree/SubProgressViewController.swift +++ b/Retroactive/StepThree/SubProgressViewController.swift @@ -14,7 +14,7 @@ class SubProgressViewController: NSViewController { static func instantiate() -> SubProgressViewController { - return NSStoryboard.main!.instantiateController(withIdentifier: "SubProgressViewController") as! SubProgressViewController + return NSStoryboard.standard!.instantiateController(withIdentifier: "SubProgressViewController") as! SubProgressViewController } override func viewDidLoad() { @@ -24,6 +24,7 @@ class SubProgressViewController: NSViewController { circularProgress.lineWidth = 4.0 circularProgress.cancelProgress() circularProgress.isIndeterminate = true + numberBox.fillColor = NSColor.controlAccentColorPolyfill self.progressTextField.stringValue = "Waiting..." } diff --git a/Retroactive/StepTwo/AuthenticateViewController.swift b/Retroactive/StepTwo/AuthenticateViewController.swift index c9f4ea8..a11fa1a 100644 --- a/Retroactive/StepTwo/AuthenticateViewController.swift +++ b/Retroactive/StepTwo/AuthenticateViewController.swift @@ -11,9 +11,10 @@ class AuthenticateViewController: NSViewController { @IBOutlet weak var explainationLabel: DisplayOnlyTextField! @IBOutlet weak var authenticateButton: AccentGradientButton! @IBOutlet weak var authenticateLabel: DisplayOnlyTextField! + @IBOutlet weak var viewSourceButton: HoverButton! static func instantiate() -> AuthenticateViewController { - return NSStoryboard.main!.instantiateController(withIdentifier: "AuthenticateViewController") as! AuthenticateViewController + return NSStoryboard.standard!.instantiateController(withIdentifier: "AuthenticateViewController") as! AuthenticateViewController } override func viewDidLoad() { @@ -22,6 +23,7 @@ class AuthenticateViewController: NSViewController { searchingForLabel.updateToken() explainationLabel.updateToken() authenticateLabel.moveIntoView(authenticateButton) + viewSourceButton.updateTitle() } @IBAction func authenticateClicked(_ sender: Any) { diff --git a/Retroactive/StepTwo/GuidanceViewController.swift b/Retroactive/StepTwo/GuidanceViewController.swift index c4099d7..a1fbe81 100644 --- a/Retroactive/StepTwo/GuidanceViewController.swift +++ b/Retroactive/StepTwo/GuidanceViewController.swift @@ -18,7 +18,7 @@ class GuidanceViewController: NSViewController { @IBOutlet weak var timeMachineImageButton: HoverButton! static func instantiate() -> GuidanceViewController { - return NSStoryboard.main!.instantiateController(withIdentifier: "GuidanceViewController") as! GuidanceViewController + return NSStoryboard.standard!.instantiateController(withIdentifier: "GuidanceViewController") as! GuidanceViewController } override func viewDidLoad() { @@ -42,11 +42,11 @@ class GuidanceViewController: NSViewController { } @IBAction func airDropClicked(_ sender: Any) { - openKBArticle("203106") + AppDelegate.openKBArticle("203106") } @IBAction func timeMachineClicked(_ sender: Any) { - openKBArticle("209152") + AppDelegate.openKBArticle("209152") } @IBAction func alreadyInstalledClicked(_ sender: Any) { @@ -58,8 +58,4 @@ class GuidanceViewController: NSViewController { AppFinder.shared.queryAllInstalledApps(shouldPresentAlert: true, claimsToHaveInstalled: false) } - func openKBArticle(_ identifier: String) { - let url = URL(string:"https://support.apple.com/en-us/HT\(identifier)")! - NSWorkspace.shared.open(url) - } } diff --git a/Retroactive/Support/ApertureFixer/Versions/A/ApertureFixer b/Retroactive/Support/ApertureFixer/Versions/A/ApertureFixer index 0d52c62d7fba75d925cc8d01fd6514c4cc05e295..7d985e7a4a88dadb11086bb557368dcca8db6929 100755 GIT binary patch literal 64704 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 literal 33568 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 BB3%Fg diff --git a/Retroactive/Support/ApertureFixer/Versions/A/Resources/Info.plist b/Retroactive/Support/ApertureFixer/Versions/A/Resources/Info.plist index b5abbcc..5bf2250 100644 --- a/Retroactive/Support/ApertureFixer/Versions/A/Resources/Info.plist +++ b/Retroactive/Support/ApertureFixer/Versions/A/Resources/Info.plist @@ -3,7 +3,7 @@ BuildMachineOSBuild - 19A602 + 19B88 CFBundleDevelopmentRegion en CFBundleExecutable @@ -23,22 +23,22 @@ MacOSX CFBundleVersion - 1 + 2 DTCompiler com.apple.compilers.llvm.clang.1_0 DTPlatformBuild - 11A419c + 11B52 DTPlatformVersion GM DTSDKBuild - 19A547 + 19B81 DTSDKName macosx10.15 DTXcode - 1100 + 1120 DTXcodeBuild - 11A419c + 11B52 LSMinimumSystemVersion - 10.15 + 10.10 diff --git a/Retroactive/Support/ApertureFixer/Versions/A/_CodeSignature/CodeResources b/Retroactive/Support/ApertureFixer/Versions/A/_CodeSignature/CodeResources index 0335d83..5d0069f 100644 --- a/Retroactive/Support/ApertureFixer/Versions/A/_CodeSignature/CodeResources +++ b/Retroactive/Support/ApertureFixer/Versions/A/_CodeSignature/CodeResources @@ -6,13 +6,17 @@ Resources/Info.plist - USYsYgCZols0wWewVspvRkiozQQ= + ZTZmqC4uMqVcupc/nVpiJbsKnoo= files2 Headers/ApertureFixer.h + hash + + 9CYBX4PqwB3GvOPSm60abIFrfz0= + hash2 UAQubzh7eIHSJm7mWAgjUO/3UKzO2JAAW7s/Lkpgtc0= @@ -20,6 +24,10 @@ Modules/module.modulemap + hash + + Fin0qpfJrFJwreOl64pLvHzSE3Q= + hash2 UZX+S9KIEhxNqPXYdtU3W8BhF/L1ULM5PE+HrH8zZ5g= @@ -27,9 +35,13 @@ Resources/Info.plist + hash + + ZTZmqC4uMqVcupc/nVpiJbsKnoo= + hash2 - kpkD0mp/5M4db5FQo5ghOkHYNOrTFRZQ5h3HjaPFuZs= + YZ7Fd1Piy7uQtroekN8ReOf9liuHGTDnvP82reqZMkw= diff --git a/Retroactive/Support/Base.lproj/Main.storyboard b/Retroactive/Support/Base.lproj/Main.storyboard index 9133de3..3df4857 100644 --- a/Retroactive/Support/Base.lproj/Main.storyboard +++ b/Retroactive/Support/Base.lproj/Main.storyboard @@ -1,7 +1,8 @@ - + - + + @@ -1407,7 +1408,7 @@ You can use {name} now. - + @@ -1545,6 +1546,7 @@ You can use {name} now. + diff --git a/Retroactive/Support/Info.plist b/Retroactive/Support/Info.plist index 199c16f..32dae6a 100644 --- a/Retroactive/Support/Info.plist +++ b/Retroactive/Support/Info.plist @@ -17,7 +17,7 @@ CFBundlePackageType $(PRODUCT_BUNDLE_PACKAGE_TYPE) CFBundleShortVersionString - 1.0 + $(MARKETING_VERSION) CFBundleVersion $(CURRENT_PROJECT_VERSION) LSMinimumSystemVersion diff --git a/Retroactive/Support/RetroactiveWindowController.swift b/Retroactive/Support/RetroactiveWindowController.swift index a93b0c3..e616e5a 100644 --- a/Retroactive/Support/RetroactiveWindowController.swift +++ b/Retroactive/Support/RetroactiveWindowController.swift @@ -10,6 +10,8 @@ class RetroactiveWindowController: NSWindowController, NSWindowDelegate { override func windowDidLoad() { super.windowDidLoad() self.window?.isMovableByWindowBackground = true + self.window?.titlebarAppearsTransparent = true + self.window?.titleVisibility = .hidden } } diff --git a/Retroactive/Support/SupportPath.plist b/Retroactive/Support/SupportPath.plist index 759409a..e281f9e 100644 --- a/Retroactive/Support/SupportPath.plist +++ b/Retroactive/Support/SupportPath.plist @@ -3,13 +3,13 @@ NewVersionVisibleTitle - Retroactive 1.0 is available for download. + Retroactive 1.1 is available for download. NewVersionChangelog - Retroactive 1.0 supports modifying Aperture, iPhoto, and iTunes to work with macOS Catalina, and contains bug fixes and general improvements. + Retroactive 1.1 restores the ability to add adjustments, use Quick Brushes, and to print photos in Aperture. LatestZIP - https://github.com/cormiertyshawn895/Retroactive/releases/download/1.0/Retroactive.1.0.zip + https://github.com/cormiertyshawn895/Retroactive/releases/download/1.1/Retroactive.1.1.zip LatestBuildNumber - 2 + 3 SupportPathURL https://raw.githubusercontent.com/cormiertyshawn895/Retroactive/master/Retroactive/Support/SupportPath.plist ReleasePage diff --git a/Retroactive/Support/ViewExtras.swift b/Retroactive/Support/ViewExtras.swift index 682dbaf..3a54627 100644 --- a/Retroactive/Support/ViewExtras.swift +++ b/Retroactive/Support/ViewExtras.swift @@ -5,6 +5,18 @@ import Cocoa +extension ProcessInfo { + static var versionString: String { + let osVersion = ProcessInfo.processInfo.operatingSystemVersion + let patchVersion = osVersion.patchVersion + var patchString = "" + if (patchVersion > 0) { + patchString = ".\(patchVersion)" + } + return "macOS \(osVersion.majorVersion).\(osVersion.minorVersion)\(patchString)" + } +} + extension NSView { func moveIntoView(_ newView: NSView) { let newRect = self.convert(self.bounds, to: newView) @@ -66,7 +78,7 @@ class AccentGradientButton: HoverButton { } override func draw(_ dirtyRect: NSRect) { - var startingColor = NSColor.controlAccentColor + var startingColor = NSColor.controlAccentColorPolyfill startingColor = startingColor.blended(withFraction: blendingRatio, of: NSColor.controlBackgroundColor)! var endingColor = startingColor.blended(withFraction: blendingRatio, of: NSColor.black)! if (self.isHighlighted) { @@ -83,7 +95,7 @@ class PillButton: NSButton { override func awakeFromNib() { super.awakeFromNib() self.wantsLayer = true - self.layer?.backgroundColor = NSColor.controlAccentColor.blended(withFraction: 0.25, of: NSColor.white)?.cgColor + self.layer?.backgroundColor = NSColor.controlAccentColorPolyfill.blended(withFraction: 0.25, of: NSColor.white)?.cgColor self.layer?.cornerRadius = 15.0 } @@ -98,7 +110,7 @@ class PillButton: NSButton { } override func viewDidChangeEffectiveAppearance() { - self.layer?.backgroundColor = NSColor.controlAccentColor.blended(withFraction: 0.25, of: NSColor.white)?.cgColor + self.layer?.backgroundColor = NSColor.controlAccentColorPolyfill.blended(withFraction: 0.25, of: NSColor.white)?.cgColor } } @@ -133,12 +145,15 @@ extension NSButton { let newTitle = AppManager.replaceTokenFor(self.title) if (newTitle.contains(disclosureString)) { let attrString = NSMutableAttributedString(string: newTitle.replacingOccurrences(of: disclosureString, with: ""), - attributes:[.font: NSFont.systemFont(ofSize: 19), .foregroundColor: NSColor.controlAccentColor]) + attributes:[.font: NSFont.systemFont(ofSize: 19), .foregroundColor: NSColor.controlAccentColorPolyfill]) attrString.append(NSMutableAttributedString(string: disclosureString, - attributes:[.font: NSFont.systemFont(ofSize: 25), .foregroundColor: NSColor.controlAccentColor, .baselineOffset: -1.5])) + attributes:[.font: NSFont.systemFont(ofSize: 25), .foregroundColor: NSColor.controlAccentColorPolyfill, .baselineOffset: -1.5])) self.attributedTitle = attrString } else { self.title = newTitle + let attrString = NSMutableAttributedString(attributedString: self.attributedTitle) + attrString.addAttribute(.foregroundColor, value: NSColor.controlAccentColorPolyfill, range: NSRange(location: 0, length: attrString.length)) + self.attributedTitle = attrString } } } @@ -209,9 +224,20 @@ class PopButton : HoverButton { } override func draw(_ dirtyRect: NSRect) { - let bgColor = NSColor.controlAccentColor + let bgColor = NSColor.controlAccentColorPolyfill bgColor.setFill() dirtyRect.fill() super.draw(dirtyRect) } } + +extension NSStoryboard { + class var standard: NSStoryboard? { + if #available(OSX 10.13, *) { + return NSStoryboard.main + } else { + return NSStoryboard(name: "Main", bundle: nil) + } + } +} +