@@ -95,9 +95,7 @@ public struct DependencyValues: Sendable {
9595 /// provide access only to default values. Instead, you rely on the dependency values' instance
9696 /// that the library manages for you when you use the ``Dependency`` property wrapper.
9797 public init ( ) {
98- #if DEBUG
99- _ = setUpTestObservers
100- #endif
98+ _ = setUpTestObservers
10199 }
102100
103101 /// Accesses the dependency value associated with a custom key.
@@ -351,62 +349,60 @@ private final class CachedValues: @unchecked Sendable {
351349
352350// NB: We cannot statically link/load XCTest on Apple platforms, so we dynamically load things
353351// instead and we limit this to debug builds to avoid App Store binary rejection.
354- #if DEBUG
355- #if !canImport(ObjectiveC)
356- import XCTest
357- #endif
352+ #if !canImport(ObjectiveC)
353+ import XCTest
354+ #endif
358355
359- private let setUpTestObservers : Void = {
360- if _XCTIsTesting {
361- #if canImport(ObjectiveC)
362- DispatchQueue . mainSync {
363- guard
364- let XCTestObservation = objc_getProtocol ( " XCTestObservation " ) ,
365- let XCTestObservationCenter = NSClassFromString ( " XCTestObservationCenter " ) ,
366- let XCTestObservationCenter = XCTestObservationCenter as Any as? NSObjectProtocol ,
367- let XCTestObservationCenterShared =
368- XCTestObservationCenter
369- . perform ( Selector ( ( " sharedTestObservationCenter " ) ) ) ?
370- . takeUnretainedValue ( )
371- else { return }
372- let testCaseWillStartBlock : @convention ( block) ( AnyObject ) -> Void = { _ in
373- DependencyValues . _current. cachedValues. cached = [ : ]
374- }
375- let testCaseWillStartImp = imp_implementationWithBlock ( testCaseWillStartBlock)
376- class_addMethod (
377- TestObserver . self, Selector ( ( " testCaseWillStart: " ) ) , testCaseWillStartImp, nil )
378- class_addProtocol ( TestObserver . self, XCTestObservation)
379- _ =
380- XCTestObservationCenterShared
381- . perform ( Selector ( ( " addTestObserver: " ) ) , with: TestObserver ( ) )
356+ private let setUpTestObservers : Void = {
357+ if _XCTIsTesting {
358+ #if canImport(ObjectiveC)
359+ DispatchQueue . mainSync {
360+ guard
361+ let XCTestObservation = objc_getProtocol ( " XCTestObservation " ) ,
362+ let XCTestObservationCenter = NSClassFromString ( " XCTestObservationCenter " ) ,
363+ let XCTestObservationCenter = XCTestObservationCenter as Any as? NSObjectProtocol ,
364+ let XCTestObservationCenterShared =
365+ XCTestObservationCenter
366+ . perform ( Selector ( ( " sharedTestObservationCenter " ) ) ) ?
367+ . takeUnretainedValue ( )
368+ else { return }
369+ let testCaseWillStartBlock : @convention ( block) ( AnyObject ) -> Void = { _ in
370+ DependencyValues . _current. cachedValues. cached = [ : ]
382371 }
383- #else
384- XCTestObservationCenter . shared. addTestObserver ( TestObserver ( ) )
385- #endif
386- }
387- } ( )
388-
389- #if canImport(ObjectiveC)
390- private final class TestObserver : NSObject { }
391- #else
392- private final class TestObserver : NSObject , XCTestObservation {
393- func testCaseWillStart( _ testCase: XCTestCase ) {
394- DependencyValues . _current. cachedValues. cached = [ : ]
372+ let testCaseWillStartImp = imp_implementationWithBlock ( testCaseWillStartBlock)
373+ class_addMethod (
374+ TestObserver . self, Selector ( ( " testCaseWillStart: " ) ) , testCaseWillStartImp, nil )
375+ class_addProtocol ( TestObserver . self, XCTestObservation)
376+ _ =
377+ XCTestObservationCenterShared
378+ . perform ( Selector ( ( " addTestObserver: " ) ) , with: TestObserver ( ) )
395379 }
380+ #else
381+ XCTestObservationCenter . shared. addTestObserver ( TestObserver ( ) )
382+ #endif
383+ }
384+ } ( )
385+
386+ #if canImport(ObjectiveC)
387+ private final class TestObserver : NSObject { }
388+ #else
389+ private final class TestObserver : NSObject , XCTestObservation {
390+ func testCaseWillStart( _ testCase: XCTestCase ) {
391+ DependencyValues . _current. cachedValues. cached = [ : ]
396392 }
397- #endif
393+ }
394+ #endif
398395
399- extension DispatchQueue {
400- private static let key = DispatchSpecificKey < UInt8 > ( )
401- private static let value : UInt8 = 0
396+ extension DispatchQueue {
397+ private static let key = DispatchSpecificKey < UInt8 > ( )
398+ private static let value : UInt8 = 0
402399
403- fileprivate static func mainSync< R> ( execute block: @Sendable ( ) -> R ) -> R {
404- Self . main. setSpecific ( key: Self . key, value: Self . value)
405- if getSpecific ( key: Self . key) == Self . value {
406- return block ( )
407- } else {
408- return Self . main. sync ( execute: block)
409- }
400+ fileprivate static func mainSync< R> ( execute block: @Sendable ( ) -> R ) -> R {
401+ Self . main. setSpecific ( key: Self . key, value: Self . value)
402+ if getSpecific ( key: Self . key) == Self . value {
403+ return block ( )
404+ } else {
405+ return Self . main. sync ( execute: block)
410406 }
411407 }
412- #endif
408+ }
0 commit comments