I pushed an app to my iPhone with Rork Companion on a Friday night. When I tapped it the following Tuesday, it wouldn't open — the icon flashed and closed. Settings said, "This app cannot be opened because the developer could not be verified." Something that had been running fine went silent after just a few days off. When I was a newer indie developer, I lost half a day assuming it was a bug in my own code.
The cause wasn't the code. It was the signing expiry. For anyone stuck at the same wall, here is what is actually happening, how to bring the app back on the spot, and how to stop it from repeating.
The symptom — "it worked yesterday, now it won't open"
There are two common patterns.
The first appears right after you transfer the build: "Untrusted Developer." This shows up once.
The second is the annoying one. After a while — usually around seven days — tapping the icon bounces you back to the home screen, or you see "App is no longer available." The icon is still there, but the inside is dead.
The console message is usually about signing:
The operation couldn't be completed.
(NSCocoaErrorDomain error 4099)
... valid provisioning profile for this executable was not found.You can chase this "bug" through your code forever and never fix it, because the cause lives in a different layer.
When it happens — are you signing with a free account?
This occurs when you run a build signed with a free Apple ID (a Personal Team) rather than the paid Apple Developer Program ($99/year). Being able to test on a real device without a paid account is a genuine strength of Rork Companion, but that signing inherits the free-tier limits directly.
The main free-tier limits are these:
| Item | Free Apple ID (Personal Team) | Paid Apple Developer Program |
|---|---|---|
| Provisioning (signing) validity | About 7 days | 1 year |
| "Trust" step on first launch | Required | Required (varies by method) |
| Apps installed at once | Up to 3 | Effectively unlimited |
| TestFlight / production push | No | Yes |
| Cost | Free | $99/year |
So "stops opening after a few days" is not a defect — it is how free signing works. Once seven days pass, the signature expires and iOS refuses to run the app.
Bring it back on the spot — a two-step fix
1. Clear the first "cannot be verified" prompt
The Untrusted Developer message right after transfer goes away once you trust the developer on the device.
Open Settings → General → VPN & Device Management (on some devices, "Profiles & Device Management"), select the developer app under your Apple ID, and tap "Trust." That clears the first-launch wall.
Once trusted, other apps signed by the same Apple ID usually won't ask again.
2. If it expired after 7 days, re-install to re-sign
Expiry is not fixed by trusting again. The right move is to re-sign, i.e. re-install the build. Transfer it to the device once more from Rork Companion, and it is overwritten with a fresh signature and a new expiry, so it opens again.
If you have the signed build on hand (an .ipa or its embedded.mobileprovision), you can read the expiry with this command. Knowing "how many days are left" before a deadline saves you from scrambling.
# Read the ExpirationDate of embedded.mobileprovision inside an unpacked .app/.ipa
security cms -D -i embedded.mobileprovision \
| plutil -extract ExpirationDate raw -o - -I keep a note of the expiry date for whatever build is on my test device, and re-transfer in the morning when it gets close. You tend to notice an expiry exactly when you're in the biggest hurry.
How to stop it repeating
Even once you know the fix, re-transferring every seven days quietly adds up. To keep my rhythm, I split the work like this.
Day-to-day checks run in the browser's live simulator, not on a device. Most layout and navigation work is perfectly visible there. I save the real device for the parts you can only judge on hardware — camera, haptics, performance — and nothing else. That cuts down how often the expiry gets in the way.
Then, when you reach the stage of handing the app to an outside tester, or trying production push or real in-app purchases, that is the $99 switch point. Free signing can't put a build on TestFlight, so the moment you need someone else to test it, you hit the free-tier ceiling. Don't push your luck here — register a few days before the deadline. Some days the review account takes time to activate.
Telling the layers apart
When you meet "it won't open," check one thing before suspecting your code: when did you last transfer it to the device? If it was more than seven days ago, the cause is almost certainly signing expiry. Re-transfer; if it opens, that's confirmed. Only if that fails should you go looking inside the build.
Just not confusing the layer saves half a day. I'd be glad if the half-day I once burned becomes a few minutes for you.