diff --git a/Example/Tuist/Package.swift b/Example/Tuist/Package.swift index 2f0b9fda4..115247611 100644 --- a/Example/Tuist/Package.swift +++ b/Example/Tuist/Package.swift @@ -17,9 +17,11 @@ configureOpenSwiftUIEnvironment(provider: PackageContextEnvironmentProvider()) let exampleServerConfiguration = OpenSwiftUIExampleServerConfiguration.resolve() let enableLookInsideServer = exampleServerConfiguration.enableLookInsideServer let enableLookInServer = exampleServerConfiguration.enableLookInServer +let openCombineCondition = envBoolValue("OPENCOMBINE") #else let enableLookInsideServer = Context.environment["OPENSWIFTUI_EXAMPLE_LOOKINSIDE_SERVER"] == "1" let enableLookInServer = Context.environment["OPENSWIFTUI_EXAMPLE_LOOKIN_SERVER"] == "1" +let openCombineCondition = Context.environment["OPENSWIFTUI_OPENCOMBINE"] == "1" #endif var dependencies: [PackageDescription.Package.Dependency] = [ @@ -35,6 +37,12 @@ var dependencies: [PackageDescription.Package.Dependency] = [ .package(url: "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/OpenSwiftUIProject/swift-snapshot-testing.git", exact: "1.19.3"), ] +if openCombineCondition { + dependencies.append( + .package(url: "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/OpenSwiftUIProject/OpenCombine.git", from: "0.16.0") + ) +} + if enableLookInsideServer { dependencies.append(.package(url: "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/LookInsideApp/LookInside-Release.git", from: "0.2.2")) } diff --git a/Package.resolved b/Package.resolved index fdb484ddf..a81354875 100644 --- a/Package.resolved +++ b/Package.resolved @@ -1,5 +1,5 @@ { - "originHash" : "fdcca3afece30410c054d1dbaa77cb74480dc14180740ca42acde3decedfb888", + "originHash" : "3482eb6440e1059ead3596c30808f817c4758ff588afaca85b25a988276317ae", "pins" : [ { "identity" : "darwinprivateframeworks", diff --git a/Package.swift b/Package.swift index 70180c4e1..2370b7bda 100644 --- a/Package.swift +++ b/Package.swift @@ -936,7 +936,7 @@ if useLocalDeps { if openCombineCondition { package.dependencies.append( - .package(url: "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/OpenSwiftUIProject/OpenCombine.git", from: "0.15.0") + .package(url: "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/OpenSwiftUIProject/OpenCombine.git", from: "0.16.0") ) cOpenSwiftUITarget.addOpenCombineCSettings() openSwiftUICoreTarget.addOpenCombineSettings() diff --git a/Sources/OpenSwiftUI/Export.swift b/Sources/OpenSwiftUI/Export.swift index cad83710b..3295b182f 100644 --- a/Sources/OpenSwiftUI/Export.swift +++ b/Sources/OpenSwiftUI/Export.swift @@ -15,3 +15,9 @@ package typealias UniqueID = OpenSwiftUICore.UniqueID #if canImport(CoreGraphics) @_exported import CoreGraphics #endif + +#if canImport(OpenCombine) +public import OpenCombine +public typealias Published = OpenCombine.Published +public typealias ObservableObject = OpenCombine.ObservableObject +#endif diff --git a/Sources/OpenSwiftUI/View/Control/ProgressView/ProgressView+Foundation.swift b/Sources/OpenSwiftUI/View/Control/ProgressView/ProgressView+Foundation.swift index ccc66f3d2..beb188cbd 100644 --- a/Sources/OpenSwiftUI/View/Control/ProgressView/ProgressView+Foundation.swift +++ b/Sources/OpenSwiftUI/View/Control/ProgressView/ProgressView+Foundation.swift @@ -36,7 +36,8 @@ extension Foundation.Progress { ) } - #if !OPENSWIFTUI_OPENCOMBINE + #if canImport(ObjectiveC) + // OpenCombine also support this API on Darwin since 0.16.0 fileprivate typealias UIStatePublisher = Publishers.Map< Publishers.CombineLatest4< NSObject.KeyValueObservingPublisher, @@ -70,12 +71,11 @@ extension Foundation.Progress { } } #else - // TODO: Implement NSObject.KeyValueObservingPublisher in OpenCombine fileprivate typealias UIStatePublisher = AnyPublisher fileprivate var uiStatePublisher: UIStatePublisher { - // [AI] OpenCombineFoundation does not provide KVO publishers. Sample - // Progress while the graph-owned subscription is active instead. + // Sample Progress while the graph-owned subscription is active on + // platforms without Objective-C KVO support. Foundation.Timer.publish( every: 1.0 / 30.0, on: .main,