diff --git a/bindings/apple/README.md b/bindings/apple/README.md index 9027cb77d..710e891bf 100644 --- a/bindings/apple/README.md +++ b/bindings/apple/README.md @@ -5,25 +5,28 @@ This project and build script demonstrate how to create an XCFramework that can ## Prerequisites for building universal frameworks * the Rust toolchain -* UniFFI - `cargo install uniffi_bindgen` -* Apple targets (e.g. `rustup target add aarch64-apple-ios`) +* Apple targets (e.g. `rustup target add aarch64-apple-ios aarch64-apple-ios-sim x86_64-apple-ios aarch64-apple-darwin x86_64-apple-darwin`) * `xcodebuild` command line tool from [Apple](https://developer.apple.com/library/archive/technotes/tn2339/_index.html) * `lipo` for creating the fat static libs ## Building the SDK ``` -sh build_xcframework.sh +cargo xtask swift build-framework ``` -The `build_xcframework.sh` script will go through all the steps required to generate a fully usable `.xcframework`: +The `build-framework` task will go through all the steps required to generate a fully usable `.xcframework`: -1. compile `matrix-sdk-ffi` libraries for iOS, the iOS simulator, MacOS, and Mac Catalyst under `/target`. Some targets are not part of the standard library and they will be built using the nightly toolchain. +1. compile `matrix-sdk-ffi` libraries for iOS, the iOS simulator and macOS under `/target`. Some targets are not part of the standard library and they will be built using the nightly toolchain. 2. `lipo` together the libraries for the same platform under `/generated` 3. run `uniffi` and generate the C header, module map and swift files 4. `xcodebuild` an `xcframework` from the fat static libs and the original iOS one, and add the header and module map to it under `generated/MatrixSDKFFI.xcframework` 5. cleanup and delete the generated files except the .xcframework and the swift sources (that aren't part of the framework) +For development purposes, it will additionally generate a `Package.swift` file in the root of the repo that can be used to add the framework to your project and enable debugging through the use of [rust-xcode-plugin](https://github.com/BrainiumLLC/rust-xcode-plugin) (make sure to run the task with the argument `--profile=reldbg`). + +When building the SDK for release you should pass the `--release` argument to the task, which will strip away any symbols and optimise the created binary. + ## Building only the Crypto SDK ``` @@ -40,13 +43,13 @@ The `build_crypto_xcframework.sh` script will go through all the steps required ## Building & testing the Swift package -`Package.swift` is meant to provide a simple example on how to integrate everything together but also a place to run unit and integration tests from. +The `Package.swift` file in this directory provides a simple example on how to integrate everything together but also a place to run unit and integration tests from. It's pre-configured to link to the generated static lib and .swift files so successfully running `cargo xtask swift build-library` first is necessary for it to compile. Afterwards you can execute the tests with `swift test`. Note that for the moment this only works on macOS but we're planning to add Linux support in the future. ## Distribution -The generated framework and Swift code can be distributed and integrated directly but in order to make things simpler we bundle them together as a Swift package available [TBD](here) in the case of SDK, and as CocoaPods podspec in the case of Crypto SDK. +The generated framework and Swift code can be distributed and integrated directly but in order to make things simpler we bundle them together as a [Swift package](https://github.com/matrix-org/matrix-rust-components-swift/) in the case of SDK, and as a CocoaPods podspec in the case of Crypto SDK. ### Publishing MatrixSDKCrypto 1. Run `build_crypto_xcframework.sh` script which generates a .zip file with the framework diff --git a/bindings/apple/build_xcframework.sh b/bindings/apple/build_xcframework.sh deleted file mode 100755 index 46d7474a9..000000000 --- a/bindings/apple/build_xcframework.sh +++ /dev/null @@ -1,7 +0,0 @@ -#!/usr/bin/env bash -set -eEu - -cd "$(dirname "$0")" -cd ../.. - -cargo xtask swift build-framework --release $* diff --git a/bindings/apple/debug_build_xcframework.sh b/bindings/apple/debug_build_xcframework.sh deleted file mode 100755 index 562dabe2d..000000000 --- a/bindings/apple/debug_build_xcframework.sh +++ /dev/null @@ -1,31 +0,0 @@ -#!/usr/bin/env bash -set -eEu - -cd "$(dirname "$0")" - -IS_CI=false -ACTIVE_ARCH="arm64" - -if [ $# -eq 2 ]; then - echo "Running CI build" - IS_CI=true - ARCHS=( $1 ) - ACTIVE_ARCH=${ARCHS[0]} -elif [ $# -eq 1 ]; then - echo "Running debug build" - ARCHS=( $1 ) - ACTIVE_ARCH=${ARCHS[0]} -else - echo "Running debug build" -fi - -# iOS Simulator arm64 -if [ "$ACTIVE_ARCH" = "arm64" ]; then - TARGET="aarch64-apple-ios-sim" -# iOS Simulator intel -else - TARGET="x86_64-apple-ios" -fi -echo "Active architecture ${ACTIVE_ARCH}" - -cargo xtask swift build-framework --profile=reldbg --sim-only-target=${TARGET} $*