Native Shell Upgrade Guide
View SourceThis guide tracks per-template-version changes to the generated iOS and Android shell projects.
Versions are listed newest-first. Each entry leads with the RebuildPolicy.classify/2 verdict
and the named change-class atoms so you can determine the adopter action before reading the details.
The shell is host-owned after generation. Every upgrade is elective. Even OTA-safe entries document what changed so you can make an informed decision about whether to apply the update.
Use mix crosswake.gen.shell --diff to compare your on-disk shell against the current templates
before deciding whether to incorporate changes.
Use mix crosswake.shell.status to check whether your generated shell manifest matches the
current template_version.
Template Version 2 (Phase 134 — stamp, manifest, diff)
RebuildPolicy verdict: :ota_safe — change class: :docs_wording (template commentary only)
What changed
- A 2-line provenance stamp was added to all 15 stamp-eligible templates (Swift, Kotlin, Groovy,
Properties, XML, and plist files). The stamp records the crosswake version and integer
template_versionat generation time. - A
.crosswake/shell.jsonmanifest is now written to the per-platform generated root on everymix crosswake.gen.shellinvocation. The manifest capturescrosswake_version,template_version,platform,generated_at, andparams(router,local,target). - The
gradlew.batandgradlewscripts andproject.pbxprojwere not stamped (binary-safe exclusions per Phase 134 design).
Should you rebuild?
RebuildPolicy.classify/2 called with :docs_wording returns :ota_safe. The stamp and
manifest additions are commentary and metadata only — no native code, entitlements, permissions,
or platform configuration changed.
iex> RebuildPolicy.classify(:docs_wording, nil)
# Equivalent outcome: :ota_safeNo rebuild of the host binary is required.
Files changed in this template version
iOS (6 stamped templates):
CrosswakeShell/CrosswakeShellApp.swiftCrosswakeShell/CrosswakeCoordinator.swiftCrosswakeShell/Info.plistCrosswakeShell/CrosswakeShell.entitlementsCrosswakeShell/PrivacyInfo.xcprivacyCrosswakeShell.xcodeproj/xcshareddata/xcschemes/CrosswakeShell.xcscheme
Android (9 stamped templates):
settings.gradlebuild.gradlegradle.propertiesgradle/wrapper/gradle-wrapper.propertiesapp/build.gradleapp/src/main/AndroidManifest.xmlapp/src/main/java/dev/crosswake/shell/MainActivity.ktapp/src/main/java/dev/crosswake/shell/CrosswakeViewModel.ktapp/src/main/res/values/themes.xml
Template Version 1 (initial)
RebuildPolicy verdict: baseline — no prior version to upgrade from.
What changed
Template Version 1 established the initial generated shell scaffold:
- iOS Xcode project with
CrosswakeShellApp.swift,CrosswakeCoordinator.swift,Info.plist, entitlements, privacy manifest, and xcscheme. - Android Studio project with Kotlin
MainActivity,CrosswakeViewModel,AndroidManifest.xml, Gradle build files, and themes. - Bundled canonical manifest, activation, denial, and pack inventory fixtures under
Fixtures/(iOS) andapp/src/main/assets/(Android).
Should you rebuild?
This is the baseline version. There is no prior shell to upgrade from. Run
mix crosswake.gen.shell ios and/or mix crosswake.gen.shell android to generate
Template Version 1 output.
RebuildPolicy.classify/2 is not applicable at the initial baseline — there is no
prior template version to classify a change against.
Files changed in this template version
All generated shell files — this is the initial scaffold.