Skip to content

Commit 6cfc6f8

Browse files
committed
remove experimental flags
1 parent 57ec1ae commit 6cfc6f8

File tree

6 files changed

+26
-121
lines changed

6 files changed

+26
-121
lines changed

.travis.yml

+1-13
Original file line numberDiff line numberDiff line change
@@ -10,24 +10,11 @@ matrix:
1010
sudo: required
1111
env:
1212
- SWIFT_VERSION="5.1"
13-
- os: linux
14-
language: generic
15-
dist: xenial
16-
sudo: required
17-
env:
18-
- SWIFT_VERSION="5.1"
19-
- CX_EXPERIMENTAL_OBSERVABLE_OBJECT="YES"
20-
- os: osx
21-
language: swift
22-
osx_image: xcode11.1
23-
env:
24-
- CX_COMBINE_IMPLEMENTATION="CombineX"
2513
- os: osx
2614
language: swift
2715
osx_image: xcode11.1
2816
env:
2917
- CX_COMBINE_IMPLEMENTATION="CombineX"
30-
- CX_EXPERIMENTAL_OBSERVABLE_OBJECT="YES"
3118
- os: osx
3219
language: swift
3320
osx_image: xcode11.1
@@ -45,6 +32,7 @@ before_install:
4532
eval "$(curl -sL https://raw.githubusercontent.com/kylef/swiftenv/master/docs/install.sh)";
4633
fi
4734

35+
# Travis does not yet support macOS 10.15, so we have to generate an iOS project to test against `Combine`.
4836
script:
4937
- if [[ $CX_COMBINE_IMPLEMENTATION == 'Combine' ]]; then
5038
gem install xcpretty;

DevOpen

-3
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,7 @@
11
#!/bin/sh
22

33
# Open the project in Xcode with env variables.
4-
# Enable all experimental features and test against CombineX.
5-
64

75
export CX_COMBINE_IMPLEMENTATION="CombineX"
8-
export CX_EXPERIMENTAL_OBSERVABLE_OBJECT="YES"
96
killall Xcode || true
107
open $(dirname $0)/Package.swift

Package.resolved

