ITMS-90289 - Using App Groups in Mac App Store - xcode

I have tried to submit my app to the Mac App Store and I am being shown Error ITMS-90289.
I am not sure where I am going wrong. Should I be naming the app group something different?
ERROR ITMS-90289: "Invalid code signing entitlements. Your application bundle's signature contains code signing entitlements that are not supported on Mac OS X. Specifically, value '[group.co.uk.smudgeinc.BLANK]' for key 'com.apple.security.application-groups' in 'co.uk.smudgeinc.BLANK' is not supported. This value should be a string or an array of strings, each starting with your TEAMID followed by a dot '.'."

group.identifier is used for iOS App Group names.
For Mac projects, the App Group should start with your Team ID (found here: https://developer.apple.com/account/#/membership).
When you add an App Group to your project, Xcode fills the name with $(TeamIdentifierPrefix). My project failed validation when I used $(TeamIdentifierPrefix).name, showing a similar message to yours.
Explicitly setting this value to [Team ID].name resolved the issue for me (i.e. Team ID is "ABC123" – use ABC123.name).

Related

How to prevent Xcode from adding malformed entitlements to my dylibs?

I have a Mac app that was accepted to the Mac App Store when I built it using Xcode 13 (exactly the way I do it now, code signing set to automatic, uploading to the App store using the Organizer in Xcode), but now with Xcode 14.2, minutes after submitting it to the Mac App Store, I will receive a refusal mail with lots of "ITMS-90288: Invalid Code Signing Entitlements" and "TMS-90286: Invalid Code Signing Entitlements" errors, two for each embedded dynamic library.
TMS-90288: Invalid Code Signing Entitlements - The entitlements in your app
bundle signature do not match the ones that are contained in the provisioning
profile. According to the provisioning profile, the bundle contains a key value
that is not allowed: '(My team id).' for the key 'com.apple.application-identifier'
in 'Spatterlight.app/Contents/Frameworks/libc64diskimage.dylib'
ITMS-90286: Invalid Code Signing Entitlements - Your application bundle's
signature contains code signing entitlements that are not supported on macOS.
Specifically, value '(My team id).' for key 'com.apple.application-identifier'
in 'Spatterlight.app/Contents/Frameworks/libc64diskimage.dylib' is not supported.
This value should be a string starting with your TEAMID, followed by a dot '.',
followed by the bundle identifier .
The reply at https://developer.apple.com/forums/thread/710598 seems to indicate that dylibs shouldn't have entitlements at all, but apparently Xcode is adding them anyway, making the app unacceptable to the App Store.
I have tried cleaning the build folder, disabling and enabling automatic signing, signing manually when uploading the app (providing profiles from lists in Xcode rather than doing it automatically). The result is the same.
Note that there are plenty of questions here that may look like duplicates of this (usually with titles like "ERROR ITMS-XXXXX: 'Invalid Code Signing Entitlements'", but none of them seem to be about this problem, which makes me think I am doing something uniquely wrong.
To prevent Xcode from adding malformed entitlements to your dylibs, you can do the following steps:
Create a custom entitlements file: In Xcode, go to File > New > File and select "Entitlements" from the list of file templates. This will create a new .entitlements file in your project.
Specify the custom entitlements file: In your target's Build Settings, find the "Code Signing Entitlements" setting and set it to the name of your custom entitlements file.
Review and edit the entitlements file: Open the custom entitlements file and review the contents. Ensure that only the necessary entitlements are included, and that they are correctly formatted.
Build and sign your dylib: Build your dylib and sign it with your custom entitlements file. You can verify that the entitlements were correctly added by running the codesign command in the Terminal and examining the output.

How to specify an LSMinimumSystemVersion?

How can I change "an LSMinimumSystemVersion value"?
I received this e-mail from Apple:
Dear Developer,
We identified one or more issues with a recent delivery for your app,
"MYAPPNAME" 1.0. Your delivery was successful, but you may wish to
correct the following issues in your next delivery:
ITMS-90899: Apple silicon Mac support issue - The app is not
compatible with the provided minimum macOS version of 12.4. It can run
on macOS 13.0 or later. Please specify an LSMinimumSystemVersion value
of 13.0 or later in a new build, or select a compatible version in App
Store Connect. For details, visit:
https://help.apple.com/app-store-connect/#/dev2de8e790b
After you’ve corrected the issues, you can upload a new binary to App
Store Connect.
Best regards,
The App Store Team
Ran in to the same error a couple of days ago. In Xcode, added the LSMinimumSystemVersion value to the project's info.plist:
Select info.plist in Project Navigator
Right-click on "Information Property List" at the top and select "Add Row"
Select "Minimum System Version" from the "Bundle identifier" droplist.
Set the type to "String".
I put "13.0.0" (without the quotes) for the value.
This adds the following <key> and <string> to your Info.plist, just under the "<dict>" key, right under the "<plist>" key:
<plist version="1.0">
<dict>
<key>LSMinimumSystemVersion</key>
<string>13.0.0</string>
Recreated the archive and redeployed the app. App Store Connect no longer complains about the missing value.
I got the same issue and tried the accepted answer. Setting the LSMinimumSystemVersion to 13.0.0 gave me another error when trying to publish the app:
Invalid LSMinimumSystemVersion - The LSMinimumSystemVersion Info.plist
key has the value “13.0.0”. This string indicates the minimum macOS
version required for this app to run. The value must be between 11.0
and 12.3 and be formatted as “x.x.x.”
I solved it by adding
<key>LSMinimumSystemVersion</key>
<string>12.3.0</string>
to the Info.plist file and also setting the iOS Deployment Target to 12.3 in the project settings. I suspect that to be the main issue since the versions below the target one are probably unsupported by the build. The minimum versions are probably chosen by Apple and might get higher in the future so it's necessary to build always for the officially required range.
There are two ways to address this support issue:
1- Turn off "iPhone and iPad Apps on Apple Silicon Macs".
You can do this per-app, or across all apps in your Apple Connect account. The link in the email points to the documentation.
(NOTE: This is apparently on by default, in new App Store Connect accounts.)
2- If this value is un-set, set it in Info.plist.
The lack of the value seems to trigger this warning, setting it makes it go away for the next build.
NOTE: I think a lot of the text of that email template is possibly incorrect/wrong/inaccurate.
1- It says I had set the value to "12.6", but I hadn't. The template is picking up some default value?
2- It says the value can't be below "13.0". That didn't make much sense to me (my iOS target is set to 15.6 on both project and app-target).
If my target was "16.x", I'd understand why "13.0" would be required. At the same time, after a casual search, I don't see any documented dependency.
3- TestFlight obeys the setting, but "12.6" works.
When I set to 13.0, the build appears in macOS TestFlight, but is disabled, as you would expect.
When I set it to 12.6, the build appears in macOS TestFlight, and is available. Loading and running that build appear to be fine.
NOTE: I'm using the same laptop I develop on, but I did not try running out of Xcode, because this project actually is iPhone only (newly created in Xcode 14.0, and the default Mac destination was removed early on).
(That also might be something that confuses App Connect?)

App Store - Bundle Display Name too long?

Getting a bundle display name length too long when trying the validate the archive to upload to the App Store.
Where is the Bundle Display Name stored? Unless I am confused I think my display name is only 8 characters long???
Here is the info.plist entry.
You are showing the wrong Info.plist. There are two types: the app has Bundle OS Type Code APPL and Bundle Creator OS Type Code ????, while a framework has Bundle OS Type Code FMWK and Bundle Creator OS Type Code ????.
So apparently what you've found is some framework Info.plist. Moreover, have now lamed it by changing the Bundle Creator OS Type Code to a wrong value.
You need to fix this one so it work again, and then go find the real one, the one belonging to the app. My guess is that you have lamed that one in some way too.

Xcode 4.4.1 code signing issue

I have this code signing issue that came up only recently when I tried to submit my Mac application (not iOS) with Xcode 4.4.1
When I tried to validate my app's archive, validation fails with these two errors:
Invalid Code Signing Entitlements. The entitlements in your app bundle signature do not match the ones that are contained in the provisioning profile. According to the provisioning profile, the bundle contains a key value that is not allowed: 'com.(mycompany).(myapp)' for the key 'com.apple.application-identifier' in 'MyAppBundle.app/Contents/MacOS/MyAppExecutable'
Invalid code signing entitlements. Your application's bundle signature contains code signing entitlements that are not supported on Mac OS X. Specifically, value 'com.(mycompany).(myapp)' for key 'com.apple.application-identifier' in 'MyAppBundle.app/Contents/MacOS/MyAppExecutable' is not supported. This value should be a string starting with your TEAMID, followed by a dot '.' followed by the bundle identifier.
This bundle is invalid. Apple is not currently accepting applications built with this version of the OS.
I've tried the following but none of them worked:
re-downloading and re-generating code signing certificates.
Specifying my team ID in the code signing parameters:
-i "(TEAMID).com.(mycompany).(myapp)" --entitlements "(MyAppEntitlementFile).entitlements"
Anybody can help? Thanks in advance.
I've fixed this by editing my entitlements file using Xcode's property list editor (not the fancy-looking GUI in the target's Summary tab) and remove the key named com.apple.application-identifier along with its value.
I'm not sure how that key-value pair got there in the first place because I'm quite confident that I didn't put it in there myself. This project was originally coded for Snow Leopard without sandboxing and went through a number of Xcode versions. Perhaps an old version of Xcode put it there and it conflicted with the newer one.

iPhone app Rejection

I recently submitted my app and Apple rejected it because I used: 'AppName iPhone Edition'
Which seemed to be correct from reading their terms and conditions, but they told me I cannot use iPhone in the name displayed on the device.
So, the question is, when I change the Product Name in the build settings, it asked me for a new provisioning profile. Do I need to create a new provisioning profile, or can I just change the app name that appears on the device?
You can change your app name and not need a new provisioning profile as long as you keep the same bundle ID.
By default,the Info.plist has this:
<key>CFBundleDisplayName</key>
<string>${PRODUCT_NAME}</string>
Just change it to whatever you want and keep your product name unmodified.
You also need to change it yin iTunes Connect.
Provisioning profiles are tied to the app identifier by default (com.yourCompany.yourAppProductName). So when you change the product name (in the build settings) the identifier changes also. You can manually specify an identifier code in the summary to avoid problems like this.
Also be sure that you are changing the "Bundle Display Name" in the info tab. This name can be anything and does not require changing the product name or identifier.

Resources