@@ -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