Skip to content

Commit a75c54f

Browse files
authored
Merge pull request #632 from abiligiri/feature/more_managed_preferences
Restrict allowed versions & hide 'Support Xcodes'
2 parents dd9a348 + e3f996d commit a75c54f

3 files changed

Lines changed: 64 additions & 12 deletions

File tree

Xcodes/Backend/AppState.swift

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,8 @@ enum PreferenceKey: String {
2424
case downloader
2525
case dataSource
2626
case xcodeListCategory
27+
case allowedMajorVersions
28+
case hideSupportXcodes
2729

2830
func isManaged() -> Bool { UserDefaults.standard.objectIsForced(forKey: self.rawValue) }
2931
}

Xcodes/Frontend/XcodeList/BottomStatusBar.swift

Lines changed: 41 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@ import SwiftUI
1111

1212
struct BottomStatusModifier: ViewModifier {
1313
@EnvironmentObject var appState: AppState
14+
@AppStorage(PreferenceKey.hideSupportXcodes.rawValue) var hideSupportXcodes = false
15+
1416
@SwiftUI.Environment(\.openURL) var openURL: OpenURLAction
1517

1618
func body(content: Content) -> some View {
@@ -20,17 +22,19 @@ struct BottomStatusModifier: ViewModifier {
2022
Divider()
2123
HStack {
2224
Text(appState.bottomStatusBarMessage)
23-
.font(.subheadline)
25+
.font(.subheadline)
2426
Spacer()
25-
Button(action: {
26-
openURL(URL(string: "https://opencollective.com/xcodesapp")!)
27-
}) {
28-
HStack {
29-
Image(systemName: "heart.circle")
30-
Text("Support.Xcodes")
27+
if !hideSupportXcodes {
28+
Button(action: {
29+
openURL(URL(string: "https://opencollective.com/xcodesapp")!)
30+
}) {
31+
HStack {
32+
Image(systemName: "heart.circle")
33+
Text("Support.Xcodes")
34+
}
3135
}
3236
}
33-
Text(Bundle.main.shortVersion!)
37+
Text("\(Bundle.main.shortVersion!) (\(Bundle.main.version!))")
3438
.font(.subheadline)
3539
}
3640
.frame(maxWidth: .infinity, maxHeight: 30, alignment: .leading)
@@ -51,8 +55,34 @@ extension View {
5155

5256
struct Previews_BottomStatusBar_Previews: PreviewProvider {
5357
static var previews: some View {
54-
HStack {
55-
56-
}.bottomStatusBar()
58+
Group {
59+
HStack {
60+
61+
}
62+
.bottomStatusBar()
63+
.environmentObject({ () -> AppState in
64+
let a = AppState()
65+
return a }()
66+
)
67+
.defaultAppStorage({ () -> UserDefaults in
68+
let d = UserDefaults(suiteName: "hide_support")!
69+
d.set(true, forKey: PreferenceKey.hideSupportXcodes.rawValue)
70+
return d
71+
}())
72+
73+
HStack {
74+
75+
}
76+
.bottomStatusBar()
77+
.environmentObject({ () -> AppState in
78+
let a = AppState()
79+
return a }()
80+
)
81+
.defaultAppStorage({ () -> UserDefaults in
82+
let d = UserDefaults(suiteName: "show_support")!
83+
d.set(false, forKey: PreferenceKey.hideSupportXcodes.rawValue)
84+
return d
85+
}())
86+
}
5787
}
5888
}

Xcodes/Frontend/XcodeList/XcodeListView.swift

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,8 @@ struct XcodeListView: View {
88
private let searchText: String
99
private let category: XcodeListCategory
1010
private let isInstalledOnly: Bool
11-
11+
@AppStorage(PreferenceKey.allowedMajorVersions.rawValue) private var allowedMajorVersions = Int.max
12+
1213
init(selectedXcodeID: Binding<Xcode.ID?>, searchText: String, category: XcodeListCategory, isInstalledOnly: Bool) {
1314
self._selectedXcodeID = selectedXcodeID
1415
self.searchText = searchText
@@ -27,6 +28,22 @@ struct XcodeListView: View {
2728
xcodes = appState.allXcodes.filter { $0.version.isPrerelease }
2829
}
2930

31+
let latestMajor = xcodes.sorted(\.version)
32+
.filter { $0.version.isNotPrerelease }
33+
.last?
34+
.version
35+
.major
36+
37+
xcodes = xcodes.filter {
38+
if $0.installState.notInstalled,
39+
let latestMajor = latestMajor,
40+
$0.version.major < (latestMajor - min(latestMajor,allowedMajorVersions)) {
41+
return false
42+
}
43+
44+
return true
45+
}
46+
3047
if !searchText.isEmpty {
3148
xcodes = xcodes.filter { $0.description.contains(searchText) }
3249
}
@@ -87,6 +104,9 @@ struct XcodeListView_Previews: PreviewProvider {
87104
Xcode(version: Version("12.2.0")!, installState: .notInstalled, selected: false, icon: nil),
88105
Xcode(version: Version("12.1.0")!, installState: .installing(.downloading(progress: configure(Progress(totalUnitCount: 100)) { $0.completedUnitCount = 40 })), selected: false, icon: nil),
89106
Xcode(version: Version("12.0.0")!, installState: .installed(Path("/Applications/Xcode-12.3.0.app")!), selected: false, icon: nil),
107+
Xcode(version: Version("10.1.0")!, installState: .notInstalled, selected: false, icon: nil),
108+
Xcode(version: Version("10.0.0")!, installState: .installed(Path("/Applications/Xcode-10.0.0.app")!), selected: false, icon: nil),
109+
Xcode(version: Version("9.0.0")!, installState: .notInstalled, selected: false, icon: nil),
90110
]
91111
return a
92112
}())

0 commit comments

Comments
 (0)