Native Swift app that consumes atman as a C-ABI static library.
ios/
├── Beam/ # Swift sources + bridging header + Info.plist
├── atman/ # libatman.a + atman.h (produced by build_atman.sh)
├── build_atman.sh # builds atman → atman/{libatman.a,atman.h}
├── project.yml # xcodegen config
└── README.md
atman lives at ./submodules/atman (git submodule).
- Make sure submodules are initialized:
git submodule update --init --recursive - Install Rust iOS targets:
rustup target add aarch64-apple-ios x86_64-apple-ios aarch64-apple-ios-sim - Install
cbindgen(header generator) andxcodegen:cargo install cbindgen brew install xcodegen
DEVELOPMENT_TEAM="YOUR_TEAM_ID" xcodegen
Xcode doesn't run the Rust build itself — invoke build_atman.sh by hand
whenever atman's source has changed, then open the project.
./build_atman.sh --arm64 # device
./build_atman.sh --sim-arm64 # simulator (Apple Silicon)
./build_atman.sh --x86_64 # simulator (Intel)
./build_atman.sh <target> --release # release profile
The script produces atman/atman.h + atman/libatman.a. Xcode picks them
up via the HEADER_SEARCH_PATHS / LIBRARY_SEARCH_PATHS settings.
open Beam.xcodeproj
- Bump the
MARKETING_VERSIONinproject.yml. - Regenerate Xcode project:
DEVELOPMENT_TEAM="YOUR_TEAM_ID" xcodegen generate - Change the
CFBundleShortVersionStringinBeam/Info.plist.
- Build atman for ARM64 with release mode:
./build_atman.sh --arm64 --release
- Open
Beam.xcodeprojas described above. - Then in Xcode,
- Destination:
Any iOS Device (arm64) - Menu:
Product→Archive - When Organizer opens:
Distribute App→App Store Connect→Upload - Xcode signs with the automatic profile tied to the team ID you specified for
xcodegen.
- Destination: