Skip to content

Commit 67f712f

Browse files
authored
Merge pull request #25 from reloni/develop
Updated to Swift 3
2 parents 3641abc + d3096c7 commit 67f712f

26 files changed

+717
-567
lines changed

.codeclimate.yml

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
---
2+
engines:
3+
fixme:
4+
enabled: true
5+
tailor:
6+
enabled: true
7+
ratings:
8+
paths: []
9+
exclude_paths: []

.travis.yml

Lines changed: 14 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,30 +1,31 @@
11
language: objective-c
2-
osx_image: xcode7.3
2+
osx_image: xcode8
33
xcode_project: RxHttpClient.xcodeproj
44

55
env:
66
global:
77
#- WORKSPACE=
88
- PROJECT=RxHttpClient.xcodeproj
99
- FRAMEWORK_SCHEME=RxHttpClient
10-
- SDK=iphonesimulator9.3
11-
- DESTINATION_PLATFORM='platform=iOS Simulator,name=iPhone 6,OS=9.3'
10+
- SDK=iphonesimulator10.0
11+
- DESTINATION_PLATFORM='platform=iOS Simulator,name=iPhone 6s,OS=10.0'
1212

1313
before_install:
14-
- SIMULATOR_ID=$(xcrun instruments -s | grep -o "iPhone 6s (9.3) \[.*\]" | grep -o "\[.*\]" | sed "s/^\[\(.*\)\]$/\1/")
14+
- SIMULATOR_ID=$(xcrun instruments -s | grep -o "iPhone 6s (10.0) \[.*\]" | grep -o "\[.*\]" | sed "s/^\[\(.*\)\]$/\1/")
1515

1616
before_script:
17-
# inslall punic
18-
- brew install python
19-
- brew install libyaml
20-
- pip install --upgrade git+https://github.com/schwa/punic.git
21-
2217
- carthage version
18+
- carthage checkout
19+
20+
- mkdir -p ./Carthage/Build/iOS
21+
22+
#build OHHTTPStubs
23+
- (cd ./Carthage/Checkouts/OHHTTPStubs/OHHTTPStubs && set -o pipefail && xcodebuild -scheme "OHHTTPStubs iOS Framework" -workspace "OHHTTPStubs.xcworkspace" -sdk "$SDK" -configuration Release SYMROOT=../../../../Build | xcpretty -c)
24+
#build RxSwift
25+
- (cd ./Carthage/Checkouts/RxSwift && set -o pipefail && xcodebuild -scheme "RxSwift-iOS" -workspace "Rx.xcworkspace" -sdk "$SDK" -configuration Release SYMROOT=../../../Build | xcpretty -c)
2326

24-
# update OHHTTPStubs using carthage
25-
- carthage update OHHTTPStubs --platform iOS
26-
# using punic to build RxSwift framework
27-
- punic build RxSwift --platform iOS --configuration Release
27+
#copy frameworks to Carthage/Build folder
28+
- cp -R -f ./Build/Release-iphonesimulator/ ./Carthage/Build/iOS
2829

2930
script:
3031
- open -a "simulator" --args -CurrentDeviceUDID $SIMULATOR_ID

Cartfile.resolved

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
1-
github "AliSoftware/OHHTTPStubs" "5.1.0"
2-
github "ReactiveX/RxSwift" "2.6.0"
1+
github "AliSoftware/OHHTTPStubs" "45a2ceaebaef5ae434ffd3e2a5aef4c5ce3fa91b"
2+
github "ReactiveX/RxSwift" "3.0.1"

Readme.md

Lines changed: 47 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,14 @@ RxHttpClient
77

