|
1 | 1 | import Foundation
|
2 | 2 |
|
| 3 | +public enum PlatformVersionCondition { |
| 4 | + case past |
| 5 | + case current |
| 6 | + case future |
| 7 | +} |
| 8 | + |
3 | 9 | public protocol PlatformVersion {
|
4 |
| - var isCurrent: Bool { get } |
| 10 | + var condition: PlatformVersionCondition { get } |
| 11 | +} |
| 12 | + |
| 13 | +extension PlatformVersion { |
| 14 | + var isCurrent: Bool { |
| 15 | + condition == .current |
| 16 | + } |
| 17 | + |
| 18 | + var isCurrentOrPast: Bool { |
| 19 | + condition == .current || condition == .past |
| 20 | + } |
5 | 21 | }
|
6 | 22 |
|
7 | 23 | public struct iOSVersion: PlatformVersion {
|
8 |
| - public let isCurrent: Bool |
| 24 | + public let condition: PlatformVersionCondition |
9 | 25 |
|
10 |
| - public init(isCurrent: () -> Bool) { |
11 |
| - self.isCurrent = isCurrent() |
| 26 | + public init(condition: () -> PlatformVersionCondition) { |
| 27 | + self.condition = condition() |
12 | 28 | }
|
13 | 29 | }
|
14 | 30 |
|
15 | 31 | extension iOSVersion {
|
16 | 32 | public static let v13 = iOSVersion {
|
17 | 33 | if #available(iOS 14, *) {
|
18 |
| - return false |
| 34 | + return .past |
19 | 35 | }
|
20 | 36 | if #available(iOS 13, *) {
|
21 |
| - return true |
| 37 | + return .current |
22 | 38 | }
|
23 |
| - return false |
| 39 | + return .future |
24 | 40 | }
|
25 | 41 |
|
26 | 42 | public static let v14 = iOSVersion {
|
27 | 43 | if #available(iOS 15, *) {
|
28 |
| - return false |
| 44 | + return .past |
29 | 45 | }
|
30 | 46 | if #available(iOS 14, *) {
|
31 |
| - return true |
| 47 | + return .current |
32 | 48 | }
|
33 |
| - return false |
| 49 | + return .future |
34 | 50 | }
|
35 | 51 |
|
36 | 52 | public static let v15 = iOSVersion {
|
37 | 53 | if #available(iOS 16, *) {
|
38 |
| - return false |
| 54 | + return .past |
39 | 55 | }
|
40 | 56 | if #available(iOS 15, *) {
|
41 |
| - return true |
| 57 | + return .current |
42 | 58 | }
|
43 |
| - return false |
| 59 | + return .future |
44 | 60 | }
|
45 | 61 |
|
46 | 62 | public static let v16 = iOSVersion {
|
47 | 63 | if #available(iOS 17, *) {
|
48 |
| - return false |
| 64 | + return .past |
49 | 65 | }
|
50 | 66 | if #available(iOS 16, *) {
|
51 |
| - return true |
| 67 | + return .current |
52 | 68 | }
|
53 |
| - return false |
| 69 | + return .future |
54 | 70 | }
|
55 | 71 |
|
56 | 72 | public static let v17 = iOSVersion {
|
57 | 73 | if #available(iOS 18, *) {
|
58 |
| - return false |
| 74 | + return .past |
59 | 75 | }
|
60 | 76 | if #available(iOS 17, *) {
|
61 |
| - return true |
| 77 | + return .current |
62 | 78 | }
|
63 |
| - return false |
| 79 | + return .future |
64 | 80 | }
|
65 | 81 | }
|
66 | 82 |
|
67 | 83 | public struct tvOSVersion: PlatformVersion {
|
68 |
| - public let isCurrent: Bool |
| 84 | + public let condition: PlatformVersionCondition |
69 | 85 |
|
70 |
| - public init(isCurrent: () -> Bool) { |
71 |
| - self.isCurrent = isCurrent() |
| 86 | + public init(condition: () -> PlatformVersionCondition) { |
| 87 | + self.condition = condition() |
72 | 88 | }
|
73 | 89 | }
|
74 | 90 |
|
75 | 91 | extension tvOSVersion {
|
76 | 92 | public static let v13 = tvOSVersion {
|
77 | 93 | if #available(tvOS 14, *) {
|
78 |
| - return false |
| 94 | + return .past |
79 | 95 | }
|
80 | 96 | if #available(tvOS 13, *) {
|
81 |
| - return true |
| 97 | + return .current |
82 | 98 | }
|
83 |
| - return false |
| 99 | + return .future |
84 | 100 | }
|
85 | 101 |
|
86 | 102 | public static let v14 = tvOSVersion {
|
87 | 103 | if #available(tvOS 15, *) {
|
88 |
| - return false |
| 104 | + return .past |
89 | 105 | }
|
90 | 106 | if #available(tvOS 14, *) {
|
91 |
| - return true |
| 107 | + return .current |
92 | 108 | }
|
93 |
| - return false |
| 109 | + return .future |
94 | 110 | }
|
95 | 111 |
|
96 | 112 | public static let v15 = tvOSVersion {
|
97 | 113 | if #available(tvOS 16, *) {
|
98 |
| - return false |
| 114 | + return .past |
99 | 115 | }
|
100 | 116 | if #available(tvOS 15, *) {
|
101 |
| - return true |
| 117 | + return .current |
102 | 118 | }
|
103 |
| - return false |
| 119 | + return .future |
104 | 120 | }
|
105 | 121 |
|
106 | 122 | public static let v16 = tvOSVersion {
|
107 | 123 | if #available(tvOS 17, *) {
|
108 |
| - return false |
| 124 | + return .past |
109 | 125 | }
|
110 | 126 | if #available(tvOS 16, *) {
|
111 |
| - return true |
| 127 | + return .current |
112 | 128 | }
|
113 |
| - return false |
| 129 | + return .future |
114 | 130 | }
|
115 | 131 |
|
116 | 132 | public static let v17 = tvOSVersion {
|
117 | 133 | if #available(tvOS 18, *) {
|
118 |
| - return false |
| 134 | + return .past |
119 | 135 | }
|
120 | 136 | if #available(tvOS 17, *) {
|
121 |
| - return true |
| 137 | + return .current |
122 | 138 | }
|
123 |
| - return false |
| 139 | + return .future |
124 | 140 | }
|
125 | 141 | }
|
126 | 142 |
|
127 | 143 | public struct macOSVersion: PlatformVersion {
|
128 |
| - public let isCurrent: Bool |
| 144 | + public let condition: PlatformVersionCondition |
129 | 145 |
|
130 |
| - public init(isCurrent: () -> Bool) { |
131 |
| - self.isCurrent = isCurrent() |
| 146 | + public init(condition: () -> PlatformVersionCondition) { |
| 147 | + self.condition = condition() |
132 | 148 | }
|
133 | 149 | }
|
134 | 150 |
|
135 | 151 | extension macOSVersion {
|
136 | 152 | public static let v10_15 = macOSVersion {
|
137 | 153 | if #available(macOS 11, *) {
|
138 |
| - return false |
| 154 | + return .past |
139 | 155 | }
|
140 | 156 | if #available(macOS 10.15, *) {
|
141 |
| - return true |
| 157 | + return .current |
142 | 158 | }
|
143 |
| - return false |
| 159 | + return .future |
144 | 160 | }
|
145 | 161 |
|
146 | 162 | public static let v10_15_4 = macOSVersion {
|
147 | 163 | if #available(macOS 11, *) {
|
148 |
| - return false |
| 164 | + return .past |
149 | 165 | }
|
150 | 166 | if #available(macOS 10.15.4, *) {
|
151 |
| - return true |
| 167 | + return .current |
152 | 168 | }
|
153 |
| - return false |
| 169 | + return .future |
154 | 170 | }
|
155 | 171 |
|
156 | 172 | public static let v11 = macOSVersion {
|
157 | 173 | if #available(macOS 12, *) {
|
158 |
| - return false |
| 174 | + return .past |
159 | 175 | }
|
160 | 176 | if #available(macOS 11, *) {
|
161 |
| - return true |
| 177 | + return .current |
162 | 178 | }
|
163 |
| - return false |
| 179 | + return .future |
164 | 180 | }
|
165 | 181 |
|
166 | 182 | public static let v12 = macOSVersion {
|
167 | 183 | if #available(macOS 13, *) {
|
168 |
| - return false |
| 184 | + return .past |
169 | 185 | }
|
170 | 186 | if #available(macOS 12, *) {
|
171 |
| - return true |
| 187 | + return .current |
172 | 188 | }
|
173 |
| - return false |
| 189 | + return .future |
174 | 190 | }
|
175 | 191 |
|
176 | 192 | public static let v13 = macOSVersion {
|
177 | 193 | if #available(macOS 14, *) {
|
178 |
| - return false |
| 194 | + return .past |
179 | 195 | }
|
180 | 196 | if #available(macOS 13, *) {
|
181 |
| - return true |
| 197 | + return .current |
182 | 198 | }
|
183 |
| - return false |
| 199 | + return .future |
184 | 200 | }
|
185 | 201 |
|
186 | 202 | public static let v14 = macOSVersion {
|
187 | 203 | if #available(macOS 15, *) {
|
188 |
| - return false |
| 204 | + return .past |
189 | 205 | }
|
190 | 206 | if #available(macOS 14, *) {
|
191 |
| - return true |
| 207 | + return .current |
192 | 208 | }
|
193 |
| - return false |
| 209 | + return .future |
194 | 210 | }
|
195 | 211 | }
|
0 commit comments