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)
+ }
+ }
+}
+