-
Notifications
You must be signed in to change notification settings - Fork 16
Upgrading
Minimum Xcode version required is 13.x
.
Last PactSwift version to support Xcode up to and including 12.4 version is v0.13.1
.
Dropped support for Carthage. Linking binary frameworks has been broken from Xcode 13.3+.
baseUrl
is no longer exposed on a MockService
instance. The url for your Pact unit test is provided within the testFunction
's completion block allowing each of the tests to run independently.
# This no longer works
let baseURL = MockService.baseUrl
# Use this instead
mockService.run { baseURL, done in
yourAPIClient(baseURL: baseURL).doThings()
done()
}
PactSwift
now runs on Linux too, although Linux users must provide their own libpact_ffi.so
library.
It can be built from Rust code found at pact-reference/pact_ffi. In order to build it you must have Rust installed:
# Getting Rust
curl https://sh.rustup.rs -sSf | sh
# Building libpact_ffi.so
git clone https://github.com/pact-foundation/pact-reference
cd pact-reference/rust/pact_ffi
cargo build --release
# Building and Testing your Swift project on Linux
cd /path/to/your/swift/project/
export LD_LIBRARY_PATH=/absolute/path/to/pact-reference/rust/target/release/
swift build -Xlinker -L/absolute/path/to/pact-reference/rust/target/release/
swift test -Xlinker -L/absolute/path/to/pact-reference/rust/target/release/
-
PactSwiftMockServer
automatically assigns an available port. SincePactSwift
runs in-process onlocalhost
it really does not make any sense specifying a port at init. In order to be able to runPactSwift
on Apple and Linux platforms, thedarwin
specific code that found an available port has been dropped in favour of socket address127.0.0.1:0
which converts to an address of a found available port.
// This no longer works:
mockService = MockService(port: 1234)
// Use this:
mockService = MockService()
-
MockService
has been renamed toPFMockService
for Objective-C projects. In order forPactSwift
to provide support on Linux a decision has been made to remove any@objc
annotations forMockService
.PFMockService
has been introduced as a wrapper aroundMockService
.
// This no longer works:
_mockService = [[MockService alloc] init];
// Use this:
_mockService = [[PFMockService alloc] init];
Exposed as an open source swift package instead of an XCFramework binary.
MockService.run()
method signature changed. Renamed waitFor
argument into timeout
.
waitFor
is confusing as it might indicate the test will wait for x amount of time before it runs. timeout
is a more appropriate argument name for the implemented behaviour.
// <0.4.x
mockService.run(waitFor: 1) { [unowned self] testCompleted in ... }
// >=0.5.0
mockService.run(timeout: 1) { [unowned self] testCompleted in ... }
Dropping Rust dependency. MockServer was moved into a separate project dependency PactSwiftMockServer
and is exposed as a XCFramework in PactSwiftMockServer-Dist
.
This means there is no need to make changes to the build process in the Xcode project settings.
PactSwift 0.4.0 migrated to XCFrameworks.
- Remove the Build Phase that builds the
libpact_mock_server.a
binary using./Scripts/BuildPhases/build-spm-dependency
script. - Remove
$BUILD_DIR/../../SourcePackages/checkouts/..
entry forLibrary Search Paths
in Build Settings. - Optional: Remove
cargo
andrustup
fromPATH
- Delete your
Carthage/Build
folder to remove any existing framework bundles. - Build new XCFrameworks by running
carthage build --use-xcframeworks
. Any other arguments you build with can be provided like normal. - Remove references to the old frameworks in each of your targets:
- Delete references to Carthage frameworks from the target's Frameworks, Libraries, and Embedded Content section and/or its Link Binary with Libraries build phase.
- Delete references to Carthage frameworks from any Copy Files build phases.
- Delete the target's
carthage copy-frameworks
build phase, if present.
- Add references to XCFrameworks in each of your targets:
- For an application test target: In the Build Phases settings tab, in the Link Binary With Libraries build phase, add the
PactSwift.xcframework
from the Carthage/Build folder on disk.
- For an application test target: In the Build Phases settings tab, in the Link Binary With Libraries build phase, add the
- Remove
$(FRAMEWORK_SEARCH_PATHS)
entry forRunpath Search Paths
in Build Settings for your test target. - Remove
$(PROJECT_DIR)/Carthage/Build/iOS
entry forFramework Search Paths
in Build Settings for your test target.