field_ios

In-the-field app for Radroots on iOS
git clone https://radroots.dev/git/field_ios.git
Log | Files | Refs | LICENSE

commit d43ec1f95872c1f8701b08096c0bae8a1b532bd2
parent bc2bb9145e26626e81c43289441e9b28ff020eda
Author: triesap <tyson@radroots.org>
Date:   Sun, 15 Feb 2026 17:41:16 +0000

ios: replace radrootscore submodule with tracked wrapper

- remove the radrootscore git submodule and drop .gitmodules
- add ios/radrootscore makefile wrapper that builds crates/app-ffi-swift
- route root ios make targets through the radrootscore wrapper makefile
- document wrapper usage and shared crate mapping in ios/radrootscore/readme

Diffstat:
D.gitmodules | 3---
MMakefile | 52++++++++--------------------------------------------
DRadrootsCore | 1-
ARadrootsCore/.gitignore | 1+
ARadrootsCore/Makefile | 59+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
ARadrootsCore/README.md | 9+++++++++
6 files changed, 77 insertions(+), 48 deletions(-)

diff --git a/.gitmodules b/.gitmodules @@ -1,3 +0,0 @@ -[submodule "RadrootsCore"] - path = RadrootsCore - url = ssh://git@git.radroots.dev:2222/radroots/app.git diff --git a/Makefile b/Makefile @@ -1,57 +1,21 @@ -CRATE := radroots-app-ffi -ROOT := $(CURDIR)/RadrootsCore -OUTDIR := $(ROOT)/target/xcframework - -FRAMEWORK_DEST := $(CURDIR)/RadrootsKit/Artifacts -GENERATED_SWIFT := $(CURDIR)/RadrootsKit/Sources/RadrootsKit/Generated -CONFIG_PATH := $(ROOT)/crates/ffi/uniffi.toml - -LIB_DEV := $(ROOT)/target/aarch64-apple-ios/release/libradroots_app_ffi.a -LIB_SIM_ARM64 := $(ROOT)/target/aarch64-apple-ios-sim/release/libradroots_app_ffi.a -HOST_DYLIB := $(ROOT)/target/release/libradroots_app_ffi.dylib - -HEADERS_DIR := $(OUTDIR)/headers +WRAPPER_ROOT := $(CURDIR)/RadrootsCore .PHONY: all clean build generate package bindings -all: clean build generate package bindings - @echo "Done." - @echo " - XCFramework: $(FRAMEWORK_DEST)/RadrootsFFI.xcframework" - @echo " - Swift bindings: $(GENERATED_SWIFT)/*.swift" +all: + $(MAKE) -C $(WRAPPER_ROOT) all clean: - @echo "Cleaning output dirs..." - rm -rf $(OUTDIR) $(FRAMEWORK_DEST) $(GENERATED_SWIFT) - mkdir -p $(OUTDIR) $(FRAMEWORK_DEST) $(GENERATED_SWIFT) + $(MAKE) -C $(WRAPPER_ROOT) clean build: - @echo "Building $(CRATE) for iOS device + simulator..." - cd $(ROOT) && cargo build -p $(CRATE) --release --target aarch64-apple-ios - cd $(ROOT) && cargo build -p $(CRATE) --release --target aarch64-apple-ios-sim - - @echo "Building host cdylib for UniFFI (metadata)…" - cd $(ROOT) && cargo build -p $(CRATE) --release + $(MAKE) -C $(WRAPPER_ROOT) build generate: - @echo "Generating Swift bindings with UniFFI (host dylib)…" - cd $(ROOT) && cargo run -p $(CRATE) --bin uniffi-bindgen -- \ - generate --library $(HOST_DYLIB) \ - --language swift \ - --out-dir $(OUTDIR)/generated \ - --config $(CONFIG_PATH) - - @echo "Preparing headers..." - mkdir -p $(HEADERS_DIR) - cp $(OUTDIR)/generated/RadrootsFFI.h $(HEADERS_DIR)/ - cp $(OUTDIR)/generated/RadrootsFFI.modulemap $(HEADERS_DIR)/module.modulemap + $(MAKE) -C $(WRAPPER_ROOT) generate package: - @echo "Packaging RadrootsFFI.xcframework..." - xcodebuild -create-xcframework \ - -library $(LIB_DEV) -headers $(HEADERS_DIR) \ - -library $(LIB_SIM_ARM64) -headers $(HEADERS_DIR) \ - -output $(FRAMEWORK_DEST)/RadrootsFFI.xcframework + $(MAKE) -C $(WRAPPER_ROOT) package bindings: - @echo "Copying Swift bindings into RadrootsKit..." - cp $(OUTDIR)/generated/*.swift $(GENERATED_SWIFT)/ + $(MAKE) -C $(WRAPPER_ROOT) bindings diff --git a/RadrootsCore b/RadrootsCore @@ -1 +0,0 @@ -Subproject commit 3fd6661c5bd4eeb1dea0d64d4743059efc5e9323 diff --git a/RadrootsCore/.gitignore b/RadrootsCore/.gitignore @@ -0,0 +1 @@ +target/ diff --git a/RadrootsCore/Makefile b/RadrootsCore/Makefile @@ -0,0 +1,59 @@ +CRATE := radroots-app-ffi-swift +WRAPPER_ROOT := $(CURDIR) +IOS_ROOT := $(abspath $(WRAPPER_ROOT)/..) +CRATES_ROOT := $(abspath $(IOS_ROOT)/../crates) +OUTDIR := $(WRAPPER_ROOT)/target/xcframework + +FRAMEWORK_DEST := $(IOS_ROOT)/RadrootsKit/Artifacts +GENERATED_SWIFT := $(IOS_ROOT)/RadrootsKit/Sources/RadrootsKit/Generated +CONFIG_PATH := $(CRATES_ROOT)/app-ffi-swift/uniffi.toml + +LIB_DEV := $(WRAPPER_ROOT)/target/aarch64-apple-ios/release/libradroots_app_ffi_swift.a +LIB_SIM_ARM64 := $(WRAPPER_ROOT)/target/aarch64-apple-ios-sim/release/libradroots_app_ffi_swift.a +HOST_DYLIB := $(WRAPPER_ROOT)/target/release/libradroots_app_ffi_swift.dylib + +HEADERS_DIR := $(OUTDIR)/headers + +.PHONY: all clean build generate package bindings + +all: clean build generate package bindings + @echo "done." + @echo " - xcframework: $(FRAMEWORK_DEST)/RadrootsFFI.xcframework" + @echo " - swift bindings: $(GENERATED_SWIFT)/*.swift" + +clean: + @echo "cleaning output dirs..." + rm -rf $(OUTDIR) $(FRAMEWORK_DEST) $(GENERATED_SWIFT) + mkdir -p $(OUTDIR) $(FRAMEWORK_DEST) $(GENERATED_SWIFT) + +build: + @echo "building $(CRATE) for ios device + simulator..." + cd $(CRATES_ROOT) && CARGO_TARGET_DIR=$(WRAPPER_ROOT)/target cargo build -p $(CRATE) --release --target aarch64-apple-ios + cd $(CRATES_ROOT) && CARGO_TARGET_DIR=$(WRAPPER_ROOT)/target cargo build -p $(CRATE) --release --target aarch64-apple-ios-sim + + @echo "building host cdylib for uniffi metadata..." + cd $(CRATES_ROOT) && CARGO_TARGET_DIR=$(WRAPPER_ROOT)/target cargo build -p $(CRATE) --release + +generate: + @echo "generating swift bindings with uniffi..." + cd $(CRATES_ROOT) && CARGO_TARGET_DIR=$(WRAPPER_ROOT)/target cargo run -p $(CRATE) --bin uniffi-bindgen -- \ + generate --library $(HOST_DYLIB) \ + --language swift \ + --out-dir $(OUTDIR)/generated \ + --config $(CONFIG_PATH) + + @echo "preparing headers..." + mkdir -p $(HEADERS_DIR) + cp $(OUTDIR)/generated/RadrootsFFI.h $(HEADERS_DIR)/ + cp $(OUTDIR)/generated/RadrootsFFI.modulemap $(HEADERS_DIR)/module.modulemap + +package: + @echo "packaging RadrootsFFI.xcframework..." + xcodebuild -create-xcframework \ + -library $(LIB_DEV) -headers $(HEADERS_DIR) \ + -library $(LIB_SIM_ARM64) -headers $(HEADERS_DIR) \ + -output $(FRAMEWORK_DEST)/RadrootsFFI.xcframework + +bindings: + @echo "copying swift bindings into RadrootsKit..." + cp $(OUTDIR)/generated/*.swift $(GENERATED_SWIFT)/ diff --git a/RadrootsCore/README.md b/RadrootsCore/README.md @@ -0,0 +1,9 @@ +# RadrootsCore + +This directory is a thin iOS wrapper around shared Rust crates in `../crates`. + +- shared backend crate: `../crates/app-core` +- swift ffi crate: `../crates/app-ffi-swift` +- wasm crate: `../crates/app-wasm` + +Use `make -C ios/RadrootsCore` (or `make` from `ios/`) to build the Rust static libraries, generate UniFFI Swift bindings, and package `RadrootsFFI.xcframework` for `RadrootsKit`.