Agency workflows
iOS App Distribution for Agencies
Build a repeatable agency workflow for Apple team ownership, client-device intake, signing, artifact tracking, delivery, support, and project handoff.
iOS app distribution for an agency is an operating process, not a file-transfer task. A reliable process identifies the client-owned Apple team, controls who may sign, verifies every tester device and artifact, delivers one traceable release, and preserves enough evidence to support installation without exposing Apple secrets.
For a single delivery, a developer can sometimes coordinate those facts manually. Across multiple clients and releases, the agency needs a per-client system of record and a repeatable release gate.
One-off delivery versus repeatable agency operations
A one-off client delivery may be manageable when one app, one Apple team, one build, and a small fixed device set are involved. The developer can verify the IPA, register approved devices if needed, refresh the profile, send release-specific instructions, and close the task.
Repeatable agency operations introduce persistent state:
- several Apple Developer teams with different owners and permissions;
- apps with different bundle identifiers, capabilities, and signing models;
- testers joining and leaving across projects;
- multiple builds that look similar in filenames or chat threads;
- profiles and certificates expiring on different dates; and
- links, instructions, and support evidence that must stay attached to the correct release.
The scalable unit is therefore not “an IPA.” It is one client release record linked to its authorization state, artifact, tester set, and delivery outcome.
1. Establish ownership before accepting a build
For each app, record which legal entity owns the Apple Developer Program membership and which team ID is authoritative. The client’s team should normally own the App ID, distribution certificate, registered devices, and provisioning profiles for the client’s app.
Define named roles:
- Client approver: authorizes the distribution method, testers, and account access.
- Signing custodian: controls the certificate and matching private key.
- Release operator: produces or receives the build and runs the release gate.
- Support owner: handles installation evidence without improvising signing changes.
Apple roles and Certificates, Identifiers & Profiles access are broader than app-only access in important cases. Grant the least access that supports the agreed work, review it periodically, and remove it during offboarding. Do not ask a client to submit an Apple password, P8 key, P12 file, or signing private key through a public form.
2. Classify the build input
The next step depends on what the agency actually controls:
- Source code and archive available: produce a new build with the intended configuration and current signing state. This is the cleanest path when devices or entitlements changed.
- Only an existing IPA available: inspect its bundle identifier, signature, embedded profile, expiry, and authorized devices before promising delivery. An authorized re-sign may be possible, but only with app-owner approval and compatible signing assets and entitlements.
- Unknown artifact provenance: stop. A filename or download link is not enough to establish which source, build configuration, or signing state produced it.
How to Send an IPA to a Client owns the artifact-first delivery decision. The agency model adds the controls needed to repeat that decision safely.
3. Choose TestFlight or known-device Ad Hoc deliberately
TestFlight is often operationally simpler when testers change frequently, feedback continues across many builds, or the agency should not maintain a per-device Ad Hoc list. Apple supports internal and external tester groups, tester invitations, feedback, and builds that remain testable for up to 90 days. External testing may require TestFlight App Review.
Known-device Ad Hoc delivery can fit when:
- the client needs a controlled build on a small, known set of devices;
- the owning team approves each device;
- the team can absorb device registration and profile refresh work; and
- the agency needs a direct registered-device workflow rather than a TestFlight group.
Ad Hoc is not simply “faster TestFlight.” Every target device must be registered and included in the profile embedded in the delivered IPA. Compare the operational trade-offs in TestFlight vs Ad Hoc and review broader TestFlight alternatives before standardizing a method.
4. Use a consent-based client device intake
Collect only what the approved workflow needs:
- client and project reference;
- tester contact or internal reference;
- physical device label and platform;
- UDID obtained through a transparent method;
- the tester’s consent and intake timestamp; and
- the release or testing purpose.
Explain why the identifier is needed, which Apple team will register it, how long the agency retains it, and how support or removal requests are handled. Validate the identifier locally before using it, detect duplicates inside the same team, and keep one device from being silently attached to the wrong client.
Client Device Onboarding owns the tester-facing sequence. For repeated approved intake, Automatic UDID Registration explains the complete automation boundary.
5. Check team context and device capacity before mutation
Do not register a device until the release operator has verified the intended Apple team. The same agency user may have access to several teams, and a successful registration in the wrong one is still an operational failure.
Apple currently limits Apple Developer Program teams to 100 registered devices per product family per membership year. Disabling a device during that year does not restore capacity. Track the constraint before promising large or rotating Ad Hoc cohorts, and use Apple Developer Device Limits for renewal and timing details.
6. Refresh the full authorization chain
For a new Ad Hoc tester, the complete change is:
validated client UDID
→ registered in the correct Apple team
→ selected in the correct Ad Hoc profile
→ refreshed profile synchronized to the signing workflow
→ source rebuilt or existing IPA re-signed with authorization
→ final IPA inspected
Adding the device in the portal does not update a profile or a previously exported IPA. Downloading a refreshed profile also does not modify the old artifact. Keep profile creation under one declared owner—manual portal management, Xcode automatic signing, or a controlled automation path—and verify the final IPA regardless of the method.
7. Keep a per-client release record
Create one immutable release record for every artifact sent to a client. At minimum record:
- Client/project: the commercial and technical owner.
- Bundle ID: the app identity expected in the artifact.
- Apple team: team name and team ID, not account credentials.
- Build/version: marketing version and build number.
- IPA checksum: for example, the SHA-256 of the exact delivered file.
- Signing identity: certificate common name or stable internal reference, not a private key or P12.
- Profile identity and expiry: profile name/UUID and expiration date.
- Authorized devices: approved device references or a controlled linked inventory.
- Delivery URL: the exact release-specific install or download location.
- Release date and status: prepared, approved, delivered, superseded, failed, or retired.
Also record source revision or archive reference when available, who approved the release, and the verification result. Do not store Apple passwords, two-factor codes, P8 or P12 contents, private keys, or unencrypted signing secrets in this record.
The checksum is important when a stale link or duplicate filename creates doubt. If the downloaded IPA’s checksum differs from the release record, stop debugging that file as though it were the approved build.
8. Gate the artifact before delivery
Before publishing a client link, verify:
- the bundle identifier and team are the intended values;
- the code signature verifies;
- the embedded profile is current and authorizes the signing certificate;
- every approved Ad Hoc device is in the embedded profile;
- signed entitlements fit the profile;
- the IPA checksum matches the release record; and
- the installation method matches the build’s distribution type.
Run the check against the final uploaded or hosted artifact, not only the local export. A hosting or copy step can leave an older file at the same URL.
9. Make delivery instructions release-specific
The client message should state:
- the app, version, and build number;
- the supported device and minimum OS assumptions;
- the intended installation path;
- the release-specific link and expiry or retirement policy;
- what the tester should expect to see; and
- exactly what evidence to return if installation fails.
Avoid generic “try again” guidance. Ask for the physical device reference, iOS version, exact alert, time, install path, and whether the same artifact works on another authorized device. Keep that evidence attached to the release record.
For formal acceptance, iOS UAT Distribution Workflow adds test scope, result ownership, and release closure.
10. Prevent stale links and silent replacements
Use immutable release URLs or versioned object paths where possible. If a release must be replaced, create a new record and clearly mark the old one superseded. Do not silently upload a different IPA under the same link while support is comparing outcomes.
Retire expired or revoked links. Keep the client-facing label, IPA checksum, and server object aligned so the agency can prove which artifact a tester received.
11. Track expiry and capacity as planned work
Maintain reminders for:
- profile expiration;
- distribution-certificate expiration or planned rotation;
- Apple Developer membership renewal;
- device-capacity review before large client test cycles; and
- TestFlight build expiration where that method is used.
Do not wait for an installation failure to discover these dates. A certificate or profile renewal produces new signing state; it does not update already delivered Ad Hoc IPAs.
12. Handoff and offboarding
At project close:
- transfer source, archive, release records, and current signing-state documentation through the agreed channel;
- identify active builds and delivery links the client should retain or retire;
- remove agency users and API access no longer required;
- revoke or rotate compromised or agency-controlled secrets under the client’s plan;
- delete local copies according to the retention agreement; and
- document device records, profiles, and certificates that remain in the client’s team.
Do not revoke a shared distribution certificate casually: it may affect other active work owned by the same team. The client approver and signing custodian should own the change.
Where IPAFlow fits
IPAFlow is in Private Beta / In Development. The product direction is to reduce the operational friction around approved IPA handoff, client-device onboarding, provisioning, authorized re-signing, and installation while each customer uses its own Apple Developer account.
IPAFlow does not claim to replace Apple authorization, bypass device limits, or remove the need for accountable signing ownership. If repeated client-device changes and release tracking are the real bottleneck, review the product boundaries and join Early Access.
Related next steps
Sources
- Apple Developer — Distributing Your App For Beta Testing And Releases
- Apple Developer — Testflight Overview
- Apple Developer — Roles
- Apple Developer — Devices Overview
- Apple Developer — Create An Ad Hoc Provisioning Profile
- Apple Developer — Edit Download Or Delete Profiles
- Apple Developer — Certificates Overview