# `MobDev.Release`
[🔗](https://github.com/genericjam/mob_dev/blob/main/lib/mob_dev/release.ex#L1)

Build a signed, App-Store-ready iOS `.ipa` for the current Mob project.

Mirrors `MobDev.NativeBuild`'s physical-device build pipeline but signs
with a distribution identity, embeds an App Store provisioning profile,
drops EPMD + the distribution-related BEAM args (the `MOB_RELEASE` flag),
and packages the `.app` as a `.ipa` instead of installing it.

Output path: `_build/mob_release/<App>.ipa`.

## Required mob.exs keys

    config :mob_dev,
      bundle_id:                "com.example.app",
      ios_team_id:              "ABC123XYZ4",
      # Distribution-only — falls back to auto-detect if absent:
      ios_dist_sign_identity:   "Apple Distribution: Your Name (ABC123XYZ4)",
      ios_dist_profile_uuid:    "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"

Auto-detection looks for `Apple Distribution: ...` certificates in the
keychain and picks the first matching App Store provisioning profile
(one with no `ProvisionedDevices` and no `ProvisionsAllDevices`).

# `build_ipa`

```elixir
@spec build_ipa(keyword()) :: {:ok, String.t()} | {:error, String.t()}
```

Build a signed `.ipa` for App Store / TestFlight distribution.

Returns `{:ok, ipa_path}` or `{:error, reason}`.

---

*Consult [api-reference.md](api-reference.md) for complete listing*