88
RxHttpClient is a "reactive wrapper" around NSURLSession. Under the hood it implements session delegates (like NSURLSessionDelegate or NSURLSessionTaskDelegate) and translates session events into Observables using [RxSwift](https://github.com/ReactiveX/RxSwift). Main purpose of this framework is to make "streaming" data as simple as possible and provide convenient features for caching data.
99

10-
Now it is more than a preliminary version and it lacking functionality and may be unstable in some cases.
10+
##Requirements
11+
- Xcode 8.0
12+
- Swift 3.0
1113

1214
##Installation
1315
Now only [Carthage](https://github.com/Carthage/Carthage) supported:
1416
```
15-
github "ReactiveX/RxSwift" ~> 2.6
17+
github "ReactiveX/RxSwift" ~> 3.0
1618
github "Reloni/RxHttpClient"
1719
```
1820
RxHttpClient uses RxSwift so it should be included into cartfile.
@@ -29,86 +31,89 @@ For create request and streaming data:
2931
```
3032
let client = HttpClient()
3133
let bag = DisposeBag()
32-
let url = NSURL(string: "url_to_resource")!
33-
client.loadStreamData(url).bindNext { event in
34+
let url = URL(string: "url_to_resource")!
35+
client.request(url: url).subscribe (onNext: { event in
3436
switch event {
35-
case StreamTaskEvents.ReceiveResponse(let response): /* Occurs after receiving response from remote server */
36-
case StreamTaskEvents.ReceiveData(let data): /* Occurs after receiving chunk of data from server (generally occurred many times) */
37-
case StreamTaskEvents.Error(let error): /* Occurs in case of client-side error */
38-
case StreamTaskEvents.Success: /* Occurs after successful completion of request */
37+
case StreamTaskEvents.receiveResponse(let response): break /* Occurs after receiving response from remote server */
38+
case StreamTaskEvents.receiveData(let data): break /* Occurs after receiving chunk of data from server (generally occurred many times) */
39+
case StreamTaskEvents.error(let error): break /* Occurs in case of client-side error */
40+
case StreamTaskEvents.success: break /* Occurs after successful completion of request */
3941
default: break
4042
}
41-
}.addDisposableTo(bag)
43+
}).addDisposableTo(bag)
4244
```
4345

4446
If dealing with every chunk of data is not necessary it's possible to pass an instance of cache provider and in success event grab all data from that provider (for now there is only MemoryCacheProvider object):
4547
```
4648
let client = HttpClient()
4749
let bag = DisposeBag()
48-
let url = NSURL(string: "url_to_resource")!
49-
client.loadStreamData(url, cacheProvider: MemoryCacheProvider()).bindNext { event in
50-
if case StreamTaskEvents.Success(let cacheProvider) = event {
51-
if let cacheProvider = cacheProvider {
52-
// getting cached data from provider
53-
let downloadedData = cacheProvider.getCurrentData()
54-
}
50+
let url = URL(string: "url_to_resource")!
51+
client.request(url: url, cacheProvider: MemoryCacheProvider()).subscribe(onNext: { event in
52+
guard case StreamTaskEvents.success(let cacheProvider) = event else { return }
53+
54+
if let cacheProvider = cacheProvider {
55+
// getting cached data from provider
56+
let downloadedData = cacheProvider.getData()
5557
}
56-
}.addDisposableTo(bag)
58+
}).addDisposableTo(bag)
5759
```
5860

5961
####Convenience methods
6062
It's also possible to simply invoke request and receive data using loadData method (in this case errors are forwarded with RxSwift error mechanism):
6163
```
6264
let client = HttpClient()
6365
let bag = DisposeBag()
64-
let url = NSURL(string: "url_to_resource")!
65-
client.loadData(url)
66-
.doOnError { error in
67-
switch error {
68-
case HttpClientError.ClientSideError(let error): /* Client-side error /*
69-
case let HttpClientError.InvalidResponse(response, data): /* Occurs when server did't return success HTTP code (not in 2xx) */
70-
default: break
71-
}
66+
let url = URL(string: "url_to_resource")!
67+
client.requestData(url: url).subscribe(onNext: { data in /* do something with returned data */ }, onError: { error in
68+
switch error {
69+
case HttpClientError.clientSideError(let error): break /* Client-side error */
70+
case let HttpClientError.invalidResponse(response, data): break /* Occurs when server did't return success HTTP code (not in 2xx) */
71+
default: break
7272
}
73-
.bindNext { data in
74-
// do something with returned data
75-
}.addDisposableTo(bag)
73+
}).addDisposableTo(bag)
7674
```
7775

78-
Creating url request with additional HTTP headers:
76+
JSON deserialized object may be requested in same way:
77+
7978
```
8079
let client = HttpClient()
8180
let bag = DisposeBag()
82-
let url = NSURL(string: "url_to_resource")!
83-
let request = client.createUrlRequest(url, headers: ["Header": "Value"])
84-
client.loadData(request).bindNext { data in /* */ }.addDisposableTo(bag)
81+
let url = URL(string: "url_to_resource")!
82+
client.requestJson(url: url).subscribe(onNext: { json in /* do something with returned data */ }, onError: { error in
83+
switch error {
84+
case HttpClientError.clientSideError(let error): break /* Client-side error */
85+
case let HttpClientError.invalidResponse(response, data): break /* Occurs when server did't return success HTTP code (not in 2xx) */
86+
default: break
87+
}
88+
}).addDisposableTo(bag)
8589
```
8690

8791
####StreamDataTask
8892
StreamDataTask is a more "low level" object that wraps NSURLSessionDataTask. In most situations is't more convenient to use loadStreamData method (it actually simply forwards events from StreamDataTask), but if necessary StreamDataTask may be used in this way:
8993
```
9094
let client = HttpClient()
9195
let bag = DisposeBag()
92-
let url = NSURL(string: "url_to_resource")!
93-
let request = client.createUrlRequest(url, headers: ["Header": "Value"])
94-
let task = client.createStreamDataTask(request, cacheProvider: nil)
96+
let url = URL(string: "url_to_resource")!
97+
//let request = client.createUrlRequest(url, headers: ["Header": "Value"])
98+
let request = URLRequest(url: url, headers: ["Header": "Value"])
99+
let task = client.createStreamDataTask(request: request, cacheProvider: nil)
95100
// represents same events as loadStreamData method
96-
task.taskProgress.bindNext { event in
101+
task.taskProgress.subscribe(onNext: { event in
97102
switch event {
98-
case StreamTaskEvents.ReceiveResponse(let response): /* Occurs after receiving response from remote server */
99-
case StreamTaskEvents.ReceiveData(let data): /* Occurs after receiving chunk of data from server (generally occurred many times) */
100-
case StreamTaskEvents.Error(let error): /* Occurs in case of client-side error */
101-
case StreamTaskEvents.Success: /* Occurs after successful completion of request */
103+
case StreamTaskEvents.receiveResponse(let response): break /* Occurs after receiving response from remote server */
104+
case StreamTaskEvents.receiveData(let data): break /* Occurs after receiving chunk of data from server (generally occurred many times) */
105+
case StreamTaskEvents.error(let error): break /* Occurs in case of client-side error */
106+
case StreamTaskEvents.success: break /* Occurs after successful completion of request */
102107
default: break
103108
}
104-
}.addDisposableTo(bag)
109+
}).addDisposableTo(bag)
105110
106111
// resume task
107112
task.resume()
108113
```
109114

110115
##How it works
111-
HttpClient object holds it's own NSURLSession. It creates session by providing a session delegate object for handling session-related events. So StreamTaskEvents enum actually represents this session events, for example `case ReceiveResponse(NSURLResponse)` means that `URLSession(_:dataTask:didReceiveResponse:completionHandler:)` delegate method was invoked.
116+
HttpClient object holds it's own NSURLSession. It creates session by providing a session delegate object for handling session-related events. So StreamTaskEvents enum actually represents this session events, for example `case receiveResponse(URLResponse)` means that `URLSession(_:dataTask:didReceiveResponse:completionHandler:)` delegate method was invoked.
112117
Because NSURLSession holds strong reference to delegate it should be invalidated, HttpClient do that in deinitializer by invoking finishTasksAndInvalidate() method, so session will allow running tasks to finish work.
113118

114119
## Contributing

RxHttpClient.xcodeproj/project.pbxproj

Lines changed: 20 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,8 @@
1717
6E81B0381D4A850100D099F1 /* HttpClient.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6E81B0371D4A850100D099F1 /* HttpClient.swift */; };
1818
6E81B03A1D4A85CF00D099F1 /* MemoryCacheProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6E81B0391D4A85CF00D099F1 /* MemoryCacheProvider.swift */; };
1919
6E9360EF1D2AABE100F80F76 /* RxHttpClient.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6EFB9EB81D2A4E2600E30A5D /* RxHttpClient.framework */; };
20+
6ED185511DC7AE1C0071BD4D /* URLRequestTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6ED185501DC7AE1C0071BD4D /* URLRequestTests.swift */; };
2021
6EF8CA431D5664520095A634 /* StreamDataTaskTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6EFB9EEB1D2A57B600E30A5D /* StreamDataTaskTests.swift */; };
21-
6EFB9EBC1D2A4E2600E30A5D /* RxHttpClient.h in Headers */ = {isa = PBXBuildFile; fileRef = 6EFB9EBB1D2A4E2600E30A5D /* RxHttpClient.h */; settings = {ATTRIBUTES = (Public, ); }; };
2222
6EFB9EE61D2A563000E30A5D /* MimeTypeConverter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6EFB9EE51D2A563000E30A5D /* MimeTypeConverter.swift */; };
2323
6EFB9EF41D2A5BBF00E30A5D /* CacheProviderType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6EFB9ED21D2A53FD00E30A5D /* CacheProviderType.swift */; };
2424
6EFB9EF51D2A5BC300E30A5D /* HttpClientType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6EFB9ED31D2A53FD00E30A5D /* HttpClientType.swift */; };
@@ -48,8 +48,8 @@
4848
6E5B3CEF1D2D43C000775D9F /* MimeTypeConverterTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MimeTypeConverterTests.swift; sourceTree = "<group>"; };
4949
6E81B0371D4A850100D099F1 /* HttpClient.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = HttpClient.swift; sourceTree = "<group>"; };
5050
6E81B0391D4A85CF00D099F1 /* MemoryCacheProvider.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MemoryCacheProvider.swift; sourceTree = "<group>"; };
51+
6ED185501DC7AE1C0071BD4D /* URLRequestTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = URLRequestTests.swift; sourceTree = "<group>"; };
5152
6EFB9EB81D2A4E2600E30A5D /* RxHttpClient.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = RxHttpClient.framework; sourceTree = BUILT_PRODUCTS_DIR; };
52-
6EFB9EBB1D2A4E2600E30A5D /* RxHttpClient.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = RxHttpClient.h; sourceTree = "<group>"; };
5353
6EFB9EBD1D2A4E2600E30A5D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
5454
6EFB9EC21D2A4E2600E30A5D /* RxHttpClientTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RxHttpClientTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
5555
6EFB9EC91D2A4E2600E30A5D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
@@ -59,7 +59,6 @@
5959
6EFB9ED71D2A53FD00E30A5D /* NSURLSessionDataEventsObserver.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NSURLSessionDataEventsObserver.swift; sourceTree = "<group>"; };
6060
6EFB9ED81D2A53FD00E30A5D /* StreamDataTask.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = StreamDataTask.swift; sourceTree = "<group>"; };
6161
6EFB9EE51D2A563000E30A5D /* MimeTypeConverter.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MimeTypeConverter.swift; sourceTree = "<group>"; };
62-
6EFB9EE91D2A57B600E30A5D /* RxHttpClientTests-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "RxHttpClientTests-Bridging-Header.h"; sourceTree = "<group>"; };
6362
6EFB9EEA1D2A57B600E30A5D /* MemoryCacheProviderTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = MemoryCacheProviderTests.swift; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.swift; };
6463
6EFB9EEB1D2A57B600E30A5D /* StreamDataTaskTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = StreamDataTaskTests.swift; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.swift; };
6564
6EFB9EF01D2A587100E30A5D /* Fake.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = Fake.swift; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.swift; };
@@ -119,7 +118,6 @@
119118
6EFB9ED71D2A53FD00E30A5D /* NSURLSessionDataEventsObserver.swift */,
120119
6EFB9EE51D2A563000E30A5D /* MimeTypeConverter.swift */,
121120
6EFB9EBD1D2A4E2600E30A5D /* Info.plist */,
122-
6EFB9EBB1D2A4E2600E30A5D /* RxHttpClient.h */,
123121
);
124122
path = RxHttpClient;
125123
sourceTree = "<group>";
@@ -128,14 +126,14 @@
128126
isa = PBXGroup;
129127
children = (
130128
6EFB9EC91D2A4E2600E30A5D /* Info.plist */,
131-
6EFB9EE91D2A57B600E30A5D /* RxHttpClientTests-Bridging-Header.h */,
132129
6EFB9EF01D2A587100E30A5D /* Fake.swift */,
133130
6EFB9EEA1D2A57B600E30A5D /* MemoryCacheProviderTests.swift */,
134131
6EFB9EEB1D2A57B600E30A5D /* StreamDataTaskTests.swift */,
135132
6E5B3CE71D2D1F7400775D9F /* HttpClientBasicTests.swift */,
136133
6E5B3CEB1D2D32F900775D9F /* NSURLSessionTypeTests.swift */,
137134
6E5B3CED1D2D3C8400775D9F /* NSURLTests.swift */,
138135
6E5B3CEF1D2D43C000775D9F /* MimeTypeConverterTests.swift */,
136+
6ED185501DC7AE1C0071BD4D /* URLRequestTests.swift */,
139137
);
140138
path = RxHttpClientTests;
141139
sourceTree = "<group>";
@@ -147,7 +145,6 @@
147145
isa = PBXHeadersBuildPhase;
148146
buildActionMask = 2147483647;
149147
files = (
150-
6EFB9EBC1D2A4E2600E30A5D /* RxHttpClient.h in Headers */,
151148
);
152149
runOnlyForDeploymentPostprocessing = 0;
153150
};
@@ -198,14 +195,16 @@
198195
isa = PBXProject;
199196
attributes = {
200197
LastSwiftUpdateCheck = 0730;
201-
LastUpgradeCheck = 0730;
198+
LastUpgradeCheck = 0800;
202199
ORGANIZATIONNAME = "Anton Efimenko";
203200
TargetAttributes = {
204201
6EFB9EB71D2A4E2600E30A5D = {
205202
CreatedOnToolsVersion = 7.3;
203+
LastSwiftMigration = 0800;
206204
};
207205
6EFB9EC11D2A4E2600E30A5D = {
208206
CreatedOnToolsVersion = 7.3;
207+
LastSwiftMigration = 0800;
209208
};
210209
};
211210
};
@@ -252,9 +251,7 @@
252251
);
253252
inputPaths = (
254253
"$(SRCROOT)/Carthage/Build/iOS/RxSwift.framework",
255-
"$(SRCROOT)/Carthage/Build/iOS/RxCocoa.framework",
256254
"$(SRCROOT)/Carthage/Build/iOS/OHHTTPStubs.framework",
257-
"$(SRCROOT)/Carthage/Build/iOS/RxTests.framework",
258255
);
259256
outputPaths = (
260257
);
@@ -293,6 +290,7 @@
293290
6E1329B81D47903E00BE6270 /* NSURLSessionTypeTests.swift in Sources */,
294291
6E5B3CF01D2D43C000775D9F /* MimeTypeConverterTests.swift in Sources */,
295292
6EFB9EFE1D2A5C8E00E30A5D /* Fake.swift in Sources */,
293+
6ED185511DC7AE1C0071BD4D /* URLRequestTests.swift in Sources */,
296294
);
297295
runOnlyForDeploymentPostprocessing = 0;
298296
};
@@ -321,8 +319,10 @@
321319
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
322320
CLANG_WARN_EMPTY_BODY = YES;
323321
CLANG_WARN_ENUM_CONVERSION = YES;
322+
CLANG_WARN_INFINITE_RECURSION = YES;
324323
CLANG_WARN_INT_CONVERSION = YES;
325324
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
325+
CLANG_WARN_SUSPICIOUS_MOVE = YES;
326326
CLANG_WARN_UNREACHABLE_CODE = YES;
327327
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
328328
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
@@ -370,8 +370,10 @@
370370
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
371371
CLANG_WARN_EMPTY_BODY = YES;
372372
CLANG_WARN_ENUM_CONVERSION = YES;
373+
CLANG_WARN_INFINITE_RECURSION = YES;
373374
CLANG_WARN_INT_CONVERSION = YES;
374375
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
376+
CLANG_WARN_SUSPICIOUS_MOVE = YES;
375377
CLANG_WARN_UNREACHABLE_CODE = YES;
376378
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
377379
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
@@ -391,6 +393,7 @@
391393
IPHONEOS_DEPLOYMENT_TARGET = 9.3;
392394
MTL_ENABLE_DEBUG_INFO = NO;
393395
SDKROOT = iphoneos;
396+
SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule";
394397
TARGETED_DEVICE_FAMILY = "1,2";
395398
VALIDATE_PRODUCT = YES;
396399
VERSIONING_SYSTEM = "apple-generic";
@@ -402,6 +405,7 @@
402405
isa = XCBuildConfiguration;
403406
buildSettings = {
404407
CLANG_ENABLE_MODULES = YES;
408+
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "";
405409
DEFINES_MODULE = YES;
406410
DYLIB_COMPATIBILITY_VERSION = 1;
407411
DYLIB_CURRENT_VERSION = 1;
@@ -417,13 +421,15 @@
417421
PRODUCT_NAME = "$(TARGET_NAME)";
418422
SKIP_INSTALL = YES;
419423
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
424+
SWIFT_VERSION = 3.0;
420425
};
421426
name = Debug;
422427
};
423428
6EFB9ECE1D2A4E2600E30A5D /* Release */ = {
424429
isa = XCBuildConfiguration;
425430
buildSettings = {
426431
CLANG_ENABLE_MODULES = YES;
432+
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "";
427433
DEFINES_MODULE = YES;
428434
DYLIB_COMPATIBILITY_VERSION = 1;
429435
DYLIB_CURRENT_VERSION = 1;
@@ -438,6 +444,7 @@
438444
PRODUCT_BUNDLE_IDENTIFIER = com.AntonEfimenko.RxHttpClient;
439445
PRODUCT_NAME = "$(TARGET_NAME)";
440446
SKIP_INSTALL = YES;
447+
SWIFT_VERSION = 3.0;
441448
};
442449
name = Release;
443450
};
@@ -453,8 +460,9 @@
453460
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
454461
PRODUCT_BUNDLE_IDENTIFIER = com.AntonEfimenko.RxHttpClientTests;
455462
PRODUCT_NAME = "$(TARGET_NAME)";
456-
SWIFT_OBJC_BRIDGING_HEADER = "RxHttpClientTests/RxHttpClientTests-Bridging-Header.h";
463+
SWIFT_OBJC_BRIDGING_HEADER = "";
457464
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
465+
SWIFT_VERSION = 3.0;
458466
};
459467
name = Debug;
460468
};
@@ -470,7 +478,8 @@
470478
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
471479
PRODUCT_BUNDLE_IDENTIFIER = com.AntonEfimenko.RxHttpClientTests;
472480
PRODUCT_NAME = "$(TARGET_NAME)";
473-
SWIFT_OBJC_BRIDGING_HEADER = "RxHttpClientTests/RxHttpClientTests-Bridging-Header.h";
481+
SWIFT_OBJC_BRIDGING_HEADER = "";
482+
SWIFT_VERSION = 3.0;
474483
};
475484
name = Release;
476485
};

RxHttpClient.xcodeproj/xcshareddata/xcschemes/RxHttpClient.xcscheme

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
<?xml version="1.0" encoding="UTF-8"?>
22
<Scheme
3-
LastUpgradeVersion = "0730"
3+
LastUpgradeVersion = "0800"
44
version = "1.3">
55
<BuildAction
66
parallelizeBuildables = "YES"

0 commit comments

Comments
 (0)