This repository is a Swift Package for distributing releases of Mozilla's various Rust-based application components. It provides the Swift source code packaged in a format understood by the Swift package manager, and depends on a pre-compiled binary release of the underlying Rust code published from mozilla/application-services.
For more information, please consult:
- application-services ADR-0003, which describes the overall plan for distributing Rust-based components as Swift packages.
- The Swift Package Manager docs and GitHub repo, which explain the details of how Swift Packages work (and hence why this repo is set up the way it is).
- The
ios-rust
crate which is currently responsible for publishing the pre-builtMozillaRustComponents.xcframework.zip
andFocusRustComponents.xcframework.zip
bundles on which this repository depends.
Here's a diagram of how this repository relates to the application-services repository and its release artifacts:
Key points:
- The
application-services
repo publishes two binary artifactsMozillaRustComponents.xcframework.zip
andFocusRustComponents.xcframework.zip
containing the Rust code and FFI definitions for all components, compiled together into a single library. - The
Package.swift
file refrences the xcframeworks as Swift binary targets. - The
Package.swift
file defines a library per target (one for all the components used byfirefox-ios
and one forfocus-ios
)- Each library references its Swift source code directly as files in the repo. All components used by a target are copied into the same directory. For example, all the
firefox-ios
files are in theswift-source/all
directory. - Each library depends on wrapper which wraps the binary to provide the pre-compiled Rust code. For example,
FocusRustComponentWrapper
wraps the Focus xcframework.
- Each library references its Swift source code directly as files in the repo. All components used by a target are copied into the same directory. For example, all the
Whenever a new release of the underlying components is availble, we need to tag a new release in this repo to make them available to Swift components. To do so:
- Edit
Package.swift
to update the URL and checksum ofMozillaRustComponents.xcframework.zip
. - Run
./make_tag.sh --as-version {APP_SERVICES_VERSION} X.Y.Z
to create the new tag. - Run
git push origin X.Y.Z
to publish it to GitHub.
Check out the instructions in the docs in application-services
for adding a new component and publishing it for iOS. The docs are also published for convenience in https://mozilla.github.io/application-services/book/index.html.
For testing instructions, you can checkout the docs in the application-services
which are published for convenience in https://mozilla.github.io/application-services/book/index.html