Skip to content

Commit 0e183e0

Browse files
authored
[visionOS] Fix Sessions SDK build on Xcode 15 beta 6 (#11666)
In Xcode 15 beta 6, `#if os(iOS)` no longer evaluates to true when building for visionOS. Note: `TARGET_OS_IOS` continues to be defined so Objective-C code is unchanged.
1 parent 77fa63d commit 0e183e0

File tree

5 files changed

+292
-472
lines changed

5 files changed

+292
-472
lines changed

FirebaseCore/CHANGELOG.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,6 @@
1+
# Firebase 10.14.0
2+
- For developers building for visionOS, Xcode 15 beta 6 or later is required.
3+
14
# Firebase 10.13.0
25
- For developers building for visionOS, Xcode 15 beta 5 or later is required.
36

FirebaseSessions/Sources/SessionInitiator.swift

Lines changed: 33 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,17 @@ import Foundation
2020
import AppKit
2121
#elseif os(watchOS)
2222
import WatchKit
23-
#endif
23+
#endif // os(iOS) || os(tvOS)
24+
25+
// swift(>=5.9) implies Xcode 15+
26+
// Need to have this Swift version check to use os(visionOS) macro, VisionOS support.
27+
// TODO: Remove this check and add `os(visionOS)` to the `os(iOS) || os(tvOS)` conditional above
28+
// when Xcode 15 is the minimum supported by Firebase.
29+
#if swift(>=5.9)
30+
#if os(visionOS)
31+
import UIKit
32+
#endif // os(visionOS)
33+
#endif // swift(>=5.9)
2434

2535
///
2636
/// The SessionInitiator is responsible for:
@@ -87,7 +97,28 @@ class SessionInitiator {
8797
object: nil
8898
)
8999
}
90-
#endif
100+
#endif // os(iOS) || os(tvOS)
101+
102+
// swift(>=5.9) implies Xcode 15+
103+
// Need to have this Swift version check to use os(visionOS) macro, VisionOS support.
104+
// TODO: Remove this check and add `os(visionOS)` to the `os(iOS) || os(tvOS)` conditional above
105+
// when Xcode 15 is the minimum supported by Firebase.
106+
#if swift(>=5.9)
107+
#if os(visionOS)
108+
notificationCenter.addObserver(
109+
self,
110+
selector: #selector(appBackgrounded),
111+
name: UIApplication.didEnterBackgroundNotification,
112+
object: nil
113+
)
114+
notificationCenter.addObserver(
115+
self,
116+
selector: #selector(appForegrounded),
117+
name: UIApplication.didBecomeActiveNotification,
118+
object: nil
119+
)
120+
#endif // os(visionOS)
121+
#endif // swift(>=5.9)
91122
}
92123

