# Ship an LLM on Android and iOS with LiteRT-LM: Lesson 05. Pass the iOS release checklist

Lesson id: `litert-lm-ship-android-ios/05-ios-release-checklist`
Human lesson: https://edgefde.dev/courses/litert-lm-ship-android-ios/05-ios-release-checklist.html

## Goal

Run a repeatable iOS release checklist for a LiteRT-LM app.

## Prerequisites

- An Xcode archive of the app
- Parity report from lesson 04

## Inputs

- `MyApp.xcarchive`
- Device console logs from a GPU run

## Outputs and artifacts

- Symbol scan output
- Updated `PrivacyInfo.xcprivacy`
- Duplicate class count
- Signed-off checklist

## Steps

1. Archive the app. Run the `find` and `nm -u` scan from the lesson on every framework and dylib.
2. For each required-reason symbol in a binary with no manifest, add the category and a reason code that is true for your app to the app's `PrivacyInfo.xcprivacy`.
3. Run the GPU path on a device and count `is implemented in both` lines in the console.
4. Load the model in the full app after using other heavy features. Treat empty output as an error.
5. Use `.float32` or CPU for prompts above 2048 tokens unless the parity report shows float16 passes.
6. Tick every line of the release checklist and store it with the build.

## Constraints

- Do not copy reason codes without checking they are true for your app.
- Swift for app code.

## Acceptance checks

- Every required-reason symbol found is covered by a manifest.
- Checklist is complete for the build number.

## Key concepts

- #3863: LiteRT-LM iOS binaries used required-reason APIs with no privacy manifest. A fix merged after v0.18.0.
- #3864: two Metal dylibs define the same 35 Objective-C classes.
- #2545: a large model section can fail to map in a big app, and the engine can still say ready.
- #3913: long prompts on the iOS GPU need float32 or CPU unless your tests say otherwise.

## Takeaways

- Scan your archive for manifests and required-reason symbols before every release.
- Test the model inside the full app, not only in a sample.
- Keep one written checklist and run it for every LiteRT-LM update.
