Testing In App for Mac App Store

I’m following this tips to test the In App for Mac App Store : Unity - Manual: iOS & Mac App Stores

Build I have two problems! After installing the resulting Package, I can’t run my game! And if I try to send it to Application Load I got this :

ERROR ITMS-90511: "CFBundleIdentifier Collision. The Info.plist CFBundleIdentifier value 'com.unity.purchasing.unitypurchasing' of 'Druids - Battle of Magic.app/Contents/Plugins/unitypurchasing.bundle' is already in use by another application."
ERROR ITMS-90255: "The installer package includes files that are only readable by the root user. This will prevent verification of the application's code signature when your app is run. Ensure that non-root users can read the files in your app."
ERROR ITMS-90266: "Your application bundle must install to '/Applications'."
ERROR ITMS-90296: "App sandbox not enabled. The following executables must include the "com.apple.security.app-sandbox" entitlement with a Boolean value of true in the entitlements property list: [( "com.sevensails.druidsbattleofmagicmac.pkg/Payload/Druids - Battle of Magic.app/Contents/MacOS/Druids - Battle of Magic" )] Refer to App Sandbox page at https://developer.apple.com/devcenter/mac/app-sandbox/ for more information on sandboxing your app.
 (1102)

It seems there are some additional steps missing!

Any advice?

Well… making some changes I was able to fix some errors:

But there are 2 remaining :

[*]ERROR ITMS-90511: "CFBundleIdentifier Collision. The Info.plist CFBundleIdentifier value 'com.unity.purchasing.unitypurchasing' of 'Druids - Battle of Magic.app/Contents/Plugins/unitypurchasing.bundle' is already in use by another application."
[*]ERROR ITMS-90266: "Your application bundle must install to '/Applications'
  • Is it an Unity InAPP bug or Am I missing something?
  • Where my package is not installed to /Applications folder? The install folder of it is the pkg folder itself.

I’m also trying to submit an update to my app (adding IAP) and I ran into the exact same error:
“CFBundleIdentifier Collision. The Info.plist CFBundleIdentifier value ‘com.unity.purchasing.unitypurchasing’ of ‘.app/Contents/Plugins/unitypurchasing.bundle’ is already in use by another application.”

Short of editing Plugins/UnityPurchasing/Bin/unitypurchasing.bundle/Contents/Info.plist and altering the CFBundleIdentifier to something else, what should we be doing to get this to upload to the Store?

1 Like

I have exactly the same problem, still cant figure out what to do here…

Yes you need to change this, info.plist to for example your company name… Thing is unity doing poor job actually properly testing there stuff, bench of coders make changes as needed but no one tests real life scenarios!! Shame because they should just have bought company Prime31…they know this

1 Like

I changed the CFBundleIdentifier of the info.plist of the unitypurchasing.bundle to match the one we have in info.plist of the root .app namespace.
The Application Loader successfully passed the validation and uploaded the file to the store. After a while we took the following email

Dear developer,
We have discovered one or more issues with your recent delivery for “Ποια λέξη;”. To process your delivery, the following issues must be corrected:
Invalid Signature - The main app bundle Ποια λέξη; at path worditout.app has following signing error(s): --prepared:/Volumes/data01/app_data/dstr/mz_4177966872830669251dir/mz_678394295444109399dir/com.lazyland.worditout-el-osx.pkg/Payload/worditout.app/Contents/Frameworks/MonoEmbedRuntime/osx/libmono.0.dylib --validated:/Volumes/data01/app_data/dstr/mz_4177966872830669251dir/mz_678394295444109399dir/com.lazyland.worditout-el-osx.pkg/Payload/worditout.app/Contents/Frameworks/MonoEmbedRuntime/osx/libmono.0.dylib --prepared:/Volumes/data01/app_data/dstr/mz_4177966872830669251dir/mz_678394295444109399dir/com.lazyland.worditout-el-osx.pkg/Payload/worditout.app/Contents/Frameworks/MonoEmbedRuntime/osx/libMonoPosixHelper.dylib --validated:/Volumes/data01/app_data/dstr/mz_4177966872830669251dir/mz_678394295444109399dir/com.lazyland.worditout-el-osx.pkg/Payload/worditout.app/Contents/Frameworks/MonoEmbedRuntime/osx/libMonoPosixHelper.dylib /Volumes/data01/app_data/dstr/mz_4177966872830669251dir/mz_678394295444109399dir/com.lazyland.worditout-el-osx.pkg/Payload/worditout.app: code object is not signed at all In subcomponent: /Volumes/data01/app_data/dstr/mz_4177966872830669251dir/mz_678394295444109399dir/com.lazyland.worditout-el-osx.pkg/Payload/worditout.app/Contents/info.plist . Refer to the Code Signing and Application Sandboxing Guide at Documentation Archive and Technical Note 2206 at Technical Note TN2206: macOS Code Signing In Depth for more information.
Unable to Sign - This package doesn’t meet the current code signing requirements. For more information, see the Code Signing and Application Sandboxing Guide and Technical Note 2206.
Specifically, codesign generated the following error:
com.lazyland.worditout-el-osx.pkg/Payload/worditout.app: code object is not signed at all
In subcomponent: com.lazyland.worditout-el-osx.pkg/Payload/worditout.app/Contents/info.plist