93124
@objc private func appBackgrounded() {

FirebaseSessions/Sources/SessionStartEvent.swift

Lines changed: 35 additions & 79 deletions
Original file line numberDiff line numberDiff line change
@@ -256,89 +256,45 @@ class SessionStartEvent: NSObject, GDTCOREventDataObject {
256256
-> firebase_appquality_sessions_NetworkConnectionInfo_MobileSubtype {
257257
var subtype: firebase_appquality_sessions_NetworkConnectionInfo_MobileSubtype
258258

259-
// swift(>=5.9) implies Xcode 15+
260-
// Need to have this swift version check to use os(visionOS) macro, VisionOS support.
261-
#if swift(>=5.9)
262-
#if os(iOS) && !targetEnvironment(macCatalyst) && !os(visionOS)
263-
switch mobileSubtype {
264-
case CTRadioAccessTechnologyGPRS:
265-
subtype = firebase_appquality_sessions_NetworkConnectionInfo_MobileSubtype_GPRS
266-
case CTRadioAccessTechnologyEdge:
267-
subtype = firebase_appquality_sessions_NetworkConnectionInfo_MobileSubtype_EDGE
268-
case CTRadioAccessTechnologyWCDMA:
269-
subtype = firebase_appquality_sessions_NetworkConnectionInfo_MobileSubtype_CDMA
270-
case CTRadioAccessTechnologyCDMA1x:
271-
subtype = firebase_appquality_sessions_NetworkConnectionInfo_MobileSubtype_CDMA
272-
case CTRadioAccessTechnologyHSDPA:
273-
subtype = firebase_appquality_sessions_NetworkConnectionInfo_MobileSubtype_HSDPA
274-
case CTRadioAccessTechnologyHSUPA:
275-
subtype = firebase_appquality_sessions_NetworkConnectionInfo_MobileSubtype_HSUPA
276-
case CTRadioAccessTechnologyCDMAEVDORev0:
277-
subtype = firebase_appquality_sessions_NetworkConnectionInfo_MobileSubtype_EVDO_0
278-
case CTRadioAccessTechnologyCDMAEVDORevA:
279-
subtype = firebase_appquality_sessions_NetworkConnectionInfo_MobileSubtype_EVDO_A
280-
case CTRadioAccessTechnologyCDMAEVDORevB:
281-
subtype = firebase_appquality_sessions_NetworkConnectionInfo_MobileSubtype_EVDO_B
282-
case CTRadioAccessTechnologyeHRPD:
283-
subtype = firebase_appquality_sessions_NetworkConnectionInfo_MobileSubtype_EHRPD
284-
case CTRadioAccessTechnologyLTE:
285-
subtype = firebase_appquality_sessions_NetworkConnectionInfo_MobileSubtype_LTE
286-
default:
287-
subtype =
288-
firebase_appquality_sessions_NetworkConnectionInfo_MobileSubtype_UNKNOWN_MOBILE_SUBTYPE
289-
}
290-
291-
if #available(iOS 14.1, *) {
292-
if mobileSubtype == CTRadioAccessTechnologyNRNSA || mobileSubtype ==
293-
CTRadioAccessTechnologyNR {
294-
subtype = firebase_appquality_sessions_NetworkConnectionInfo_MobileSubtype_NR
295-
}
296-
}
297-
#else // os(iOS) && !targetEnvironment(macCatalyst) && !os(visionOS)
259+
#if os(iOS) && !targetEnvironment(macCatalyst)
260+
switch mobileSubtype {
261+
case CTRadioAccessTechnologyGPRS:
262+
subtype = firebase_appquality_sessions_NetworkConnectionInfo_MobileSubtype_GPRS
263+
case CTRadioAccessTechnologyEdge:
264+
subtype = firebase_appquality_sessions_NetworkConnectionInfo_MobileSubtype_EDGE
265+
case CTRadioAccessTechnologyWCDMA:
266+
subtype = firebase_appquality_sessions_NetworkConnectionInfo_MobileSubtype_CDMA
267+
case CTRadioAccessTechnologyCDMA1x:
268+
subtype = firebase_appquality_sessions_NetworkConnectionInfo_MobileSubtype_CDMA
269+
case CTRadioAccessTechnologyHSDPA:
270+
subtype = firebase_appquality_sessions_NetworkConnectionInfo_MobileSubtype_HSDPA
271+
case CTRadioAccessTechnologyHSUPA:
272+
subtype = firebase_appquality_sessions_NetworkConnectionInfo_MobileSubtype_HSUPA
273+
case CTRadioAccessTechnologyCDMAEVDORev0:
274+
subtype = firebase_appquality_sessions_NetworkConnectionInfo_MobileSubtype_EVDO_0
275+
case CTRadioAccessTechnologyCDMAEVDORevA:
276+
subtype = firebase_appquality_sessions_NetworkConnectionInfo_MobileSubtype_EVDO_A
277+
case CTRadioAccessTechnologyCDMAEVDORevB:
278+
subtype = firebase_appquality_sessions_NetworkConnectionInfo_MobileSubtype_EVDO_B
279+
case CTRadioAccessTechnologyeHRPD:
280+
subtype = firebase_appquality_sessions_NetworkConnectionInfo_MobileSubtype_EHRPD
281+
case CTRadioAccessTechnologyLTE:
282+
subtype = firebase_appquality_sessions_NetworkConnectionInfo_MobileSubtype_LTE
283+
default:
298284
subtype =
299285
firebase_appquality_sessions_NetworkConnectionInfo_MobileSubtype_UNKNOWN_MOBILE_SUBTYPE
300-
#endif // os(iOS) && !targetEnvironment(macCatalyst) && !os(visionOS)
301-
#else // swift(>=5.9)
302-
#if os(iOS) && !targetEnvironment(macCatalyst)
303-
switch mobileSubtype {
304-
case CTRadioAccessTechnologyGPRS:
305-
subtype = firebase_appquality_sessions_NetworkConnectionInfo_MobileSubtype_GPRS
306-
case CTRadioAccessTechnologyEdge:
307-
subtype = firebase_appquality_sessions_NetworkConnectionInfo_MobileSubtype_EDGE
308-
case CTRadioAccessTechnologyWCDMA:
309-
subtype = firebase_appquality_sessions_NetworkConnectionInfo_MobileSubtype_CDMA
310-
case CTRadioAccessTechnologyCDMA1x:
311-
subtype = firebase_appquality_sessions_NetworkConnectionInfo_MobileSubtype_CDMA
312-
case CTRadioAccessTechnologyHSDPA:
313-
subtype = firebase_appquality_sessions_NetworkConnectionInfo_MobileSubtype_HSDPA
314-
case CTRadioAccessTechnologyHSUPA:
315-
subtype = firebase_appquality_sessions_NetworkConnectionInfo_MobileSubtype_HSUPA
316-
case CTRadioAccessTechnologyCDMAEVDORev0:
317-
subtype = firebase_appquality_sessions_NetworkConnectionInfo_MobileSubtype_EVDO_0
318-
case CTRadioAccessTechnologyCDMAEVDORevA:
319-
subtype = firebase_appquality_sessions_NetworkConnectionInfo_MobileSubtype_EVDO_A
320-
case CTRadioAccessTechnologyCDMAEVDORevB:
321-
subtype = firebase_appquality_sessions_NetworkConnectionInfo_MobileSubtype_EVDO_B
322-
case CTRadioAccessTechnologyeHRPD:
323-
subtype = firebase_appquality_sessions_NetworkConnectionInfo_MobileSubtype_EHRPD
324-
case CTRadioAccessTechnologyLTE:
325-
subtype = firebase_appquality_sessions_NetworkConnectionInfo_MobileSubtype_LTE
326-
default:
327-
subtype =
328-
firebase_appquality_sessions_NetworkConnectionInfo_MobileSubtype_UNKNOWN_MOBILE_SUBTYPE
329-
}
286+
}
330287

331-
if #available(iOS 14.1, *) {
332-
if mobileSubtype == CTRadioAccessTechnologyNRNSA || mobileSubtype ==
333-
CTRadioAccessTechnologyNR {
334-
subtype = firebase_appquality_sessions_NetworkConnectionInfo_MobileSubtype_NR
335-
}
288+
if #available(iOS 14.1, *) {
289+
if mobileSubtype == CTRadioAccessTechnologyNRNSA || mobileSubtype ==
290+
CTRadioAccessTechnologyNR {
291+
subtype = firebase_appquality_sessions_NetworkConnectionInfo_MobileSubtype_NR
336292
}
337-
#else // os(iOS) && !targetEnvironment(macCatalyst)
338-
subtype =
339-
firebase_appquality_sessions_NetworkConnectionInfo_MobileSubtype_UNKNOWN_MOBILE_SUBTYPE
340-
#endif // os(iOS) && !targetEnvironment(macCatalyst)
341-
#endif
293+
}
294+
#else // os(iOS) && !targetEnvironment(macCatalyst)
295+
subtype =
296+
firebase_appquality_sessions_NetworkConnectionInfo_MobileSubtype_UNKNOWN_MOBILE_SUBTYPE
297+
#endif // os(iOS) && !targetEnvironment(macCatalyst)
342298

343299
return subtype
344300
}

