Unable to upload iOS app containing plugins

Lots of these messages:
What am I doing wrong?

ERROR ITMS-90049: “This bundle is invalid. The bundle at path Payload/appname.app/Frameworks/MBS_Main_NSBase_Plugin_20422.framework has an invalid CFBundleIdentifier ‘com.xojo.mbs-main_nsbase_plugin_20422’ There are invalid characters(characters that are not dots, hyphen and alphanumerics) that have been replaced with their code point ‘com.xojo.mbs-main\u005fnsbase\u005fplugin\u005f20422’ CFBundleIdentifier must be present, must contain only alphanumerics, dots, hyphens and must not end with a dot. [see the Core Foundation Keys at https://developer.apple.com/library/content/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html#//apple_ref/doc/uid/TP40009249-102070-TPXREF105]”

update your plugins?

They are only 12 weeks old, but I guess I can give it a try.

I think that bug was fixed in Xojo 2021r1.
Do you use that version?

1 Like

Xojo generates those bundle IDs automatically when building.
Sadly the IDs contain characters, which Apple’s checks complain about.

You can change them yourself. Replace - with x maybe.

Even in future, Apple may improve their checks and complain about other things, we should not do. We will then adapt, but you have to use current Xojo & Plugins.

I think that bug was fixed in Xojo 2021r1.

Starting to feel like I am running in circles.
Trying to keep a working set of tools between Xcode , Xojo , and now the plugins is like a treadmill.
I haven’t managed to actually ship an iOS app for 18 months.

You may just fix the bundle IDs yourself with a self written app.

Maybe it’s a naive question, but I don’t understand why you didn’t just fix the file names of the plugins.
Then they would have worked in Xojo 2020 too?

It’s not his fault. We didn’t get the algorithm right for changing file names to allowed characters.

1 Like

Xojo 2021 installed.
App built.
The plugin name errors are gone.

Now I get:

ITMS-90338: Non-public API usage - The app references non-public selectors in Frameworks/MBS_MacBase_NSColor_Plugin_20485.framework/MBS_MacBase_NSColor_Plugin_20485: blackComponent, blendedColorWithFraction:ofColor:, colorSpaceName, colorWithCalibratedHue:saturation:brightness:alpha:, colorWithCalibratedRed:green:blue:alpha:, colorWithCalibratedWhite:alpha:, colorWithCatalogName:colorName:, colorWithDeviceCyan:magenta:yellow:black:alpha:, colorWithDeviceHue:saturation:brightness:alpha:, colorWithDeviceRed:green:blue:alpha:, colorWithDeviceWhite:alpha:, colorWithSRGBRed:green:blue:alpha:, controlColor, cyanComponent, getCyan:magenta:yellow:black:alpha:, headerTextColor, highlightColor, keyboardFocusIndicatorColor, knobColor, magentaComponent, systemBrownColor, windowBackgroundColor, yellowComponent,

The app references non-public selectors in Frameworks/MBS_Main_NSBase_Plugin_20485.framework/MBS_Main_NSBase_Plugin_20485: autoreleasePoolExists,

The app references non-public selectors in Frameworks/MBS_MacBase_NSAttributedString_Plugin_20485.framework/MBS_MacBase_NSAttributedString_Plugin_20485: RTFDFileWrapperFromRange:documentAttributes:, RTFDFromRange:documentAttributes:, RTFFromRange:documentAttributes:, containsAttachments, docFormatFromRange:documentAttributes:, fixAttachmentAttributeInRange:, fixFontAttributeInRange:, fixParagraphStyleAttributeInRange:, fontAttributesInRange:, initWithDocFormat:documentAttributes:, initWithHTML:baseURL:documentAttributes:, initWithHTML:documentAttributes:, initWithPath:documentAttributes:, initWithRTF:documentAttributes:, initWithRTFD:documentAttributes:, initWithURL:documentAttributes:, rulerAttributesInRange:, setAlignment:range:, setBaseWritingDirection:range:, subscriptRange:, superscriptRange:, unscriptRange:.

If method names in your source code match the private Apple APIs listed above, altering your method names will help prevent this app from being flagged in future submissions. In addition, note that one or more of the above APIs may be located in a static library that was included with your app. If so, they must be removed.

I have absolutely current Xojo and MBS plugins.
What happens next?

You’ll have to talk to Christian about that. It seems to indicate that those plugins access non-public APIs which Apple does not allow.

I’ve emailed.
Today is a holiday (even though Im working)
It would be unreasonable to expect a response until a few days have elapsed.

autoreleasePoolExists is already removed for 21.2pr1.

I may have to look through all those selectors for the NSAttributedString class.

I checked a couple of these APIs, they all link back to the AppKit framework, which (to my knowledge) is a Mac Only library. AFAIK iOS and Catalyst apps use the UIKit framework instead.

I don’t think that there is much you can do, except to make sure that you are not using any of the Mac OS only functions included in these plugins, so that the compiler doesn’t include a Mac only plugin in your iOS application.

Perhaps Christian could mark AppKit functions in his plugin for desktop only?

Trouble is, because the calls are ‘inside’ a plugin, I don’t know which innocuous specific MBS function is calling them.
And everything continues to work in Simulator (it’s a shame that simulator doesn’t do these kind of checks, - if it did I would have known months ago)

I’ve done a trawl through:

I use
DynaPDFMBS (lots of stuff)

GImageMBS
.quantizeColors
.pixelColor
.redQuantum
.greenQuantum etc (Xojo’s rgb Surface doesnt work properly)
NameWithoutExtensionMBS
WKWebViewIOSControlMBS

For the color API rejection, I would expect these.

For the NSAttributedString, that could be used anywhere (technically so could the color API too).

Hopefully when Christian awaken from hith slumber, he;ll be able to assist you further.

I am now curious if this actually works on a real iOS device.

I am now curious if this actually works on a real iOS device.

It does.
I have managed to install it on my iPad pro.

Oh… Great!

We have a new plugin for you.
Please try soon.

3 Likes

Holy Friday is also a holiday in Germany and some French locations (Alsace-Lorraine). Shops are closed and so are nearly everything else.

But Christian is here (as always).

2 Likes