Why does iOS show an alert "This app needs to be updated by the developer to work on this version of iOS." for my react native app?

I've just built my React Native app for the first time, and after generating an .ipa and installing it on my device to test, I get an alert with title "MyApp - iOS" Needs To Be Updated and body This app needs to be updated by the developer to work on this version of iOS.

In my ReactNative project I've set iOS target to be 10.0, and the iOS version on the phone is 14.2, so I don't understand why it doesn't work. I've struggled to find any helpful resources from googling around.


The first reason, documented by Apple here, is that your IPA must use the new signature format. If the IPA has been built with MacOS 10.14 or higher, it should be good. To ensure your IPA have the correct signature, use following steps:

  • Rename MyApp.ipa to MyApp.zip and unzip (you'll get a Payload folder which contains MyApp.app)

  • In Terminal, run codesign -dv /path/to/MyApp.app

  • Look in the output the value next to CodeDirectory. If you see v=20500 or v=20400, you're good. If you see a value below 20400, you need to resign your app using following command: codesign -s "Your Codesign Identity" -f --preserve-metadata /path/to/MyApp.app (ensure you do this using MacOS >= 10.14, and re-run codesign -dv /path/to/MyApp.app to ensure you now get v=20400 or v=20500)

Try reinstalling this IPA, it should work. If it doesn't, read the second reason below.

An other possible reason, not documented by Apple, a bit more tricky, is that you might need to re-sign your app including the DER entitlements. To check if you need to do this, do this:

  • In Terminal, run codesign -dvvvvv /path/to/MyApp.app

  • Look in the output under Page size, you should see something like this:

    -7=4ade7be00e0a7b6db853edc4843e7ece1eea646f6f13d1809f78fc50d8db461f //If this line doesn't exist or contains only 000..., you need to include DER entitlements -6=0000000000000000000000000000000000000000000000000000000000000000 -5=1dfa58bd8ac3c4fb42142c1c4d28c436128b3a7460186a44526194fb690112bc -4=0000000000000000000000000000000000000000000000000000000000000000 -3=ef08dbe5a7c355336e1fb571604b683ce1c54536cb59a6155a1d18387fd23f6e -2=5b730fa46ffd405fd88da9606d82eda9af7f460f6049047afc176163326f5a7f

  • As commented in above block, if -7 isn't existent or if it only contains 000..., then that's the reason why the IPA doesn't install properly. To fix this, follow next step

  • Run codesign -s "Signing Identity Name from Keychain" -f --preserve-metadata --generate-entitlement-der /path/to/MyApp.app to resign your app including DER entitlements. Re-run codesign -dvvvvv /path/to/MyApp.app to ensure the -7 value is now correct.


I had made a mistake in my "Excluded Architectures". I had set all Excluded Architectures to "arm64", when I should have only excluded arm64 for the simulator.

These are the updated build settings that work:

enter image description here

This is the code diff:

- EXCLUDED_ARCHS = arm64;
+ "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = arm64;

Hopefully this is helpful for others.