+2-2
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
},
1313
{
1414
"package": "Nimble",
15-
"repositoryURL": "https://github.com/Quick/Nimble.git",
15+
"repositoryURL": "https://github.com/Quick/Nimble",
1616
"state": {
1717
"branch": null,
1818
"revision": "f8657642dfdec9973efc79cc68bcef43a653a2bc",
@@ -21,7 +21,7 @@
2121
},
2222
{
2323
"package": "Quick",
24-
"repositoryURL": "https://github.com/Quick/Quick.git",
24+
"repositoryURL": "https://github.com/Quick/Quick",
2525
"state": {
2626
"branch": null,
2727
"revision": "33682c2f6230c60614861dfc61df267e11a1602f",

Package.swift

+22-90
Original file line numberDiff line numberDiff line change
@@ -16,15 +16,16 @@ let package = Package(
1616
.library(name: "CXShim", targets: ["CXShim"]),
1717
],
1818
dependencies: [
19-
.package(url: "https://github.com/Quick/Quick.git", from: "2.0.0"),
19+
.package(url: "https://github.com/wickwirew/Runtime", from: "2.0.0"),
20+
.package(url: "https://github.com/Quick/Quick", from: "2.0.0"),
2021
// TODO: Use "8.0.2" until https://github.com/Quick/Nimble/issues/705 is fixed.
21-
.package(url: "https://github.com/Quick/Nimble.git", .exact("8.0.2")),
22+
.package(url: "https://github.com/Quick/Nimble", .exact("8.0.2")),
2223
],
2324
targets: [
2425
.target(name: "CXLibc"),
2526
.target(name: "CXUtility"),
2627
.target(name: "CXNamespace"),
27-
.target(name: "CombineX", dependencies: ["CXLibc", "CXUtility", "CXNamespace"]),
28+
.target(name: "CombineX", dependencies: ["CXLibc", "CXUtility", "CXNamespace", "Runtime"]),
2829
.target(name: "CXFoundation", dependencies: ["CXUtility", "CXNamespace", "CombineX"]),
2930
.target(name: "CXCompatible", dependencies: ["CXNamespace"]),
3031
.target(name: "CXShim", dependencies: [/* depends on combine implementation */]),
@@ -51,88 +52,11 @@ extension Optional where Wrapped: RangeReplaceableCollection {
5152
}
5253
}
5354

54-
// MARK: CombineX Experimental Features
55-
56-
/// Some of the implementations in CombineX are experimental.
57-
struct CXExperimentalFeatures: OptionSet, CaseIterable {
58-
59-
let rawValue: Int
60-
61-
static let observableObject = CXExperimentalFeatures(rawValue: 1)
62-
63-
static var allCases: [CXExperimentalFeatures] {
64-
return [.observableObject]
65-
}
66-
67-
var flags: [String] {
68-
var result: [String] = []
69-
if contains(.observableObject) {
70-
result += ["EXPERIMENTAL_OBSERVABLE_OBJECT"]
71-
}
72-
return result
73-
}
74-
75-
func configure(_ package: Package) {
76-
guard let cxTarget = package.targets.first(where: { $0.name == "CombineX" }) else { return }
77-
78-
// extra package dependencies
79-
package.dependencies.append(contentsOf: self.extraPackageDependencies)
80-
81-
// extra swift settings
82-
cxTarget.swiftSettings.append(contentsOf: self.extraSwiftSettings)
83-
84-
// extra target dependencies
85-
cxTarget.dependencies.append(contentsOf: self.extraTargetDependencies)
86-
}
87-
88-
var extraPackageDependencies: [Package.Dependency] {
89-
var deps: [Package.Dependency] = []
90-
if contains(.observableObject) {
91-
deps += [.package(url: "https://github.com/wickwirew/Runtime", from: "2.0.0")]
92-
}
93-
return deps
94-
}
95-
96-
var extraSwiftSettings: [SwiftSetting] {
97-
var settings: [SwiftSetting] = []
98-
settings += self.flags.map { .define($0) }
99-
return settings
100-
}
101-
102-
var extraTargetDependencies: [Target.Dependency] {
103-
var deps: [Target.Dependency] = []
104-
if contains(.observableObject) {
105-
deps += ["Runtime"]
106-
}
107-
return deps
108-
}
109-
}
110-
111-
func getEnabledCXExperimentalFeatures() -> CXExperimentalFeatures {
112-
let enabledFeatures = CXExperimentalFeatures.allCases.filter {
113-
guard let flag = $0.flags.first, let value = env["CX_\(flag)"] else { return false }
114-
return NSString(string: value).boolValue
115-
}
116-
return .init(enabledFeatures)
117-
}
118-
119-
let enabledCXExperimentalFeatures = getEnabledCXExperimentalFeatures()
120-
enabledCXExperimentalFeatures.configure(package)
121-
12255
// MARK: Combine Implementations
12356
enum CombineImplementation {
12457

12558
case combine, combineX, openCombine
126-
127-
func configure(_ package: Package) {
128-
package.dependencies.append(contentsOf: self.extraPackageDependencies)
129-
130-
guard let shimTarget = package.targets.first(where: { $0.name == "CXShim" }) else { return }
131-
132-
shimTarget.dependencies = shimTargetDependencies
133-
shimTarget.swiftSettings.append(contentsOf: shimTargetSwiftSettings)
134-
}
135-
59+
13660
var extraPackageDependencies: [Package.Dependency] {
13761
switch self {
13862
case .openCombine: return [.package(url: "https://github.com/broadwaylamb/OpenCombine", .branch("master"))]
@@ -157,6 +81,22 @@ enum CombineImplementation {
15781
}
15882
}
15983

84+
func configure(_ package: Package, with imp: CombineImplementation) {
85+
package.dependencies.append(contentsOf: imp.extraPackageDependencies)
86+
87+
guard let shimTarget = package.targets.first(where: { $0.name == "CXShim" }) else { return }
88+
89+
shimTarget.dependencies = imp.shimTargetDependencies
90+
shimTarget.swiftSettings.append(contentsOf: imp.shimTargetSwiftSettings)
91+
92+
// Pass the swift settings of current combine implementation to all test targets.
93+
package.targets
94+
.filter { $0.isTest}
95+
.forEach {
96+
$0.swiftSettings.append(contentsOf: imp.shimTargetSwiftSettings)
97+
}
98+
}
99+
160100
func selectCombineImp() -> CombineImplementation {
161101
let key = "CX_COMBINE_IMPLEMENTATION"
162102
// CombineX -> combinex
@@ -176,15 +116,7 @@ func selectCombineImp() -> CombineImplementation {
176116
}
177117

178118
let currentCombineImp = selectCombineImp()
179-
currentCombineImp.configure(package)
180-
181-
// Pass the swift settings of current combine implementation and enabled experimental features to all test targets.
182-
let testSwiftSettings = currentCombineImp.shimTargetSwiftSettings + enabledCXExperimentalFeatures.extraSwiftSettings
183-
package.targets.forEach {
184-
if $0.isTest {
185-
$0.swiftSettings.append(contentsOf: testSwiftSettings)
186-
}
187-
}
119+
configure(package, with: currentCombineImp)
188120

189121
// Travis does not yet support macOS 10.15, so we have to generate an iOS project to test against `Combine`.
190122
if currentCombineImp == .combine && ProcessInfo.processInfo.environment["TRAVIS"] != nil {

Sources/CombineX/ObserableObject.swift

-12
Original file line numberDiff line numberDiff line change
@@ -36,8 +36,6 @@ public protocol ObservableObject : AnyObject {
3636
var objectWillChange: Self.ObjectWillChangePublisher { get }
3737
}
3838

39-
#if EXPERIMENTAL_OBSERVABLE_OBJECT
40-
4139
import Runtime
4240

4341
private protocol PublishedProtocol {
@@ -48,12 +46,8 @@ extension Published: PublishedProtocol {}
4846
private let publishedPropertiesCache = TypeInfoCache<UnsafeRawPointer, [PropertyInfo]>()
4947
private let globalObjectWillChangeCache = ObservableObjectPublisherCache<AnyObject, ObservableObjectPublisher>()
5048

51-
#endif
52-
5349
extension ObservableObject where Self.ObjectWillChangePublisher == ObservableObjectPublisher {
5450

55-
#if EXPERIMENTAL_OBSERVABLE_OBJECT
56-
5751
private static func publishedProperties() throws -> [PropertyInfo] {
5852
let key = unsafeBitCast(self, to: UnsafeRawPointer.self)
5953
return try publishedPropertiesCache.value(for: key) {
@@ -73,11 +67,8 @@ extension ObservableObject where Self.ObjectWillChangePublisher == ObservableObj
7367
}
7468
}
7569

76-
#endif
77-
7870
/// A publisher that emits before the object has changed.
7971
public var objectWillChange: ObservableObjectPublisher {
80-
#if EXPERIMENTAL_OBSERVABLE_OBJECT
8172
return globalObjectWillChangeCache.value(for: self) {
8273
do {
8374
let publishedProperties = try type(of: self).publishedProperties()
@@ -88,9 +79,6 @@ extension ObservableObject where Self.ObjectWillChangePublisher == ObservableObj
8879
fatalError(error.localizedDescription)
8980
}
9081
}
91-
#else
92-
Global.RequiresImplementation()
93-
#endif
9482
}
9583
}
9684

Tests/CombineXTests/ObserableObjectSpec.swift

+1-1
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import Nimble
44

55
class ObserableObjectSpec: QuickSpec {
66

7-
#if swift(>=5.1) && (!USE_COMBINEX || EXPERIMENTAL_OBSERVABLE_OBJECT)
7+
#if swift(>=5.1)
88

99
typealias Published = CXShim.Published
1010

0 commit comments

Comments
 (0)