# Apple App Store Release Runbook This runbook covers the public iOS App Store release path for the Truck Wash Capacitor app. ## Account And App Record - Use the Truck Wash ApS Apple Developer account. The Account Holder must accept the latest Apple agreements before builds can be uploaded. - Create or verify the App Store Connect app record: - Platform: iOS - Name: Truck Wash Kundeportal - Bundle ID: `io.truckwash.app` - SKU: `truckwash-ios` - Primary language: Danish - Category: Business - Price: Free - Initial availability: Denmark - Keep the GitHub environment `mobile-store-production` configured with the iOS signing, App Store Connect, Android signing, and Google Play upload secrets used by the mobile workflow. ## Build And Upload 1. Merge the release commit to `master`. 2. Confirm `Automated Tests` and `Frontend Release` are green for that commit. 3. Create a release tag such as `mobile-v1.0.0`. 4. The `Mobile Store Artifacts` workflow builds Android and iOS artifacts from the tested commit. By default it uploads Android to the Google Play production track and uploads the iOS IPA to App Store Connect. 5. For a manual upload, dispatch `Mobile Store Artifacts` with `version_name` and `version_code`. Leave `upload_ios_to_app_store` enabled for the iOS upload, or disable it to produce only the signed GitHub artifact. The same workflow also runs automatically after a successful `Automated Tests` run on current `master`. It skips stale workflow-run commits if `master` has advanced before the mobile jobs start. The iOS workflow expects these environment secrets: - `IOS_CERTIFICATE_BASE64` - `IOS_CERTIFICATE_PASSWORD` - `IOS_PROVISION_PROFILE_BASE64` - `IOS_KEYCHAIN_PASSWORD` - `APPLE_TEAM_ID` - `APP_STORE_CONNECT_API_KEY_ID` - `APP_STORE_CONNECT_ISSUER_ID` - `APP_STORE_CONNECT_API_PRIVATE_KEY_BASE64` The workflow installs the signing certificate and provisioning profile in a temporary keychain on the `macos-15` runner, archives the Capacitor Xcode project, exports an App Store IPA, validates it with `xcrun altool`, uploads it with the App Store Connect API key, and removes temporary signing assets in the cleanup step. ## Product Page Defaults - Support URL: `https://truckwash.io/support` - Privacy URL: `https://truckwash.io/privacy-policy` - Subtitle: `Book og start truckvask` - Promotional text: `Administrer vask, koeretoejer, ordrer og fakturaer fra mobilen.` - Keywords: `truck wash,lastbilvask,vask,booking,kundeportal` - Expected age rating: 4+, subject to the App Store Connect questionnaire. Use real iOS simulator or device screenshots. Provide at least: - iPhone 6.9-inch portrait screenshots - iPad 13-inch portrait screenshots Recommended screenshot scenes: dashboard, booking flow, self-service wash start, vehicles/orders, and invoices/payment history. Do not include real customer data, private tokens, or placeholder copy. ## Privacy And Review Notes App Store Connect privacy labels must match the actual app and backend behavior. Expected minimum disclosures include account/contact data, identifiers such as customer number, vehicle/license plate data, order and invoice history, payment state, approximate/precise location when used, and photos or attachments when users upload them. Tracking should remain false unless analytics/ad tracking is introduced. Review notes must include: - A demo account and password. - OTP/2FA/passkey fallback instructions when enabled for the account. - A clear statement that Stripe/card payments are for physical truck-wash services consumed outside the app, so Apple in-app purchase is not used. - Any hardware-dependent functionality that reviewers cannot reproduce, with a short demo video if needed. - Confirmation that the backend environment is online for the whole review window. ## TestFlight And Release 1. Wait for App Store Connect processing to finish. 2. Distribute the processed build to internal TestFlight testers. 3. Run clean-device QA on iPhone and iPad. 4. Fix issues using the same marketing version and an incremented build number. 5. Submit for App Review with manual release after approval. 6. After approval, release to Denmark first and monitor crashes, support mail, and App Store Connect feedback before expanding availability.