Once these issues have been corrected, you can then redeliver the corrected binary.

Regards,

The App Store team

Any ideas, what we should now do?

Regards,
john.

I changed the CFBundleIdentifier of the info.plist of the unitypurchasing.bundle to match the one we have in info.plist of the root .app namespace.

Im not sure if this should match, com.unity.purchasing.unitypurchasing
You should just change it to com.lazyland.purchasing.unitypurchasing.
This maybe not the reason for your error, it maybe due to code signing as it tells you.
How have you codesigned the package?

1 Like

We had some progress concerning this issue, but we still get a rejection from Apple…

We advise including the ‘com.apple.security.network.client’ entitlement if your app connects to the Internet.We look forward to reviewing your revised binary.Best regards,App Store Review

What we did to bypass the previous Application Loader errors you will ask. You can see it in the “MyBuildPostprocessor.cs” file I am attaching you.

So, we create a .plist + .entitlements on the fly and put the first one inside the .app (inside the Contents root folder) and we use the other one in order to sign EVERYTHING inside the .app (including the unity purchasing.bundle and some .dylibs found inside the Frameworks folder. Yes, we needed to sign EVERYTHING in order to pass phase 1 and 2 of the verification).

So, we are now in a situation where we don’t know what else to do.
We tried to copy and paste the .entitlements file inside the Contents root folder of the .app but we get a rejection email immediately from Apple saying the following:

Dear developer,
We have discovered one or more issues with your recent delivery for “Ποια λέξη;”. To process your delivery, the following issues must be corrected:
Invalid Signature - The main app bundle Ποια λέξη; at path worditout.app has following signing error(s): --prepared:/Volumes/data01/app_data/dstr/mz_5259608710386326893dir/mz_7421766441859889417dir/com.lazyland.worditout-el-osx.pkg/Payload/worditout.app/Contents/Frameworks/MonoEmbedRuntime/osx/libmono.0.dylib --validated:/Volumes/data01/app_data/dstr/mz_5259608710386326893dir/mz_7421766441859889417dir/com.lazyland.worditout-el-osx.pkg/Payload/worditout.app/Contents/Frameworks/MonoEmbedRuntime/osx/libmono.0.dylib --prepared:/Volumes/data01/app_data/dstr/mz_5259608710386326893dir/mz_7421766441859889417dir/com.lazyland.worditout-el-osx.pkg/Payload/worditout.app/Contents/Frameworks/MonoEmbedRuntime/osx/libMonoPosixHelper.dylib --validated:/Volumes/data01/app_data/dstr/mz_5259608710386326893dir/mz_7421766441859889417dir/com.lazyland.worditout-el-osx.pkg/Payload/worditout.app/Contents/Frameworks/MonoEmbedRuntime/osx/libMonoPosixHelper.dylib /Volumes/data01/app_data/dstr/mz_5259608710386326893dir/mz_7421766441859889417dir/com.lazyland.worditout-el-osx.pkg/Payload/worditout.app: code object is not signed at all In subcomponent: /Volumes/data01/app_data/dstr/mz_5259608710386326893dir/mz_7421766441859889417dir/com.lazyland.worditout-el-osx.pkg/Payload/worditout.app/Contents/worditout.entitlements . Refer to the Code Signing and Application Sandboxing Guide at Documentation Archive and Technical Note 2206 at Technical Note TN2206: macOS Code Signing In Depth for more information.
Unable to Sign - This package doesn’t meet the current code signing requirements. For more information, see the Code Signing and Application Sandboxing Guide and Technical Note 2206.
Specifically, codesign generated the following error:

com.lazyland.worditout-el-osx.pkg/Payload/worditout.app: code object is not signed at all
In subcomponent: com.lazyland.worditout-el-osx.pkg/Payload/worditout.app/Contents/worditout.entitlements

So, we can’t just copy and paste the .entitlements file inside the .app (as we thought that may be the cause of the rejection).

Any help would be greatly appreciated.

Kind regards,
John.

2690122–190267–MyCustomBuildProcess.cs (1.66 KB)
2681253–190270–MyBuildPostprocessor.cs (13.7 KB)

I have the same damn problem, why oh why hasn’t this been resolved in over a year, using the latest Unity IAP with latest Unity 2017.1-version! Is this because so few people try to build Unity apps/games to Mac App Store with IAP?

Manipulating the .plist files seems like a solution, but Unity IAP itself wants to update it quite often, and it makes little sense to change .plist files manually/skip updating them.

Does anyone know of a more elegant solution?

I just noticed something I missed earlier in Unity docs:
Unity - Manual: iOS & Mac App Stores
Unity - Manual: Configuring for Apple App Store and Mac App Store
TIP: To sign the bundle, you may first need to remove the Contents.meta file if it exists: your.app/Contents/Plugins/unitypurchasing.bundle/Contents.meta