@@ -17,6 +17,24 @@ func envEnable(_ key: String, default defaultValue: Bool = false) -> Bool {
17
17
}
18
18
}
19
19
20
+ // MARK: - Env and Config
21
+
22
+ let isXcodeEnv = Context . environment [ " __CFBundleIdentifier " ] == " com.apple.dt.Xcode "
23
+
24
+ // Xcode use clang as linker which supports "-iframework" while SwiftPM use swiftc as linker which supports "-Fsystem"
25
+ let systemFrameworkSearchFlag = isXcodeEnv ? " -iframework " : " -Fsystem "
26
+
27
+ let swiftBinPath = Context . environment [ " _ " ] ?? " /usr/bin/swift "
28
+ let swiftBinURL = URL ( fileURLWithPath: swiftBinPath)
29
+ let SDKPath = swiftBinURL. deletingLastPathComponent ( ) . deletingLastPathComponent ( ) . deletingLastPathComponent ( ) . path
30
+ let includePath = SDKPath . appending ( " /usr/lib/swift " )
31
+
32
+ var sharedCSettings : [ CSetting ] = [
33
+ . unsafeFlags( [ " -I " , includePath] , . when( platforms: . nonDarwinPlatforms) ) ,
34
+ . define( " __COREFOUNDATION_FORSWIFTFOUNDATIONONLY__ " , to: " 1 " , . when( platforms: . nonDarwinPlatforms) ) ,
35
+ . define( " _WASI_EMULATED_SIGNAL " , . when( platforms: [ . wasi] ) ) ,
36
+ ]
37
+
20
38
var sharedSwiftSettings : [ SwiftSetting ] = [
21
39
. enableUpcomingFeature( " BareSlashRegexLiterals " ) ,
22
40
. enableUpcomingFeature( " InternalImportsByDefault " ) ,
@@ -25,54 +43,27 @@ var sharedSwiftSettings: [SwiftSetting] = [
25
43
. swiftLanguageMode( . v5) ,
26
44
]
27
45
46
+ // MARK: - [env] OPENGRAPH_TARGET_RELEASE
47
+
28
48
let releaseVersion = Context . environment [ " OPENSWIFTUI_TARGET_RELEASE " ] . flatMap { Int ( $0) } ?? 2024
49
+ sharedCSettings. append ( . define( " OPENSWIFTUI_RELEASE " , to: " \( releaseVersion) " ) )
29
50
sharedSwiftSettings. append ( . define( " OPENSWIFTUI_RELEASE_ \( releaseVersion) " ) )
30
51
if releaseVersion >= 2021 {
31
52
for year in 2021 ... releaseVersion {
32
53
sharedSwiftSettings. append ( . define( " OPENSWIFTUI_SUPPORT_ \( year) _API " ) )
33
54
}
34
55
}
35
56
36
- let platforms : [ SupportedPlatform ] = switch releaseVersion {
37
- case 2024 : // iOS 18.0
38
- [
39
- . iOS( . v18) ,
40
- . macOS( . v15) ,
41
- . macCatalyst( . v18) ,
42
- . tvOS( . v18) ,
43
- . watchOS( . v10) ,
44
- . visionOS( . v2) ,
45
- ]
46
- case 2021 : // iOS 15.5
47
- [
48
- . iOS( . v15) ,
49
- . macOS( . v12) ,
50
- . macCatalyst( . v15) ,
51
- . tvOS( . v15) ,
52
- . watchOS( . v7) ,
53
- ]
54
- default :
55
- [
56
- . iOS( . v13) ,
57
- . macOS( . v10_15) ,
58
- . macCatalyst( . v13) ,
59
- . tvOS( . v13) ,
60
- . watchOS( . v7) , // WKApplicationMain is available for watchOS 7.0+
61
- . visionOS( . v1) ,
62
- ]
63
- }
64
-
65
- let isXcodeEnv = Context . environment [ " __CFBundleIdentifier " ] == " com.apple.dt.Xcode "
66
-
67
- // Xcode use clang as linker which supports "-iframework" while SwiftPM use swiftc as linker which supports "-Fsystem"
68
- let systemFrameworkSearchFlag = isXcodeEnv ? " -iframework " : " -Fsystem "
57
+ // MARK: - [env] OPENSWIFTUI_DEVELOPMENT
69
58
70
59
let development = envEnable ( " OPENSWIFTUI_DEVELOPMENT " )
71
60
72
61
if development {
73
62
sharedSwiftSettings. append ( . define( " OPENSWIFTUI_DEVELOPMENT " ) )
74
63
}
75
64
65
+ // MARK: - [env] OPENSWIFTUI_WERROR
66
+
76
67
let warningsAsErrorsCondition = envEnable ( " OPENSWIFTUI_WERROR " , default: isXcodeEnv && development)
77
68
if warningsAsErrorsCondition {
78
69
// Hold off the werror feature as we can't avoid the concurrency warning.
@@ -82,6 +73,12 @@ if warningsAsErrorsCondition {
82
73
// sharedSwiftSettings.append(.unsafeFlags(["-Wwarning", "concurrency"]))
83
74
}
84
75
76
+ // MARK: - [env] OPENSWIFTUI_BRIDGE_FRAMEWORK
77
+
78
+ let bridgeFramework = Context . environment [ " OPENSWIFTUI_BRIDGE_FRAMEWORK " ] ?? " SwiftUI "
79
+
80
+ // MARK: - Targets
81
+
85
82
// NOTE:
86
83
// In macOS: Mac Catalyst App will use macOS-varient build of SwiftUI.framework in /System/Library/Framework and iOS varient of SwiftUI.framework in /System/iOSSupport/System/Library/Framework
87
84
// Add `|| Mac Catalyst` check everywhere in `OpenSwiftUICore` and `OpenSwiftUI_SPI`.
@@ -113,7 +110,6 @@ let openSwiftUIExtensionTarget = Target.target(
113
110
swiftSettings: sharedSwiftSettings
114
111
)
115
112
116
- let bridgeFramework = Context . environment [ " OPENSWIFTUI_BRIDGE_FRAMEWORK " ] ?? " SwiftUI "
117
113
let openSwiftUIBridgeTarget = Target . target (
118
114
name: " OpenSwiftUIBridge " ,
119
115
dependencies: [
@@ -168,11 +164,6 @@ let openSwiftUIBridgeTestTarget = Target.testTarget(
168
164
swiftSettings: sharedSwiftSettings
169
165
)
170
166
171
- let swiftBinPath = Context . environment [ " _ " ] ?? " /usr/bin/swift "
172
- let swiftBinURL = URL ( fileURLWithPath: swiftBinPath)
173
- let SDKPath = swiftBinURL. deletingLastPathComponent ( ) . deletingLastPathComponent ( ) . deletingLastPathComponent ( ) . path
174
- let includePath = SDKPath . appending ( " /usr/lib/swift " )
175
-
176
167
// Workaround iOS CI build issue (We need to disable this on iOS CI)
177
168
let supportMultiProducts : Bool = envEnable ( " OPENSWIFTUI_SUPPORT_MULTI_PRODUCTS " , default: true )
178
169
@@ -189,7 +180,6 @@ if supportMultiProducts {
189
180
190
181
let package = Package (
191
182
name: " OpenSwiftUI " ,
192
- platforms: platforms,
193
183
products: products,
194
184
dependencies: [
195
185
. package ( url: " https://github.com/apple/swift-numerics.git " , from: " 1.0.2 " ) ,
@@ -207,19 +197,12 @@ let package = Package(
207
197
. target(
208
198
name: " OpenSwiftUI_SPI " ,
209
199
publicHeadersPath: " . " ,
210
- cSettings: [
211
- . unsafeFlags( [ " -I " , includePath] , . when( platforms: . nonDarwinPlatforms) ) ,
212
- . define( " __COREFOUNDATION_FORSWIFTFOUNDATIONONLY__ " , to: " 1 " , . when( platforms: . nonDarwinPlatforms) ) ,
213
- . define( " _WASI_EMULATED_SIGNAL " , . when( platforms: [ . wasi] ) ) ,
214
- ]
200
+ cSettings: sharedCSettings
215
201
) ,
216
202
. target(
217
203
name: " COpenSwiftUI " ,
218
204
publicHeadersPath: " . " ,
219
- cSettings: [
220
- . unsafeFlags( [ " -I " , includePath] , . when( platforms: . nonDarwinPlatforms) ) ,
221
- . define( " __COREFOUNDATION_FORSWIFTFOUNDATIONONLY__ " , to: " 1 " , . when( platforms: . nonDarwinPlatforms) ) ,
222
- . define( " _WASI_EMULATED_SIGNAL " , . when( platforms: [ . wasi] ) ) ,
205
+ cSettings: sharedCSettings + [
223
206
. headerSearchPath( " ../OpenSwiftUI_SPI " ) ,
224
207
]
225
208
) ,
@@ -315,6 +298,15 @@ if renderBoxCondition {
315
298
openSwiftUIBridgeTestTarget. addRBSettings ( )
316
299
}
317
300
301
+ if attributeGraphCondition || renderBoxCondition {
302
+ let release = Context . environment [ " DARWIN_PRIVATE_FRAMEWORKS_TARGET_RELEASE " ] . flatMap { Int ( $0) } ?? 2024
303
+ package . platforms = switch release {
304
+ case 2024 : [ . iOS( . v18) , . macOS( . v15) , . macCatalyst( . v18) , . tvOS( . v18) , . watchOS( . v10) , . visionOS( . v2) ]
305
+ case 2021 : [ . iOS( . v15) , . macOS( . v12) , . macCatalyst( . v15) , . tvOS( . v15) , . watchOS( . v7) ]
306
+ default : nil
307
+ }
308
+ }
309
+
318
310
if useLocalDeps {
319
311
package . dependencies += [
320
312
. package ( path: " ../OpenGraph " ) ,
0 commit comments