3.1 KiB
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-iosand its .NET 9/iOS 26 compatibility pack - An
Apple Distributionidentity, including its private key, in the login Keychain - The
UM Trace App Storeprovisioning profile installed locally
This repository's local SDK is installed at ~/.dotnet. Verify it with:
~/.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:
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:
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:
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.