Configure UM Trace iOS signing and deployment
This commit is contained in:
77
doc/iOS_TestFlight.md
Normal file
77
doc/iOS_TestFlight.md
Normal file
@@ -0,0 +1,77 @@
|
||||
# UM Trace TestFlight build
|
||||
|
||||
## Fixed application identity
|
||||
|
||||
- Display name: `UM Trace`
|
||||
- Bundle ID: `com.umagul.trace`
|
||||
- Apple team ID: `W2N8APPQ2C`
|
||||
- App Store Connect SKU: `UM-TRACE-IOS`
|
||||
- Distribution profile: `UM Trace App Store`
|
||||
|
||||
The provisioning profile and all Apple signing files are local-only and covered by
|
||||
`.gitignore`. Never commit a certificate, private key, App Store Connect API key, `.p12`, or
|
||||
provisioning profile.
|
||||
|
||||
## Required local toolchain
|
||||
|
||||
- Xcode 26 at `/Applications/Xcode.app`
|
||||
- .NET SDK 10.0.100 as the build host
|
||||
- Workload set 10.0.100 with `maui-ios` and its .NET 9/iOS 26 compatibility pack
|
||||
- An `Apple Distribution` identity, including its private key, in the login Keychain
|
||||
- The `UM Trace App Store` provisioning profile installed locally
|
||||
|
||||
This repository's local SDK is installed at `~/.dotnet`. Verify it with:
|
||||
|
||||
```sh
|
||||
~/.dotnet/dotnet --info
|
||||
~/.dotnet/dotnet workload list
|
||||
```
|
||||
|
||||
## Create an archive
|
||||
|
||||
Run the release helper from a normal macOS Terminal session. The build number must increase for
|
||||
every upload to App Store Connect:
|
||||
|
||||
```sh
|
||||
cd /Users/brent/ul-platform/app
|
||||
./scripts/publish-testflight.sh 1
|
||||
```
|
||||
|
||||
The app remains on its existing .NET 9 target. The .NET 10 SDK host supplies the supported .NET 9
|
||||
compatibility pack for Xcode 26, avoiding an unrelated Android/Mac Catalyst framework migration.
|
||||
The script deliberately supplies Xcode through `DEVELOPER_DIR`; it does not change the machine's
|
||||
global `xcode-select` setting. It restores only the iOS target, builds with the iOS 26 SDK, selects
|
||||
the installed `UM Trace App Store` profile, and prints the generated `.ipa` path.
|
||||
|
||||
Before uploading, verify that this command lists a valid distribution identity:
|
||||
|
||||
```sh
|
||||
security find-identity -v -p codesigning
|
||||
```
|
||||
|
||||
If the identity is absent, import a `.p12` containing the matching private key or create a new
|
||||
Apple Distribution certificate through Xcode and regenerate the provisioning profile against it.
|
||||
|
||||
## Deploy a development build to an iPhone
|
||||
|
||||
The local development profile is named `UM Trace Development`. It must include the target phone
|
||||
and match an `Apple Development` identity for team `W2N8APPQ2C`. Keep the phone unlocked and
|
||||
connected by USB for the first deployment, trust the Mac when prompted, and enable Developer Mode.
|
||||
|
||||
Save the phone UDID in the gitignored `.ios-device` file, then run from a normal macOS Terminal:
|
||||
|
||||
```sh
|
||||
cd /Users/brent/ul-platform/app
|
||||
./scripts/deploy-ios-device.sh
|
||||
```
|
||||
|
||||
You can instead pass a UDID as the first argument or set `UM_TRACE_DEVICE_UDID`. The helper uses
|
||||
Xcode 26, builds the `Debug` configuration for `ios-arm64`, signs with the development profile,
|
||||
installs the app, and launches it on the selected phone.
|
||||
|
||||
## Background and privacy declarations
|
||||
|
||||
The iOS bundle declares `bluetooth-central` and `location` background modes, Bluetooth and
|
||||
always/when-in-use location explanations, the MAUI `UserDefaults` required-reason API, and exempt
|
||||
standard TLS use. Physical-device testing remains required to prove the SRS eight-hour background
|
||||
BLE/location session; declaring a background mode does not itself guarantee continuous execution.
|
||||
Reference in New Issue
Block a user