FirebaseSessions/Tests/Unit/Library/LifecycleNotifications.swift

Lines changed: 33 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,17 @@ import Dispatch
2424
import AppKit
2525
#elseif os(watchOS)
2626
import WatchKit
27-
#endif
27+
#endif // os(iOS) || os(tvOS)
28+
29+
// swift(>=5.9) implies Xcode 15+
30+
// Need to have this Swift version check to use os(visionOS) macro, VisionOS support.
31+
// TODO: Remove this check and add `os(visionOS)` to the `os(iOS) || os(tvOS)` conditional above
32+
// when Xcode 15 is the minimum supported by Firebase.
33+
#if swift(>=5.9)
34+
#if os(visionOS)
35+
import UIKit
36+
#endif // os(visionOS)
37+
#endif // swift(>=5.9)
2838

2939
extension XCTestCase {
3040
func postBackgroundedNotification() {
@@ -51,7 +61,17 @@ extension XCTestCase {
5161
object: nil
5262
)
5363
}
54-
#endif
64+
#endif // os(iOS) || os(tvOS)
65+
66+
// swift(>=5.9) implies Xcode 15+
67+
// Need to have this Swift version check to use os(visionOS) macro, VisionOS support.
68+
// TODO: Remove this check and add `os(visionOS)` to the `os(iOS) || os(tvOS)` conditional above
69+
// when Xcode 15 is the minimum supported by Firebase.
70+
#if swift(>=5.9)
71+
#if os(visionOS)
72+
notificationCenter.post(name: UIApplication.didEnterBackgroundNotification, object: nil)
73+
#endif // os(visionOS)
74+
#endif // swift(>=5.9)
5575
}
5676

5777
func postForegroundedNotification() {
@@ -78,6 +98,16 @@ extension XCTestCase {
7898
object: nil
7999
)
80100
}
81-
#endif
101+
#endif // os(iOS) || os(tvOS)
102+
103+
// swift(>=5.9) implies Xcode 15+
104+
// Need to have this Swift version check to use os(visionOS) macro, VisionOS support.
105+
// TODO: Remove this check and add `os(visionOS)` to the `os(iOS) || os(tvOS)` conditional above
106+
// when Xcode 15 is the minimum supported by Firebase.
107+
#if swift(>=5.9)
108+
#if os(visionOS)
109+
notificationCenter.post(name: UIApplication.didBecomeActiveNotification, object: nil)
110+
#endif // os(visionOS)
111+
#endif // swift(>=5.9)
82112
}
83113
}

0 commit comments

Comments
 (0)