On this page

mobile/BUILD-IOS.md

iPhone build

Aegion on iPhone and iPad

Aegion (the Aegis app) is the same Kivy app as on Android and the desktop, built with kivy-ios through buildozer. The home-screen name is Aegion (title and ios.plist.CFBundleDisplayName in buildozer.spec); the bundle id stays online.mindflux.aegis and the Xcode project keeps the package name aegis. Nothing here can be built or tested on the Ubuntu laptop: an iOS build needs a Mac with Xcode, and installing needs an Apple ID.

What works on iOS

FeatureiOS
Ask, Library, Tutorials, Markets, Shield of Zeus (while the app is open)yes, same code
Weather, exchange rates, city times, sports, companiesyes (needs internet)
Read-aloudAVSpeechSynthesizer (engine/plat_ios.py)
Voice questions, Artemis wake wordAVAudioRecorder + SFSpeechRecognizer (engine/plat_ios.py)
LinksUIApplication openURL:options:completionHandler:
Laptop link, Sync nowyes, over the same Wi-Fi (pairing code from the laptop's Handshake page)
Signal Walkview only: walks arrive by Sync now, or Finder file sharing into Documents/aegismobile/walks/walks.db
Auto-train in the backgroundno: iOS has no long-running service; it runs while the app is open
Restart after a style changeno: iOS apps can't relaunch themselves; the new style applies on the next launch
Guardian scan, SignalDub Studiono (Linux / desktop only)

Apple does not let apps scan Wi-Fi, cell towers or classic Bluetooth. A Signal Walk recorder for iOS would need a native Swift module (BLE + GPS only); that is a separate project.

1. On the Mac (one time)

xcode-select --install                       # command-line tools; install Xcode from the App Store too
brew install autoconf automake libtool pkg-config
python3.11 -m venv ~/aegis-ios/.venv && source ~/aegis-ios/.venv/bin/activate
pip install buildozer "Cython<3" kivy-ios

Copy the mobile/ folder to the Mac (for example the extracted build page, or git clone). The knowledge pack assets/aegis-pack.sqlite must be in it (it is git-ignored; copy it, or use Settings > LAPTOP LINK > Sync now later to download a fresh one).

2. Build

cd ~/aegis-ios/mobile
buildozer --profile ios ios debug            # [app@ios] adds pyobjus to the requirements
python3 ios-plist.py                         # copy the ios.plist.* usage strings into Info.plist
python3 ios-plist.py --check                 # must print "Info.plist has every ios.plist key"
open .buildozer/ios/platform/kivy-ios/aegis-ios/aegis.xcodeproj

The first build compiles Python, SDL2 and Kivy for arm64 and takes 30-60 minutes. Without the usage strings iOS closes the app the moment Voice is tapped, so run ios-plist.py after every buildozer ios that recreates the project.

3. Sign and install

In Xcode: select the aegis target, Signing & Capabilities, tick Automatically manage signing, pick your team (your Apple ID), keep the bundle id online.mindflux.aegis (change it if Xcode says it is taken). Plug in the iPhone, trust the computer, choose it as the run destination and press Run. On the phone: Settings > General > VPN & Device Management > trust your developer certificate.

4. First run checks

Troubleshooting

SymptomFix
No recipe named sqlite3kivy-ios's python3 already has sqlite3: remove it from [app@ios] requirements.
pyobjus build errorspip install -U kivy-ios, then buildozer ios clean (or toolchain clean pyobjus).
The app closes when Voice is tappedInfo.plist lacks the usage strings: python3 ios-plist.py, rebuild in Xcode.
Sync now: "not reachable"Same Wi-Fi; backend listening on 0.0.0.0 (RUN-DESKTOP.md); allow Local Network for Aegion in iOS Settings > Privacy.
Sync now: "pairing code is missing or wrong"Copy the code from the laptop's Handshake page, Settings, Phone link.
"Signing requires a development team"Xcode > Settings > Accounts: add your Apple ID, then pick it as the team.
Read-aloud is silentRing/silent switch, or no voice for the language: Settings > Accessibility > Spoken Content > Voices.