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 0d52c62..7d985e7 100755 Binary files a/Retroactive/Support/ApertureFixer/Versions/A/ApertureFixer and b/Retroactive/Support/ApertureFixer/Versions/A/ApertureFixer differ 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) + } + } +} +