Skip to content

Commit

Permalink
Add support for unlocking Xcode 11.6 on macOS Mojave.
Browse files Browse the repository at this point in the history
  • Loading branch information
cormiertyshawn895 committed Jun 27, 2020
1 parent 4f236b3 commit 0598c83
Show file tree
Hide file tree
Showing 32 changed files with 641 additions and 69 deletions.
10 changes: 5 additions & 5 deletions README.md
@@ -1,4 +1,4 @@
### Retroactive lets you run Aperture, iPhoto, and iTunes on macOS Catalina. Xcode 11.5 or 11.4.1 on macOS Mojave. Final Cut Pro 7, Logic Pro 9, and iWork ’09 on macOS Mojave or macOS High Sierra.
### Retroactive lets you run Aperture, iPhoto, and iTunes on macOS Catalina. Xcode 11.6 or 11.5 on macOS Mojave. Final Cut Pro 7, Logic Pro 9, and iWork ’09 on macOS Mojave or macOS High Sierra.

<p align="center">
<a href="https://github.com/cormiertyshawn895/Retroactive/releases/download/1.7/Retroactive.1.7.zip" alt="Download Retroactive"><img width="282" height="68" src="screenshots/resources/download-button.png" alt="Download Retroactive"></a>
Expand Down Expand Up @@ -37,17 +37,17 @@ Pick the app you want to run. If you want to run multiple apps from here, pick a

![](screenshots/4.jpg)

On macOS Mojave and macOS High Sierra, Retroactive can also unlock Final Cut Pro 7, Logic Pro 9 (experimental), Xcode 11.5 or 11.4.1 (requires macOS Mojave), and fix iWork ’09.
On macOS Mojave and macOS High Sierra, Retroactive can also unlock Final Cut Pro 7, Logic Pro 9 (experimental), Xcode 11.6 or 11.5 (requires macOS Mojave), and fix iWork ’09.

![](screenshots/4b.jpg)

I’ll use Aperture as the example, but the same process also works for iPhoto, iTunes, Final Cut Pro 7, Logic Pro 9, Xcode 11.5 or 11.4.1, and iWork ’09.
I’ll use Aperture as the example, but the same process also works for iPhoto, iTunes, Final Cut Pro 7, Logic Pro 9, Xcode 11.6 or 11.5, and iWork ’09.

---

### Locating the app or choosing a version

Retroactive will automatically scan your Mac to locate an existing Aperture, iPhoto, iTunes, Final Cut Pro 7, Logic Pro 9, Xcode 11.5 or 11.4.1, or iWork ’09 install. If Retroactive has already located the app you would like to run, skip to the next section.
Retroactive will automatically scan your Mac to locate an existing Aperture, iPhoto, iTunes, Final Cut Pro 7, Logic Pro 9, Xcode 11.6 or 11.5, or iWork ’09 install. If Retroactive has already located the app you would like to run, skip to the next section.

If Retroactive can’t locate an existing install of Aperture or iPhoto, you’ll either be asked to download it from the Purchased list in App Store, or re-install it from a DVD disc. You can also find the app on another Mac you own, then AirDrop it to this Mac, or restore the app from a Time Machine backup.

Expand Down Expand Up @@ -119,7 +119,7 @@ After successfully modifying or installing the app, you can play with it to your

- Support for Logic Pro 9 is experimental. You may see frequent freezes and hangs.

- Most Xcode 11.5 or 11.4.1 features should work.
- Most Xcode 11.6 or 11.5 features should work.

- After fixing iWork ’09, text format and paragraph alignment controls in the format bar should appear correctly. Scroll bars will no longer appear behind the document canvas.

