Development and verification
Development and verification
Toolchain
- Xcode 27.0 (build 27A266a)
- Swift 6 language mode
- iOS 26.0 deployment target
- iOS 27.0 simulator runtime (iOS 26.5 remains useful for compatibility checks)
- Swift Testing and App Intents Testing
- no third-party packages
- TestFlight/App Store preparation in progress
Xcode workflow
Open KidMoney.xcodeproj, select the KidMoney scheme, and choose an iPhone simulator. A physical-device run additionally requires selecting an Apple development team. The committed bundle identifier is io.github.ejones23.KidMoney.
Build and test from the command line:
xcodebuild -project KidMoney.xcodeproj -scheme KidMoney \
-destination 'platform=iOS Simulator,name=iPhone 17 Pro' build
xcodebuild -project KidMoney.xcodeproj -scheme KidMoney \
-destination 'platform=iOS Simulator,name=iPhone 17 Pro' test
The KidMoneyAppIntentsTests UI-test target requires Xcode 27 and an iOS 27
runtime. It launches the app once so the system can register intent metadata,
then executes intents out of process through Apple’s App Intents testing
framework. Configure the same development team for KidMoney and
KidMoneyAppIntentsTests when running on a signed destination. Debug-only test
intents seed and inspect an isolated uniquely named child; they are excluded
from Release and TestFlight builds.
For sandboxed automation, add a writable derived-data path such as -derivedDataPath /private/tmp/kidmoney-derived.
Simulator and test-runner notes
A newly installed runtime can take several minutes to migrate system data on its first boot. Let one invocation finish. Concurrent test runs can leave temporary incomplete .xcresult bundles.
Xcode 26.6’s MCP RunAllTests action occasionally attempted to read its result
bundle before the write completed. If that recurs, treat an incomplete bundle
as runner state, not a pass or failure; retry and require explicit counts.
The iOS 27 simulator currently logs a duplicate system
UIAccessibilityLoaderWebShared class warning from Apple’s WebKit/WebCore
accessibility bundles during UI-test launch. It is outside the app and does not
fail the integration test. App code should still be free of compiler warnings.
Xcode tools for agents
- Open the project in Xcode.
- Enable Xcode → Settings → Intelligence → Model Context Protocol → Allow external agents to use Xcode tools.
- Run
codex mcp add xcode -- xcrun mcpbridge. - Start a new Codex session so its tool catalog includes Xcode.
The bridge provides native builds, tests, Issue Navigator diagnostics, previews, file operations, and Apple documentation search.
Physical iPhone preparation
- Connect and trust the iPhone.
- Add an Apple ID under Xcode Settings → Accounts.
- Select the KidMoney target and choose a development team under Signing & Capabilities.
- Set a unique bundle identifier.
- Select the iPhone as the destination and run once.
Do not commit a personal development-team identifier unless the owner explicitly wants it shared.
For managed work phones, do not attempt to bypass an organization’s local developer-app restrictions. Use an employer-approved distribution channel such as TestFlight or the App Store, and test direct development builds on a personal device instead.
Changing the bundle identifier makes iOS treat the build as a different app with a separate local data container. Avoid changing it after device testing begins unless a migration is planned.
Logs
Phase 2 should use Logger/OSLog around intent invocation, entity lookup, amount conversion, transaction persistence, and returned results. Keep logs useful without recording more family data than necessary.