iPhone "integrity could not be verified": fixing link installs
· 7 min read
A tester taps Install on a link, the icon appears on the home screen, and then iOS says: "This app cannot be installed because its integrity could not be verified." It happens with Diawi links, Firebase, AppForShare and any other over the air install, because the check is done by iOS, not by the service that hosts the file. The good news is that the causes are few and you can check each one in minutes. This guide lists them in the order to check, then covers the other prompts testers see on link installs: Developer Mode, Untrusted Enterprise Developer and "Unable to install".
What the message means
When an iPhone installs an app from a link, it checks the app's signature and the provisioning profile inside it. If the signature is broken, the profile does not allow this device, the profile or certificate is no longer valid, or the build is signed for a store, iOS refuses. The wording varies by iOS version. You may also see "Unable to install. Please try again later." The cause is usually the same.
Link installs work only for builds signed Ad Hoc, Development or Enterprise. Ad Hoc and Development builds install only on devices whose UDID is in the profile. Enterprise builds install on any device in the organisation, but the tester must trust the developer first.
Cause 1: the iPhone is not in the profile
This is the most common cause by far. You registered a new tester's UDID in the Apple Developer portal but did not make a new profile, or you made a new profile but the build was exported with the old one, or the tester has a new phone.
How to check: get the tester's UDID (they can open /udid on the iPhone, it takes a minute and needs no account) and compare it with the UDIDs in the build. Our free IPA inspector lists every provisioned device of an .ipa, with search, in the browser. On a Mac you can also run:
unzip -p App.ipa 'Payload/*.app/embedded.mobileprovision' > app.mobileprovision
security cms -D -i app.mobileprovision | grep -A200 ProvisionedDevices
Fix: register the device, add it to the Ad Hoc profile (Apple makes you regenerate the profile), build again and upload the new build. Installing the old build again will never work. Our guide to iOS ad hoc device registration walks through it, including Apple's limit of 100 devices per device type per membership year.
Cause 2: the profile or certificate has ended
Ad Hoc and Development profiles expire, and a distribution certificate can be revoked, for example when someone on the team made a new one and revoked the old one. A build that installed last month can fail today with the same message.
How to check: the IPA inspector shows the profile's creation and expiry dates with days left, and the certificate names. In the Apple Developer portal, check that the certificate in the profile is still valid. If you lost the certificate, see lost iOS distribution certificate.
Fix: new profile, new build. Apps already on phones also stop opening when an enterprise certificate is revoked, so treat that one as urgent.
Cause 3: the build is signed for the App Store
An archive exported with "App Store Connect" or "TestFlight" distribution cannot be installed from a link. It has no device list, and iOS will only accept it through the App Store or TestFlight.
How to check: the IPA inspector shows the distribution type (Ad Hoc, Development, Enterprise, App Store or none).
Fix: export the same archive again with "Release Testing" (Ad Hoc) or Development in Xcode, or use TestFlight for that build.
Cause 4: the .ipa was changed after signing
Editing Info.plist inside an .ipa, swapping an icon, or re-zipping the Payload folder by hand breaks the signature. So can a build script that modifies the app after the codesign step.
Fix: make every change before signing, then export again. AppForShare, like Diawi, serves your file as uploaded and does not re-sign it.
Not integrity, but close
- iOS too old. If the build needs a newer iOS than the phone has, the install fails. Check the minimum iOS in the build.
- iPad only build on an iPhone. A build made only for iPad will not install on an iPhone.
- Wrong browser. Installs start only from Safari. Links opened inside a chat app's own browser, or in Chrome on iOS, often do nothing. Copy the link into Safari.
- Grey icon that never finishes. Usually the download stalled. Delete the icon, check the connection and tap Install again.
For signing errors on the developer side, see iOS code signing errors in test builds.
Developer Mode required
Since iOS 16, Ad Hoc and Development builds open only when Developer Mode is on. The install works, but the first launch shows a message that Developer Mode is required. The tester turns it on once:
- Open Settings, Privacy and Security, Developer Mode.
- Turn it on and restart when asked.
- After the restart, confirm Turn On and enter the passcode.
The Developer Mode switch only appears after such an app has been installed, or after the iPhone was connected to Xcode, so install first and then look for it. Enterprise, TestFlight and App Store apps do not need it. More detail is in how to enable Developer Mode on iPhone.
Untrusted Enterprise Developer
Enterprise builds install without a UDID, but the first launch shows "Untrusted Enterprise Developer". The tester trusts the developer once: Settings, General, VPN and Device Management, tap the developer under Enterprise App, then Trust. The iPhone needs an internet connection the first time, because iOS checks the certificate with Apple. Enterprise distribution is only for an organisation's own staff under Apple's enterprise program rules, not for outside testers.
What AppForShare install pages now do
Most of these problems can be seen before the tester taps Install, because the facts are in the build. AppForShare install pages, on every plan, now warn when:
- the phone's iOS is older than the build needs,
- the build is for iPad only,
- the profile has expired,
- the build is App Store signed and cannot be installed from a link.
Below the button, an Install help list covers Safari only, Developer Mode on iOS 16 and later for Ad Hoc and Development builds, enterprise trust, the "integrity could not be verified" message, and on Android, unknown apps, Play Protect and "App not installed".
For the device question, a tester who checked their iPhone once at /udid can tap Remember this device. From then on, every AppForShare iOS install page says whether the build includes that iPhone before they tap Install. See checking if an iPhone is in the build.
A two minute checklist
- Is the build Ad Hoc, Development or Enterprise?
- Is the tester's UDID in the profile of this exact build?
- Is the profile still valid, and the certificate not revoked?
- Was the .ipa changed after signing?
- Is the tester in Safari, on a new enough iOS, on the right device type?
- After install: Developer Mode on, or enterprise developer trusted?
Common questions
Is "integrity could not be verified" a Diawi problem?
No. iOS shows it for any link install when the signature or profile does not allow the device. Moving to another service does not fix it; a new build does.
Will reinstalling help?
Only if the download was cut off. If the device is missing from the profile or the profile expired, the same build fails every time.
Can the service re-sign my build to add a device?
AppForShare does not re-sign builds. You add the device, make a new profile and build again. On Pro, AppForShare can register devices on your Apple account and remake the Ad Hoc profile for you; the build is still yours to make.
Do testers need Developer Mode for Enterprise builds?
No. They need to trust the enterprise developer once in VPN and Device Management.


