0

Preface

I want to start this question for various solutions to this problem, in general.

There are lots of questions on this topic. Most are not duplicates. However, they all only apply to particular libraries or defects. So it felt wrong to post my answer to one of these questions.

The specific subcategories of existing questions

Firebase

Flutter

These 2 are probably duplicates:

Xamarin

Xcode 10

These 3 are probably duplicates:

Too Old/Irrelevant

The Question

I uploaded my app to Apple, and it was rejected. The reason Apple gave for the rejection was this error message:

This bundle is invalid. Applications built for more than one architecture require an iOS Deployment Target of 3.0 or later. With error code STATE_ERROR.VALIDATION_ERROR.90081

How do I solve this?

I will post my solution below, but there are probably several other cases that lead to this same result. And these general cases are often not related to the specific cases listed above.

Jeff
  • 3,829
  • 1
  • 31
  • 49

1 Answers1

0

So many internet search results told me that the reason for this error was MinimumOSVersion was missing from the Info.plist of my XC framework, and the way to control that key in Info.plist was thru Xcode build setting IPHONEOS_DEPLOYMENT_TARGET. That information was misleading. XC Frameworks are valid without MinimumOSVersion in Info.plist.

In my case, the root case of the problem was that I had inadvertently created what Apple calls an umbrella framework.

Thru process of elimination we had narrowed down the culprit library to A.xcframework. A.xcframework was a pre-compiled framework that I built. A.xcframework was used in B.xcframework, and B.xcframework was compiled and used in C.app. It was C.app that was rejected by Apple.

To fix things, I did the following.

In Xcode, in B.xcframework, in the B target, General tab, Frameworks and Libraries section, I have A.xcframework listed. Under the Embed column, I changed its value to Do Not Embed.

I rebuilt B.xcframework and C.app, and the upload of that archive was accepted by Apple. No other change was necessary.

I could see the difference in the archive/IPA. In the rejected version, A.framework was listed. In the accepted version, A.framework was not there. This is because the Do Not Embed setting on it in B.xcframework meant that it was statically linked into B.

Jeff
  • 3,829
  • 1
  • 31
  • 49