-
Notifications
You must be signed in to change notification settings - Fork 18
Upgrading
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. In order to be able to runPactSwift
on Apple and Linux platforms, thedarwin
specific code to find an available port has been dropped.
// This no longer works:
mockService = MockService(port: 1234)
-
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.