Troubleshooting

How to Fix Unity iOS Code-Signing Errors (Without a Mac)

Updated August 2026 · 9 min read · by the MacFree team
Short answerAlmost every Unity iOS signing failure comes down to one of three things: no provisioning profile assigned to the target, the wrong type of certificate (development instead of distribution), or a mismatch between your bundle ID, certificate and profile. All three can be fixed from Windows — signing runs on a cloud Mac, not your desk.

Code signing is where most Unity iOS builds die. These are the errors developers actually hit, what each one really means, and how to resolve it without owning Apple hardware.

First, understand what iOS signing requires

Apple requires every iOS app to be signed with two matching pieces:

If the certificate, the profile, and your bundle ID don't all agree, the build fails. Most errors below are a variation of that one problem.

Error: "Unity-iPhone requires a provisioning profile"

What it means: The Xcode target has no profile assigned. Unity's generated project leaves signing unset by design.

Fix: Assign an App Store provisioning profile to the Unity-iPhone target. Two important details trip people up:

Error: "requires a provisioning profile with the In-App Purchase feature"

What it means: Something in your project enabled the In-App Purchase capability on the Xcode target, but your profile doesn't include it.

Fix: Either enable In-App Purchase on your App ID in the Apple Developer portal and regenerate the profile, or — if your game has no purchases — remove the package that added it. Unity's com.unity.purchasing package stamps this capability onto the target even when nothing in your code uses it.

Error: ITMS-90035 "Invalid Signature"

What it means: The binary was signed with a development or ad-hoc certificate rather than a distribution certificate.

Fix: Rebuild using an iOS Distribution certificate, paired with an App Store profile that embeds that same certificate. Note that a profile embeds specific certificates — if you create a new certificate, existing profiles won't automatically trust it and must be regenerated.

Error: "No signing certificate found" / missing private key

What it means: The certificate exists in your Apple account, but the machine doing the signing doesn't have the matching private key.

Fix: A certificate is only usable together with the private key that generated its signing request. Export both as a .p12 file and supply that to your build machine. This is why copying a .cer file alone never works.

Error: "Profile is invalid" after changing capabilities

What it means: Provisioning profiles are invalidated when the App ID's capabilities change.

Fix: Regenerate the profile after any capability change. A profile that worked last week can silently become INVALID the moment you toggle a capability on the App ID.

Error: "Redundant Binary Upload" (90189)

What it means: You uploaded a build whose build number was already used for that version.

Fix: Increment CFBundleVersion on every upload. App Store Connect requires each build number to be unique and higher than the previous one for that version — so a fixed value like 1 can never be uploaded twice.

The underlying problem: signing is manual and fragile

Each fix above is achievable, but together they explain why iOS signing has a reputation for eating days. Every certificate, profile, key and capability has to agree, and the feedback loop is slow — you often learn something is wrong twenty minutes into a build.

All of it can be automated. The App Store Connect API can create certificates and profiles programmatically from Windows, and the actual signing runs on a cloud macOS machine. MacFree does exactly this from inside the Unity Editor: it creates the distribution certificate and matching App Store profile for you, assigns the profile to the correct target only, stamps a unique build number on every upload, and ships to TestFlight — so most of the errors on this page simply never occur.

Stop debugging certificates

MacFree creates your signing material and ships to TestFlight from Windows or Linux — no Mac, no manual profiles.

Get MacFree on the Unity Asset Store →

Frequently asked questions

Why does my Unity iOS build fail with "requires a provisioning profile"?

The Xcode target has no provisioning profile assigned. Unity's generated project ships with signing unset, so you must assign an App Store provisioning profile to the Unity-iPhone target — and only that target, since UnityFramework rejects one. The profile must match your bundle identifier exactly.

What causes the ITMS-90035 invalid signature error?

ITMS-90035 means the app was signed with a development or ad-hoc certificate instead of a distribution certificate. Rebuild using an iOS Distribution certificate paired with an App Store provisioning profile that embeds that same certificate.

Can I fix iOS code-signing errors without a Mac?

Yes. Certificates, provisioning profiles and signing can all be created and managed through the App Store Connect API from Windows or Linux, and the signing itself runs on a cloud macOS machine. Tools such as MacFree automate this entirely.