Expand Down
12 changes: 10 additions & 2 deletions Retroactive.xcodeproj/project.pbxproj
Expand Up @@ -17,6 +17,8 @@
046034E72381C18A00070C86 /* BrowserKit.framework.zip in Resources */ = {isa = PBXBuildFile; fileRef = 046034E52381C18900070C86 /* BrowserKit.framework.zip */; };
046034E82381C18A00070C86 /* ProKit.framework.zip in Resources */ = {isa = PBXBuildFile; fileRef = 046034E62381C18A00070C86 /* ProKit.framework.zip */; };
046034EA2381DDB300070C86 /* ProApplicationsUpdate2010-02.dist in Resources */ = {isa = PBXBuildFile; fileRef = 046034E92381DDB300070C86 /* ProApplicationsUpdate2010-02.dist */; };
047A039A24A6EEAF00E00998 /* PluginManager in Resources */ = {isa = PBXBuildFile; fileRef = 047A039924A6EEAF00E00998 /* PluginManager */; };
047A039C24A6F3CB00E00998 /* AppKitAperture in Resources */ = {isa = PBXBuildFile; fileRef = 047A039B24A6F3CB00E00998 /* AppKitAperture */; };
321B09CD23643F89007F3FBA /* RetroApp.swift in Sources */ = {isa = PBXBuildFile; fileRef = 321B09CC23643F89007F3FBA /* RetroApp.swift */; };
321B09D523645B57007F3FBA /* CheckmarkView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 321B09CF23645B57007F3FBA /* CheckmarkView.swift */; };
321B09D623645B57007F3FBA /* util.swift in Sources */ = {isa = PBXBuildFile; fileRef = 321B09D023645B57007F3FBA /* util.swift */; };
Expand Down Expand Up @@ -125,6 +127,8 @@
046034E52381C18900070C86 /* BrowserKit.framework.zip */ = {isa = PBXFileReference; lastKnownFileType = archive.zip; path = BrowserKit.framework.zip; sourceTree = "<group>"; };
046034E62381C18A00070C86 /* ProKit.framework.zip */ = {isa = PBXFileReference; lastKnownFileType = archive.zip; path = ProKit.framework.zip; sourceTree = "<group>"; };
046034E92381DDB300070C86 /* ProApplicationsUpdate2010-02.dist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = "ProApplicationsUpdate2010-02.dist"; sourceTree = "<group>"; };
047A039924A6EEAF00E00998 /* PluginManager */ = {isa = PBXFileReference; lastKnownFileType = folder; path = PluginManager; sourceTree = "<group>"; };
047A039B24A6F3CB00E00998 /* AppKitAperture */ = {isa = PBXFileReference; lastKnownFileType = folder; path = AppKitAperture; sourceTree = "<group>"; };
321B09CC23643F89007F3FBA /* RetroApp.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RetroApp.swift; sourceTree = "<group>"; };
321B09CF23645B57007F3FBA /* CheckmarkView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CheckmarkView.swift; sourceTree = "<group>"; };
321B09D023645B57007F3FBA /* util.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = util.swift; sourceTree = "<group>"; };
Expand Down Expand Up @@ -341,7 +345,9 @@
32F763552364EA2200200ED7 /* ApertureFixer */,
60E4B4D424022BF900919F36 /* OriginFixer */,
32F763532364DEA700200ED7 /* NyxAudioAnalysis */,
047A039924A6EEAF00E00998 /* PluginManager */,
042E9E452381AC2B001D3F38 /* AppKit */,
047A039B24A6F3CB00E00998 /* AppKitAperture */,
042E9E482381AC2B001D3F38 /* VideoFixer */,
32D181C523640CDF006253DE /* Info.plist */,
6008E6E52382160400A2F659 /* Localizable.strings */,
Expand Down Expand Up @@ -651,8 +657,10 @@
60E4B4BA240207C100919F36 /* iTunesLauncher in Resources */,
607C3D822382665900FAE528 /* AudioToolbox.framework.zip in Resources */,
32D181C123640CDF006253DE /* Assets.xcassets in Resources */,
047A039A24A6EEAF00E00998 /* PluginManager in Resources */,
046034E42381B6E800070C86 /* KeynoteScript in Resources */,
60F7A06324091EFA003CD509 /* iTunes12_6_5_Assets_Diff.bin in Resources */,
047A039C24A6F3CB00E00998 /* AppKitAperture in Resources */,
32F763DD23657A8D00200ED7 /* install_name_tool_packed in Resources */,
6008E6E32382160400A2F659 /* Localizable.strings in Resources */,
604F70A1240B106B00687E1B /* SupportPath.plist in Resources */,
Expand Down Expand Up @@ -972,7 +980,7 @@
CODE_SIGN_ENTITLEMENTS = Retroactive/Support/Retroactive.entitlements;
CODE_SIGN_STYLE = Automatic;
COMBINE_HIDPI_IMAGES = YES;
CURRENT_PROJECT_VERSION = 65;
CURRENT_PROJECT_VERSION = 67;
INFOPLIST_FILE = Retroactive/Support/Info.plist;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
Expand All @@ -993,7 +1001,7 @@
CODE_SIGN_ENTITLEMENTS = Retroactive/Support/Retroactive.entitlements;
CODE_SIGN_STYLE = Automatic;
COMBINE_HIDPI_IMAGES = YES;
CURRENT_PROJECT_VERSION = 65;
CURRENT_PROJECT_VERSION = 67;
INFOPLIST_FILE = Retroactive/Support/Info.plist;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
Expand Down
59 changes: 35 additions & 24 deletions Retroactive/AppManager.swift
Expand Up @@ -408,53 +408,64 @@ class AppManager: NSObject {
}

