Skip to content
This repository was archived by the owner on Aug 11, 2024. It is now read-only.

Commit 3f38c7e

Browse files
Improve compatibility between iWork ‘09 and macOS Mojave.
1 parent 3256857 commit 3f38c7e

File tree

31 files changed

+386
-65
lines changed

31 files changed

+386
-65
lines changed

README.md

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
1-
### Retroactive lets you run Aperture, iPhoto, and iTunes on macOS Catalina. Xcode 11.4.1 on macOS Mojave. Final Cut Pro 7, Logic Pro 9, and Keynote ’09 on macOS Mojave or macOS High Sierra.
1+
### Retroactive lets you run Aperture, iPhoto, and iTunes on macOS Catalina. Xcode 11.4.1 on macOS Mojave. Final Cut Pro 7, Logic Pro 9, and iWork ’09 on macOS Mojave or macOS High Sierra.
22

33
<p align="center">
4-
<a href="https://github.com/cormiertyshawn895/Retroactive/releases/download/1.6/Retroactive.1.6.zip" alt="Download Retroactive"><img width="282" height="68" src="screenshots/resources/download-button.png" alt="Download Retroactive"></a>
4+
<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>
55
<p>
66
<p align="center">
77
<a href="https://github.com/cormiertyshawn895/Retroactive/releases" alt="View Release Page"><img width="160" height="18" src="screenshots/resources/release-button.png" alt="View Release Page"></a>
@@ -37,17 +37,17 @@ Pick the app you want to run. If you want to run multiple apps from here, pick a
3737

3838
![](screenshots/4.jpg)
3939

40-
On macOS Mojave and macOS High Sierra, Retroactive can also unlock Final Cut Pro 7, Logic Pro 9 (experimental), Xcode 11.4.1 (requires macOS Mojave), and fix Keynote ’09.
40+
On macOS Mojave and macOS High Sierra, Retroactive can also unlock Final Cut Pro 7, Logic Pro 9 (experimental), Xcode 11.4.1 (requires macOS Mojave), and fix iWork ’09.
4141

4242
![](screenshots/4b.jpg)
4343

44-
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.4.1, and Keynote ’09.
44+
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.4.1, and iWork ’09.
4545

4646
---
4747

4848
### Locating the app or choosing a version
4949

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

5252
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.
5353

@@ -121,8 +121,12 @@ After successfully modifying or installing the app, you can play with it to your
121121

122122
- Most Xcode 11.4.1 features should work.
123123

124+
- 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.
125+
124126
- After fixing Keynote ’09 with Retroactive, you can normally play slideshows.
125127

128+
- After fixing Pages ’09 with Retroactive, typing and scrolling in Pages ‘09 should be more responsive.
129+
126130
---
127131

128132
### Syncing with a device

Retroactive.xcodeproj/project.pbxproj

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -854,14 +854,14 @@
854854
CODE_SIGN_ENTITLEMENTS = Retroactive/Support/Retroactive.entitlements;
855855
CODE_SIGN_STYLE = Automatic;
856856
COMBINE_HIDPI_IMAGES = YES;
857-
CURRENT_PROJECT_VERSION = 52;
857+
CURRENT_PROJECT_VERSION = 53;
858858
INFOPLIST_FILE = Retroactive/Support/Info.plist;
859859
LD_RUNPATH_SEARCH_PATHS = (
860860
"$(inherited)",
861861
"@executable_path/../Frameworks",
862862
);
863863
MACOSX_DEPLOYMENT_TARGET = 10.13;
864-
MARKETING_VERSION = 1.6;
864+
MARKETING_VERSION = 1.7;
865865
PRODUCT_BUNDLE_IDENTIFIER = com.retroactive.Retroactive;
866866
PRODUCT_NAME = "$(TARGET_NAME)";
867867
SWIFT_OBJC_BRIDGING_HEADER = "Retroactive/Libraries/Bridging-Header.h";
@@ -875,14 +875,14 @@
875875
CODE_SIGN_ENTITLEMENTS = Retroactive/Support/Retroactive.entitlements;
876876
CODE_SIGN_STYLE = Automatic;
877877
COMBINE_HIDPI_IMAGES = YES;
878-
CURRENT_PROJECT_VERSION = 52;
878+
CURRENT_PROJECT_VERSION = 53;
879879
INFOPLIST_FILE = Retroactive/Support/Info.plist;
880880
LD_RUNPATH_SEARCH_PATHS = (
881881
"$(inherited)",
882882
"@executable_path/../Frameworks",
883883
);
884884
MACOSX_DEPLOYMENT_TARGET = 10.13;
885-
MARKETING_VERSION = 1.6;
885+
MARKETING_VERSION = 1.7;
886886
PRODUCT_BUNDLE_IDENTIFIER = com.retroactive.Retroactive;
887887
PRODUCT_NAME = "$(TARGET_NAME)";
888888
SWIFT_OBJC_BRIDGING_HEADER = "Retroactive/Libraries/Bridging-Header.h";

