- Migrate to Swift 4
- Added
data: Data?parameter todidFinishCollectingTaskMetricsin theServicePassthroughDelegateprotocol. This is useful for components that need to monitor the data firehose from web service responses.
- Add
setShouldHandleCookiesAPI for configuring the default cookie behavior of the request
- Make the default
URLSessionmodifiable within the app instead of relying on the system level shared instance
- Use default settings for bitcode
- Make the
WebService's'requestmethod public so external interfaces can more dynamically createServiceTaskinstances
- Add
ServiceTaskMetricsAPI to enableServiceTaskto collect performance metrics during execution - Make
passthroughDelegateproperty public
- Avoid encoding
URLRequestmultiple times inServiceTask
- Added
QueryParameterEncoderAPI for defining a custom encoding for query parameters
- Cache JSON deserialization so it can be reused in other handlers Previously if there were multiple
responseJSONhandlers in a service task chain, the response body would be deserialized for eachresponseJSONcall. This change allows multiple calls to reuse the same deserialized payload.
- Resolved various Xcode 8.3 warnings
- Fixed build errors in example project
- Added
@discardableResultin Obj-C APIs to resolve unused value warning
WebService can now be initialized with a URL type for the baseURL along with the existing baseURLString. Example:
let url = URL(string: "http://httpbin.org")
let service = WebService(baseURL: url)
- Added
baseURL: URL?property toWebService - Added an initializer to
WebServicefor initializing with aURL. - Enabled runtime overriding of
absoluteURLString(_:)
- Remove
lazyvar for Carthage compatibility.
- Update to Xcode 8.1 recommended project settings.
- Added support for Swift 3
- API naming changes for Swift 3
- Removed
SessionDataTaskDataSourceAPI
- Merge support for PATCH HTTP requests
- Added support for Xcode 8, Swift 2.3, and iOS SDK 10
- Added support for PATCH HTTP requests.
- Deprecated
ServiceTaskResult.Failure. Usethrowto propagate errors instead. - Deprecated
setParameters(parameters:encoding:)andsetParameterEncoding(encoding:)methods ofServiceTask. UsesetQueryParameters(parameters:)andsetFormParameters(parameters:)instead.
- Added
setQueryParameters(parameters:)method toServiceTaskfor setting key/value pairs in the URL query string. Fixes #40. - Added
setFormParameters(parameters:)method toServiceTaskfor setting key/value pairs in the request body as form encoded data. Fixes #40. - Response handler closures can throw errors to propagate errors instead of return
.Failure(error).
- Make
updateUI()andupdateErrorUIhandlers block handler chain execution. Fixes #38.
Previously, response handlers returned a.Failure(error) value to indiciate that a handler failed.
.responseJSON { json, response in
if let models: [Brewer] = JSONDecoder<Brewer>.decode(json) {
return .Value(models)
} else {
// any value conforming to ErrorType
return .Failure(JSONDecoderError.FailedToDecodeBrewer)
}
}
Response handlers should now use Swift's throw keyword to propagate errors.
.responseJSON { json, response in
guard let models: [Brewer] = JSONDecoder<Brewer>.decode(json) {
throw JSONDecoderError.FailedToDecodeBrewer
}
return .Value(models)
}
GET, DELETE, or HEAD request that use setParameters(parameters:encoding:) to encode parameter data in the URL query string should move to using setQueryParameters(parameters:) to set parameter data instead.
POST and PUT requests that use setParameters(parameters:encoding:) to send form data, not JSON, in the request body should instead use setFormParameters(parameters:).
- Force-downcast
updateUIObjChandler's value to avoid silent failure. Fixes #34. - Introduced
transform()andrecover()response handler API. See the Composing Response Handlers section of programming guide for more info on how to use the new API.
- Removed the
SessionDataTaskDataSourcedeprecation warnings that were declared with the@availableattribute. The@availableattribute was causing warnings to surface in Xcode projects that contained the ELWebService Xcode project as a subproject even when the deprecated API was not being called from the parent project. Due to Walmart's internal workflow being dependant on including ELWebService as a subproject, a decision was made to remove the@avaiabledeprecation warnings in a patch release.
- Resolved Swift 3 deprecation warnings.
- Updated the Objective-C request API to return
selfinstance for API consistency - Simplified query parameter encoding with
NSURLQueryItemPreviously, query parameters were encoded manually by piecing together string values withstringByAddingPercentEncodingWithAllowedCharacters. This change allowsNSURLQueryItemto handle the percent encoding and usesNSURLComponentsto produce the encoded query string. - Updated ELWebService unit tests to use mock sessions instead of sending requests over the network.
- Added more unit tests, increasing code coverage to 99%
- Added unit tests to example project to demonstrate session and response mocking
- Added
NSURLResponseparameter toJSONHandlerclosure to enable JSON response handler to access response meta data. (24d7d5a) - Deployment target turned down to 8.0. (c4b9b6e)
- Deprecated
SessionDataTaskDataSourceprotocol in favor ofSession. - Deprecated WebService's
dataTaskSourceproperty. UseSessionprotocol and set thesessionproperty instead. - Deprecated WebService's
dataTaskWithRequest(request:completionHandler)method. UsedataTask(request:completion:)instead.
- Added
SessionandDataTaskprotocols to decoupleNSURLSessionandNSURLSessionDataTaskfromServiceTaskandWebService. These new protocols enable code to mock the session and data task objects so that unit tests can be performed without sending requests over the network. The framework provides implementations that makeNSURLSessionconform toSessionandNSURLSessionDataTaskconform toDataTask - Added Mocking API. See the mocking API documentation for usage information.
- Added
MockSessionandMockDataTaskprotocols as a mocking interface forSessionandDataTasktypes. - Added
MockResponsefor easier response mocking
- Added
- Changed deployment target to 8.0
- Replaced ServiceTask's GCD queue with NSOperationQueue so queued blocks can be cancelled in deinit
- Added
ServicePassthroughDelegateprotocol for handling raw request and response events
- Added
dataTaskWithRequestmethod low-level WebService API for creatingNSURLSessionDataTaskfromNSURLRequestobjects
- Added better support for Objective-C interoperability by introducing a special request API for Obj-C. See Objective-C ServiceTask Request API section in the programming guide for more information.
- Added support for Objective-C interoperability. Fixes #21. For information on usage from Obj-C see the Objective-C Interoperability section in the ELWebService Programming Guide. Several changes were made to support Obj-C interop:
- Made
WebServiceinherit from NSObject - Made
ServiceTaskinherit from NSObject - Added
ObjCHandlerResultclass to encapsulate result data from Obj-C handlers - Added
ObjCResponseHandlerclosure type to support adding response handlers that work with Obj-C - Extended
ServiceTaskto add specially-named response handler methods to support adding handlers from Obj-C - Added a
ServiceTaskResultinitializer so that a service task result value can be initialized from anObjCHandlerResultvalue
- Made
- Enabled testability for release builds. Fixes #19.
- Encode request parameters only when parameters are non empty. Fixes an issue where request URLs would end with a
?character when sending GET requests with empty parameters.
- Changed
ServiceTaskResult.Valueto useAnyinstead ofAnyObjectin order to support value types. fixes #15.
- Changed response handlers that are set with
response(),responseJSON, andresponseError()to run on a background queue. fixes #7. - Added
updateErrorUI()to set error handlers that run on the main queue. fixes #8 - Added
updateUI()to set response handlers that run on the main queue. - Added
ServiceTaskResultto allow response handlers to control flow through the chain. - Added
SessionDataTaskDataSourceconformance toNSURLSession - Removed request option API in favor of
ServiceTaskmethods for setting request details. - Added
ServiceTaskmethods for configuring the request details.
- Added
bodyparameter toRequestfor storing HTTP body data - Added
.Bodyand.BodyJSONrequest options to allow raw HTTP body contents to be defined - Updated example project to provide a better example of ELWebService usage
- Change
WebServiceto a final class
- Various updates for Swift 2 support based on Xcode 7 migration tool
- Enable testability for debug builds only
- Add
percentEncodeURLQueryCharactersto encode params now thatstringByAddingPercentEscapesUsingEncodingis deprecated in iOS 9 - Clean up unit tests to fix Xcode 7 warnings
- Audit access control and update tests based on new
@testabilityXcode 7 support - Use Swift 2's new
ErrorTypeas the error parameter type for error handlers
- Update example web service project to use
throwError() - Refactor error handling to utilize
Resultenum
- Added Travis CI support