var marginBetweenApps: CGFloat {
if osMinorVersion <= 14 {
return 43;
if osAtLeastCatalina {
return 54
}
return 54;
return 43;
}

var supportedApps: [AppType] {
if osMinorVersion <= 13 {
return [.finalCutPro7, .logicPro9, .keynote5, .pages4, .numbers2]
} else if osMinorVersion == 14 {
return [.finalCutPro7, .logicPro9, .xcode, .keynote5, .pages4, .numbers2]
} else if osMinorVersion >= 15 {
if osAtLeastBigSur {
return [.aperture, .itunes]
}
if osAtLeastCatalina {
return [.aperture, .iphoto, .itunes]
}
if osAtLeastMojave {
return [.finalCutPro7, .logicPro9, .xcode, .keynote5, .pages4, .numbers2]
}
if osAtLeastHighSierra {
return [.finalCutPro7, .logicPro9, .keynote5, .pages4, .numbers2]
}
return []
}

var getStartedSubTitle: String {
if osMinorVersion <= 13 {
return "Unlock Final Cut Pro 7 and Logic Pro 9, or fix iWork ’09.".localized()
} else if osMinorVersion == 14 {
return "Unlock Final Cut Pro 7, Logic Pro 9, Xcode 11.5 or 11.4.1, and fix iWork ’09.".localized()
} else if osMinorVersion >= 15 {
if osAtLeastBigSur {
return "Unlock Aperture or install iTunes.".localized()
}
if osAtLeastCatalina {
return "Unlock Aperture and iPhoto, or install iTunes.".localized()
}
if osAtLeastMojave {
return "Unlock Final Cut Pro 7, Logic Pro 9, Xcode 11.6 or 11.5, and fix iWork ’09.".localized()
}
if osAtLeastHighSierra {
return "Unlock Final Cut Pro 7 and Logic Pro 9, or fix iWork ’09.".localized()
}

return ""
}

var otherOSSubtitle: String {
if osMinorVersion <= 14 {
return "If you upgrade to macOS Catalina, Final Cut Pro 7, Logic Pro 9, and iWork ’09 will be locked again, and can’t be unlocked. However, Retroactive can still unlock Aperture and iPhoto, or install iTunes on macOS Catalina.".localized()
} else if osMinorVersion >= 15 {
if osAtLeastCatalina {
var otherOSHint = "Retroactive can also unlock Final Cut Pro 7, Logic Pro 9, and fix iWork ’09 on macOS Mojave or macOS High Sierra. ".localized()
otherOSHint += AppManager.shared.platformShippedAfterMojave ? "To get started, find an older Mac released before Late 2019, and install macOS Mojave on that Mac.".localized() : "To get started, install macOS Mojave on a separate volume.".localized()
return otherOSHint
}
if osAtLeastHighSierra {
return "If you upgrade to macOS Catalina, Final Cut Pro 7, Logic Pro 9, and iWork ’09 will be locked again, and can’t be unlocked. However, Retroactive can still unlock Aperture and iPhoto, or install iTunes on macOS Catalina.".localized()
}
return ""
}

var otherOSImage: NSImage? {
if osMinorVersion <= 13 {
return NSImage(named:"catalina-banner")
} else if osMinorVersion == 14 {
return NSImage(named:"catalina-banner")
} else if osMinorVersion >= 15 {
if osAtLeastCatalina {
return NSImage(named:"mojave-banner")
}
if osAtLeastHighSierra {
return NSImage(named:"catalina-banner")
}
return nil
}

Expand Down Expand Up @@ -640,7 +651,7 @@ class AppManager: NSObject {
case .logicPro9:
return "Logic Pro 9"
case .xcode:
return "Xcode 11.5 or 11.4.1".localized()
return "Xcode 11.6 or 11.5".localized()
case .keynote5:
return "Keynote ’09"
case .pages4:
Expand Down Expand Up @@ -746,7 +757,7 @@ class AppManager: NSObject {
case .logicPro9:
return ["9.1.8", "9.1.7", "9.1.6", "9.1.5", "9.1.4", "9.1.3", "9.1.2", "9.1.1", "9.1.0", "9.1", "9.0.2", "9.0.1", "9.0.0", "9.0"]
case .xcode:
return ["11.5", "11.4.1", "11.4"]
return ["11.6", "11.5", "11.4.1", "11.4"]
case .keynote5:
return ["5.3"]
case .pages4:
Expand Down Expand Up @@ -818,7 +829,7 @@ class AppManager: NSObject {
case .logicPro9:
return "9.1.8"
case .xcode:
return "11.5"
return "11.6"
case .keynote5:
return "5.3"
case .pages4:
Expand Down
26 changes: 20 additions & 6 deletions Retroactive/Common/Extensions/ProcesssInfo-Extension.swift
@@ -1,8 +1,19 @@
import Cocoa

let osFullVersion = ProcessInfo.processInfo.operatingSystemVersion
let osMajorVersion = osFullVersion.majorVersion
let osMinorVersion = osFullVersion.minorVersion
private let osFullVersion = ProcessInfo.processInfo.operatingSystemVersion
private let osMajorVersion = osFullVersion.majorVersion
private let osMinorVersion = osFullVersion.minorVersion
private let processInfo = ProcessInfo()

let osAtLeastHighSierra = processInfo.isOperatingSystemAtLeast(OperatingSystemVersion(majorVersion: 10, minorVersion: 13, patchVersion: 0))
let osAtLeastMojave = processInfo.isOperatingSystemAtLeast(OperatingSystemVersion(majorVersion: 10, minorVersion: 14, patchVersion: 0))
let osAtLeastCatalina = processInfo.isOperatingSystemAtLeast(OperatingSystemVersion(majorVersion: 10, minorVersion: 15, patchVersion: 0))
let osAtLeastBigSur = processInfo.isOperatingSystemAtLeast(OperatingSystemVersion(majorVersion: 10, minorVersion: 16, patchVersion: 0))

let discouraged_osExactlyHighSierra = osMajorVersion == 10 && osMinorVersion == 13
let discouraged_osExactlyMojave = osMajorVersion == 10 && osMinorVersion == 14
private let osExactlyCatalina = osMajorVersion == 10 && osMinorVersion == 15
private let osExactlyBigSur = (osMajorVersion == 10 && osMinorVersion == 16) || osMajorVersion == 11

extension ProcessInfo {
static var osVersionNumberString: String {
Expand All @@ -19,15 +30,18 @@ extension ProcessInfo {
}

static var versionName: String {
if (osMinorVersion == 13) {
if (discouraged_osExactlyHighSierra) {
return "macOS High Sierra"
}
if (osMinorVersion == 14) {
if (discouraged_osExactlyMojave) {
return "macOS Mojave"
}
if (osMinorVersion == 15) {
if (osExactlyCatalina) {
return "macOS Catalina"
}
if (osExactlyBigSur) {
return "macOS Big Sur"
}
return ProcessInfo.versionString
}
}
Expand Up @@ -266,7 +266,7 @@
CLANG_ENABLE_OBJC_ARC = NO;
CODE_SIGN_STYLE = Manual;
COMBINE_HIDPI_IMAGES = YES;
CURRENT_PROJECT_VERSION = 4;
CURRENT_PROJECT_VERSION = 5;
DEFINES_MODULE = YES;
DEVELOPMENT_TEAM = "";
DYLIB_COMPATIBILITY_VERSION = 1;
Expand All @@ -293,7 +293,7 @@
CLANG_ENABLE_OBJC_ARC = NO;
CODE_SIGN_STYLE = Manual;
COMBINE_HIDPI_IMAGES = YES;
CURRENT_PROJECT_VERSION = 4;
CURRENT_PROJECT_VERSION = 5;
DEFINES_MODULE = YES;
DEVELOPMENT_TEAM = "";
DYLIB_COMPATIBILITY_VERSION = 1;
Expand Down
Expand Up @@ -99,4 +99,13 @@ - (BOOL)_hasRowHeaderColumn {
return NO;

}

- (BOOL)_proIsSpinning {
return NO;
}

- (void)_autoSizeView:(id)a :(id)b :(id)c :(id)d :(id)e {
NSLog(@"Skipping _autoSizeView");
}

@end
19 changes: 19 additions & 0 deletions Retroactive/Dependencies/ApertureWrapper/AppKitWrapper.m
@@ -0,0 +1,19 @@
@import Foundation;
@import AppKit;

extern @interface NSFlippableView : NSView {
}
@end

@implementation NSFlippableView
@end

extern @interface NSToolbarClippedItemsIndicator : NSView {
}
@end

@implementation NSToolbarClippedItemsIndicator
+ (void)setCellClass:(id)setCellClass {
NSLog(@"Don't set cell class");
}
@end
43 changes: 43 additions & 0 deletions Retroactive/Dependencies/ApertureWrapper/build.tool
@@ -0,0 +1,43 @@
#!/bin/bash

set -e

cd "$(dirname "$0")"

inputPath=input
outputPath=output
version=1671.60.109
rm -rf $outputPath
mkdir $outputPath

function run
{
frameworkName=$1
frameworkPath=$2

cp -R $inputPath/$frameworkName $outputPath/

frameworkNameMoved=${frameworkName}Original

binaryPathLocal=$outputPath/$frameworkName
binaryPathLocalMoved=$outputPath/$frameworkNameMoved

binaryPathFull=$frameworkPath/$frameworkName.framework/Versions/A/$frameworkName
binaryPathFullMoved=$frameworkPath/$frameworkName.framework/Versions/A/$frameworkNameMoved

mv $binaryPathLocal $binaryPathLocalMoved

wrapperName=${frameworkName}Wrapper

clang++ $wrapperName.m -dynamiclib -o $wrapperName.o -framework CoreFoundation -framework Foundation -fmodules -Xlinker -reexport_library $binaryPathLocalMoved -install_name $binaryPathFull -compatibility_version $version -current_version $version -arch x86_64

install_name_tool -id $binaryPathFullMoved $binaryPathLocalMoved
install_name_tool -change $binaryPathFull $binaryPathFullMoved $wrapperName.o

mv $wrapperName.o $binaryPathLocal

codesign -f -s - $binaryPathLocalMoved
codesign -f -s - $binaryPathLocal
}

run "AppKit" "/System/Library/Frameworks"
4 changes: 2 additions & 2 deletions Retroactive/RootViewController.swift
Expand Up @@ -42,9 +42,9 @@ class RootViewController: NSViewController, CCNNavigationControllerDelegate, NSW
}

func alertForOSIncompatibility() {
if osMinorVersion > 15 {
if osAtLeastBigSur {
AppDelegate.showOptionSheet(title: "Update to a newer version of Retroactive".localized(),
text: String(format: "This version of Retroactive is only designed and tested for macOS High Sierra, macOS Mojave, and macOS Catalina, which may be incompatible with %@.".localized(), ProcessInfo.versionString),
text: String(format: "This version of Retroactive is only designed and tested for macOS High Sierra, macOS Mojave, and macOS Catalina, which may be incompatible with %@.".localized(), ProcessInfo.versionName),
firstButtonText: "Check for Updates",
secondButtonText: "Run Anyways",
thirdButtonText: "Quit") { (response) in
Expand Down

0 comments on commit 0598c83

Please sign in to comment.