Retroactive/AppManager.swift

Lines changed: 60 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,8 @@ enum AppType {
1212
case finalCutPro7
1313
case logicPro9
1414
case keynote5
15+
case pages4
16+
case numbers2
1517
case xcode
1618

1719
case proVideoUpdate
@@ -396,7 +398,7 @@ class AppManager: NSObject {
396398
if osMinorVersion <= 13 {
397399
return [.finalCutPro7, .logicPro9, .keynote5]
398400
} else if osMinorVersion == 14 {
399-
return [.finalCutPro7, .logicPro9, .xcode, .keynote5]
401+
return [.finalCutPro7, .logicPro9, .xcode, .keynote5, .pages4, .numbers2]
400402
} else if osMinorVersion >= 15 {
401403
return [.aperture, .iphoto, .itunes]
402404
}
@@ -407,7 +409,7 @@ class AppManager: NSObject {
407409
if osMinorVersion <= 13 {
408410
return "Unlock Final Cut Pro 7 and Logic Pro 9, or fix Keynote ’09.".localized()
409411
} else if osMinorVersion == 14 {
410-
return "Unlock Final Cut Pro 7, Logic Pro 9, and Xcode 11.4.1, or fix Keynote ’09.".localized()
412+
return "Unlock Final Cut Pro 7, Logic Pro 9, and Xcode 11.4.1, or fix iWork ’09.".localized()
411413
} else if osMinorVersion >= 15 {
412414
return "Unlock Aperture and iPhoto, or install iTunes.".localized()
413415
}
@@ -416,9 +418,9 @@ class AppManager: NSObject {
416418

417419
var otherOSSubtitle: String {
418420
if osMinorVersion <= 14 {
419-
return "If you upgrade to macOS Catalina, Final Cut Pro 7, Logic Pro 9, and Keynote ’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()
421+
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()
420422
} else if osMinorVersion >= 15 {
421-
var otherOSHint = "Retroactive can also unlock Final Cut Pro 7, Logic Pro 9, and fix Keynote ’09 on macOS Mojave or macOS High Sierra. ".localized()
423+
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()
422424
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()
423425
return otherOSHint
424426
}
@@ -462,7 +464,7 @@ class AppManager: NSObject {
462464
return nil
463465
case .logicPro9:
464466
return nil
465-
case .keynote5:
467+
case .keynote5, .pages4, .numbers2:
466468
return nil
467469
case .proVideoUpdate:
468470
return fCPUpdate
@@ -505,6 +507,10 @@ class AppManager: NSObject {
505507
return "Xcode 11.4.1"
506508
case .keynote5:
507509
return "Keynote ’09"
510+
case .pages4:
511+
return "Pages ’09"
512+
case .numbers2:
513+
return "Numbers ’09"
508514
case .proVideoUpdate:
509515
return "Pro Applications Update 2010-02".localized()
510516
default:
@@ -543,6 +549,10 @@ class AppManager: NSObject {
543549
return "Xcode"
544550
case .keynote5:
545551
return "Keynote"
552+
case .pages4:
553+
return "Pages"
554+
case .numbers2:
555+
return "Numbers"
546556
default:
547557
return self.nameOfChosenApp
548558
}
@@ -579,6 +589,10 @@ class AppManager: NSObject {
579589
return ["11.4.1", "11.4"]
580590
case .keynote5:
581591
return ["1170", "5.3", "5.2", "5.1.1", "5.1", "5.0.5", "5.0.4", "5.0.3", "5.0.2", "5.0.1", "5.0"]
592+
case .pages4:
593+
return ["1048", "4.3", "4.2", "4.1.1", "4.1", "4.0.5", "4.0.4", "4.0.3", "4.0.2", "4.0.1", "4.0"]
594+
case .numbers2:
595+
return ["554", "2.3", "2.2", "2.1.1", "2.1", "2.0.5", "2.0.4", "2.0.3", "2.0.2", "2.0.1", "2.0"]
582596
default:
583597
return []
584598
}
@@ -615,6 +629,10 @@ class AppManager: NSObject {
615629
return "11.4.1"
616630
case .keynote5:
617631
return "5.3"
632+
case .pages4:
633+
return "4.3"
634+
case .numbers2:
635+
return "2.3"
618636
default:
619637
return ""
620638
}
@@ -639,6 +657,10 @@ class AppManager: NSObject {
639657
return "com.apple.dt.Xcode"
640658
case .keynote5:
641659
return "com.apple.iWork.Keynote"
660+
case .pages4:
661+
return "com.apple.iWork.Pages"
662+
case .numbers2:
663+
return "com.apple.iWork.Numbers"
642664
default:
643665
return ""
644666
}
@@ -655,14 +677,18 @@ class AppManager: NSObject {
655677
case .itunes:
656678
fallthrough
657679
case .xcode:
658-
// Intentionally left unused
680+
// Intentionally left unused for everything after this enum case
659681
return "com.apple.intentionally-left-unused"
660682
case .finalCutPro7:
661683
return "com.apple.FinalCutPro7"
662684
case .logicPro9:
663685
return "com.apple.logic.pro9"
664686
case .keynote5:
665687
return "com.apple.iWork.Keynote5"
688+
case .pages4:
689+
return "com.apple.iWork.Pages4"
690+
case .numbers2:
691+
return "com.apple.iWork.Numbers2"
666692
default:
667693
return ""
668694
}
@@ -688,7 +714,7 @@ class AppManager: NSObject {
688714
}
689715
case .logicPro9:
690716
return "GeneralFixerScript"
691-
case .keynote5:
717+
case .keynote5, .pages4, .numbers2:
692718
return "KeynoteScript"
693719
default:
694720
fatalError()
@@ -709,7 +735,7 @@ class AppManager: NSObject {
709735
return "VideoFixer"
710736
case .logicPro9:
711737
return "VideoFixer"
712-
case .keynote5:
738+
case .keynote5, .pages4, .numbers2:
713739
return "KeynoteFixer"
714740
default:
715741
fatalError()
@@ -754,6 +780,10 @@ class AppManager: NSObject {
754780
return "9999.99" // Intentionally left unused
755781
case .keynote5:
756782
return "1171"
783+
case .pages4:
784+
return "555"
785+
case .numbers2:
786+
return "1049"
757787
default:
758788
return ""
759789
}
@@ -774,7 +804,7 @@ class AppManager: NSObject {
774804
return NSImage(named: "airdrop_guide_aperture")
775805
case .iphoto:
776806
return NSImage(named: "airdrop_guide_iphoto")
777-
case .keynote5:
807+
case .keynote5, .pages4, .numbers2:
778808
return NSImage(named: "iwork_stage2")
779809
case .finalCutPro7:
780810
return NSImage(named: "iwork_stage2")
@@ -795,7 +825,7 @@ class AppManager: NSObject {
795825
return NSImage(named: "appstore_guide_aperture")
796826
case .iphoto:
797827
return NSImage(named: "appstore_guide_iphoto")
798-
case .keynote5:
828+
case .keynote5, .pages4, .numbers2:
799829
return NSImage(named: "iwork_stage1")
800830
case .finalCutPro7:
801831
return NSImage(named: "fcp7_stage1")
@@ -829,6 +859,10 @@ class AppManager: NSObject {
829859
return NSImage(named: "logic9_cartoon")
830860
case .keynote5:
831861
return NSImage(named: "keynote5_cartoon")
862+
case .pages4:
863+
return NSImage(named: "pages4_cartoon")
864+
case .numbers2:
865+
return NSImage(named: "numbers2_cartoon")
832866
case .proVideoUpdate:
833867
return NSImage(named: "fcpstudio_cartoon")
834868
default:
@@ -899,7 +933,7 @@ class AppManager: NSObject {
899933
switch appType {
900934
case .itunes:
901935
return "install".localized()
902-
case .keynote5:
936+
case .keynote5, .pages4, .numbers2:
903937
return "fix".localized()
904938
case .proVideoUpdate:
905939
return "install".localized()
@@ -963,8 +997,8 @@ class AppManager: NSObject {
963997
return dvdTemplate
964998
case .logicPro9:
965999
return "\(dvdTemplate) \n\n\(appStoreTemplate)"
966-
case .keynote5:
967-
return "\n\nYou can download and install iWork ’09, which includes Keynote ’09, from The Internet Archive.".localized()
1000+
case .keynote5, .pages4, .numbers2:
1001+
return "\n\n" + String(format: "You can download and install iWork ’09, which includes %@, from The Internet Archive.".localized(), nameOfChosenApp)
9681002
default:
9691003
return ""
9701004
}
@@ -989,7 +1023,7 @@ class AppManager: NSObject {
9891023
return dvdTemplate
9901024
case .xcode:
9911025
return String(format: "Download %@".localized(), nameOfChosenApp)
992-
case .keynote5:
1026+
case .keynote5, .pages4, .numbers2:
9931027
return "Download iWork ’09".localized()
9941028
default:
9951029
return ""
@@ -1023,7 +1057,7 @@ class AppManager: NSObject {
10231057
return "Some serial numbers for Final Cut Pro 7.0 do not work with Final Cut Pro 7.0.3. If you are asked to register again, you need to find and enter a serial number compatible with Final Cut Pro 7.0.3.".localized()
10241058
case .logicPro9:
10251059
return nil
1026-
case .keynote5:
1060+
case .keynote5, .pages4, .numbers2:
10271061
return nil
10281062
default:
10291063
return nil
@@ -1045,7 +1079,7 @@ class AppManager: NSObject {
10451079
AppDelegate.current.safelyOpenURL(AppManager.shared.logicDVD)
10461080
case .xcode:
10471081
AppDelegate.current.safelyOpenURL(AppManager.shared.xcode114URL)
1048-
case .keynote5:
1082+
case .keynote5, .pages4, .numbers2:
10491083
AppDelegate.current.safelyOpenURL(AppManager.shared.iWork09DVD)
10501084
default:
10511085
openMacAppStore()
@@ -1075,7 +1109,7 @@ class AppManager: NSObject {
10751109
AppDelegate.current.safelyOpenURL(AppManager.shared.logicUpdate)
10761110
case .xcode:
10771111
NSWorkspace.shared.selectFile(nil, inFileViewerRootedAtPath: ("~/Downloads" as NSString).expandingTildeInPath)
1078-
case .keynote5:
1112+
case .keynote5, .pages4, .numbers2:
10791113
AppDelegate.current.safelyOpenURL(AppManager.shared.iWork09Update)
10801114
default:
10811115
return
@@ -1144,7 +1178,7 @@ class AppManager: NSObject {
11441178
fallthrough
11451179
case .finalCutPro7:
11461180
return true
1147-
case .keynote5:
1181+
case .keynote5, .pages4, .numbers2:
11481182
return true
11491183
case .logicPro9:
11501184
return false
@@ -1211,6 +1245,10 @@ class AppManager: NSObject {
12111245
return String(format: basicFormat, "Final Cut Pro 7 only supports XML exports".localized(), self.currentVMName)
12121246
case .keynote5:
12131247
return String(format: basicFormat, "Keynote ’09 only supports PPTX exports".localized(), self.currentVMName)
1248+
case .pages4:
1249+
return String(format: basicFormat, "Pages ’09 only supports DOCX exports".localized(), self.currentVMName)
1250+
case .numbers2:
1251+
return String(format: basicFormat, "Numbers ’09 only supports XLSX exports".localized(), self.currentVMName)
12141252
case .logicPro9:
12151253
return ""
12161254
case .itunes:
@@ -1234,6 +1272,10 @@ class AppManager: NSObject {
12341272
return "You can export existing projects into XML files, so that SendToX, DaVinci Resolve, Media Composer, and Premiere Pro can open them. To use editing features such as timeline and preview, run Retroactive on a real Mac.".localized()
12351273
case .keynote5:
12361274
return "You can export existing Keynote presentations into PowerPoint presentations. To view and edit your Keynote slides, animations, and transitions, run Retroactive on a real Mac.".localized()
1275+
case .pages4:
1276+
return "You can export existing Pages documents into Word documents. To view and edit your Pages documents, run Retroactive on a real Mac.".localized()
1277+
case .numbers2:
1278+
return "You can export existing Numbers spreadsheets into Excel spreadsheets. To view and edit your Numbers spreadsheets, run Retroactive on a real Mac.".localized()
12371279
case .logicPro9:
12381280
return ""
12391281
case .itunes:

Retroactive/Dependencies/ApertureFixer/ApertureFixer/NSObject+Fixer.m

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@
88
#import <AppKit/AppKit.h>
99
#import "NSObject+Fixer.h"
1010

11-
static
1211
@implementation NSObject (Fixer)
1312

1413
+ (NSFont *)swizzled_proSystemFontWithFontName:(NSString *)name pointSize:(CGFloat)size fontAppearance:(id)appearance useSystemHelveticaAdjustments:(BOOL)adjustments {

0 commit comments

Comments
 (0)