|
| 1 | +# TestFlight Publication Readiness |
| 2 | + |
| 3 | +Status: **BLOCKED only on exact Apple-delivered install/rehearsal and symbolication follow-up** |
| 4 | + |
| 5 | +This document records the sanitized, reviewable publication snapshot for the |
| 6 | +migration-fixed Fearless Wallet iOS build. It does not contain App Store |
| 7 | +credentials, signing secrets, wallet data, device data, or a private tester |
| 8 | +handoff. |
| 9 | + |
| 10 | +## Exact Published Build |
| 11 | + |
| 12 | +- Artifact source commit: |
| 13 | + `f56b7b896344cfded39456217097747ef9efeacf`. |
| 14 | +- Bundle and version: |
| 15 | + `jp.co.soramitsu.fearlesswallet`, `4.2.0 (2026.7.26)`. |
| 16 | +- Pre-upload archive tree SHA-256: |
| 17 | + `301f19a4f1232fb05719d85b825ac081196fa5fb6988b58011b7569a4bd9e6fa`. |
| 18 | +- Executable SHA-256: |
| 19 | + `cf0318792fc361bbd8704b21b6e1a08c4d81897f23492e4a807eab7f22403568`. |
| 20 | +- Signed-archive audit receipt SHA-256: |
| 21 | + `1dbf38740b38403dde9cc7d4b1710cd28fdd5dc6f6f25990a7102020f11d1abc`. |
| 22 | +- Preserved-data archive rehearsal result SHA-256: |
| 23 | + `418d22cdd9e673ddfa1f47a49c666df11a740aac6737f6ef2b0328fa1b6a8641`. |
| 24 | + |
| 25 | +Xcode uploaded the exact archive successfully at `2026-07-26T13:16:00Z`. |
| 26 | +Its only archive mutation was the normal `Distributions` receipt in |
| 27 | +`Info.plist`. Removing that receipt from a copy reconstructed the pre-upload |
| 28 | +tree hash, while the embedded app signature and executable hash remained |
| 29 | +unchanged. |
| 30 | + |
| 31 | +## External TestFlight State |
| 32 | + |
| 33 | +The authenticated App Store Connect observation at |
| 34 | +`2026-07-26T13:26:11Z` records: |
| 35 | + |
| 36 | +- `4.2.0 (2026.7.26)` is `Testing`; |
| 37 | +- external group `Public Beta Test` has stable identifier |
| 38 | + `9410949d-b468-40e5-b2f4-24055e65d270`; |
| 39 | +- the group contains the exact build and showed `122` testers, `2` builds, and |
| 40 | + `120/500` public-link places used; |
| 41 | +- automatic tester notification was enabled; and |
| 42 | +- the anyone-with-the-link URL is |
| 43 | + `https://testflight.apple.com/join/012KzFyD`. |
| 44 | + |
| 45 | +An unauthenticated Safari request resolved that URL to Apple's |
| 46 | +`Fearless Wallet: DeFi Wallet` page and exposed the TestFlight deep link. |
| 47 | +Tester and build counts are a dated snapshot and can change; current App Store |
| 48 | +Connect state must be revalidated for a later production release decision. |
| 49 | + |
| 50 | +## Evidence Boundary |
| 51 | + |
| 52 | +The raw post-upload, publication, and physical rehearsal attestations are in |
| 53 | +ignored `build/` output. Their exact SHA-256 values are copied into the tracked |
| 54 | +manifest, but those ignored files must not be treated as canonical release source. The tracked |
| 55 | +`config/testflight-publication-readiness.json` is the sanitized public contract |
| 56 | +reviewed by the offline audit. |
| 57 | + |
| 58 | +The publication snapshot proves successful upload, external testing, exact |
| 59 | +group assignment, public-link enablement, Apple landing-page resolution, and |
| 60 | +the pre-publication preserved-data archive rehearsal. It does not prove that |
| 61 | +the Apple-delivered TestFlight package has replaced the locally installed |
| 62 | +Developer App on the affected phone. |
| 63 | + |
| 64 | +## Symbolication Follow-up |
| 65 | + |
| 66 | +The main application dSYM is present. Xcode nevertheless warned about |
| 67 | +`MPQRCoreSDK.framework`, `blake2lib.framework`, `libed25519.framework`, and |
| 68 | +`sr25519lib.framework`. |
| 69 | + |
| 70 | +The dSYM warnings cannot alter install, launch, or Core Data migration runtime |
| 71 | +behavior. The three crypto framework warnings correspond to static-stub |
| 72 | +packaging while their useful symbols are linked into the main app image. |
| 73 | +`MPQRCoreSDK.framework` is the remaining runtime framework without a matching |
| 74 | +vendor dSYM, so third-party QR crash frames can have degraded symbolication. |
| 75 | +Obtain the matching vendor dSYM or record an explicit reviewed production |
| 76 | +acceptance before marking symbolication follow-up complete. |
| 77 | + |
| 78 | +## Remaining Device Gate |
| 79 | + |
| 80 | +Update the existing installation through the TestFlight app on the preserved- |
| 81 | +data physical iPhone. Do not uninstall the app or clear its container. Then: |
| 82 | + |
| 83 | +1. verify the installed identity is Apple/TestFlight-distributed build |
| 84 | + `4.2.0 (2026.7.26)`; |
| 85 | +2. preserve the database UUIDs, protected row counts, and semantic digest; |
| 86 | +3. run five terminate-and-cold-launch cycles with the full observation window; |
| 87 | +4. rerun SQLite `quick_check` and compare every protected fingerprint; and |
| 88 | +5. confirm there is no new Fearless crash report. |
| 89 | + |
| 90 | +Until that succeeds, |
| 91 | +`exactAppleDeliveredInstallVerified=false`, |
| 92 | +`preservedDataPostInstallRehearsalVerified=false`, and |
| 93 | +`releaseEnabled=false` remain mandatory. |
| 94 | + |
| 95 | +## Offline Verification |
| 96 | + |
| 97 | +Run: |
| 98 | + |
| 99 | +```bash |
| 100 | +bash ./scripts/test-testflight-publication-readiness-audit.sh |
| 101 | +bash ./scripts/audit-testflight-publication-readiness.sh |
| 102 | +``` |
| 103 | + |
| 104 | +The audit is offline. It validates a dated, content-addressed publication |
| 105 | +snapshot and deliberately does not contact Apple or infer current tester |
| 106 | +capacity from an old observation. |
0 commit comments