Mac App Store Toolset - OS X packaging made easy

Hello,

We are jemast software, a small indie software development studio. We have submitted an editor extension to the Asset Store that aims at simplifying Mac App Store publishing:

Mac App Store Toolset

Making your game ready for Mac App Store publishing can be a tedious process, especially since restrictions on code signing and sandboxing became effective. The intent of this tool is to have a down-to-the-point UI integrated in Unity to set up automatic post-processing of your builds so that it automatically gets code signing, entitlements, sandboxing and packaging.

Bullet Points:
→ One click code signing, entitlements, sandboxing and packaging
→ Packages are ready for Mac App Store: build, submit, you’re done
→ Presets: easily switch between debug/release configurations
→ Recursive code signing: frameworks and plugins get signed so you don’t get any warning/error
→ Localization support for App Store description languages
→ Developer ID support with installer package customization
→ Does not override your existing post-process script: appends at the end

Requirements:

  • Works with Unity 4.x Standard (Free) and Pro, and Unity 5.x
  • Unity 4.0+/5.0+
  • OS X 10.7+ and latest Xcode
  • Publishing to the Mac App Store requires paid subscription to Apple’s Mac Developer Program and a Macintosh computer

Price: $10

Available on the Asset Store: Get it here
Available on our FastSpring Store: Get it here

Learn More:
Product Page | Documentation | Reference Sheet | Frequently Asked Questions

Screenshot: (some fields have been blurred for security concerns)

Video Tutorial:

By the way, we also have a free open-source standalone tool with more or less the same functionnality that is less convenient and using an older post-process system. We do plan on updating to the new post-process system as soon as we get enough time. So, if you don’t have a CC or PayPal account or somehow can’t afford this asset, check out our Unity Entitlements Tool: http://jemast.com/unity/unity-entitlements-tool/

Feel free to give us feedback on this!

Thanks,

jemast software

Hello,

at first, I would like to say that this tool looks very good. Unfortunately, I have encountered a problem. In section where I should set the code signing I only see message „Could not find any valid developement or relese profile.“. It’s weird, because when I use your second tool „Unity Entitlements Tool“ provisioning profiles with certificates are found normally („Unity Entitlements Tool“ has a problem with creating packages, but that is different problem). I use the latest version of the Unity (4.1.5) and the latest version of the OS X (10.8.4).

Thanks for advance
Petr

Hello Petr,

This is unexpected because it uses the exact same mechanism to find profiles and certificates. Though, because we wanted to retain compatibility with Unity Standard (Free), we had to use a trick to call native code and in the end it has to write the profiles/certificates list in a temporary XML file. The file is located in your root project directory (before Assets) under the Temp folder (exists only when Unity is running). It may have issues writing to this file, but I realize now that the file might not be necessary and I can bypass it using another mean.

Could you please contact me by e-mail so we can sort this out? My personal work e-mail is jeremie dot diprizio (a.t) jemast dot com

By the way I’m also very interested in the issues you are getting with Unity Entitlements Tool as Mac App Store Toolset uses the same mechanisms.

Thanks for your feedback,

Jérémie.

PS: By the way, we are working on more documentation and a video tutorial for people less familiar with code signing al.

Just a quick update to anyone having the “Could not find any valid development or release profile” issue with our plugin.

We’ve submitted a fix that should get approved in the next few days. In fact, it should have been approved yesterday but they pulled an “Apple” on us and rejected the update because we messed on the legal text in README and headings… We had to resubmit :slight_smile:

If you want to get the fix early, contact me directly at: jeremie dot diprizio (a.t) jemast dot com. I’ll send you the update so you don’t have to wait for the Asset Store approval.

By the way we’re also listening to feature request. We’ll be implementing a feature to pick which plugins you want included in the build as some editor-only dlls needlessly get included in builds (a feature for Pro users).

Does this work for Developer ID Applications? Non-mac store stand-alone builds.

It would be great if it did.

Indeed, it also works with Developer ID. Simply pick the Developer ID Application certificate for codesigning and Developer ID Installer certificate if you plan to package your application.

Using Developer ID, you can also bypass entitlements and sandboxing to avoid unecessary system restrictions on your app/game.

Though if you don’t use packaging: right after post-processing, Unity seems to be touching the bundle by adding/replacing the icon (I’m not entirely sure but I noticed something unusual during my tests). I didn’t pay too much attention to it as I was mostly focused on Mac App Store publishing and the package is created using the untouched bundle which means it’s exactly as you want. I’ll look into it again as this can eventually cause issues with Developer ID signing and will let you know my findings.

So I did look it up and as previously mentioned, it seems that Unity tampers with the bundle right after post-processing by copying (again?) the icon file if you’ve set an icon in the project “Player Settings”. Here’s the output I’m getting when trying to verify a signature on a bundle:

/Users/Shared/Unity/4-0_AngryBots/Build/OS X/AngryBots.app: a sealed resource is missing or invalid
In architecture: i386
resource added: /Users/Shared/Unity/4-0_AngryBots/Build/OS X/AngryBots.app/Contents/Resources/UnityPlayer.icns

I’ll try to think of some workaround: either exclude the icon from code signing or give the ability to execute the commands on the bundle outside of post-processing. I’ll let you know what I come up with. In the meantime, you can remove the icon from your project “Player Settings” and use the “Custom Icon” field in Mac App Store Toolset (provide your own .icns file).

By the way, our 1.2 update is now out and should fix any issue people might have with fetching the profiles/certificates list.

Is there a reason why you would want to change the icon in the “Custom Icon” field in Mac App Store Toolset rather than just using the “Player Settings” icon?

Why do you even need a “Custom Icon” field? Is it because of sandboxing?

Hey sorry for the late reply, I was unavailable for a few days.

The reason you’d want to use a custom icon is:

  1. You’re using an old version of Unity (3.5 branch) and it’s not supporting retina icons therefore you have to provide a custom icns file with the embedded retina icon. I’m not sure at what point retina icons are supported and if they are at all as I don’t use Unity’s generated icon for the second reason below.

  2. You want to have a finer control of the icon look at each resolution (low resolutions can look terrible when auto-resized by Unity). EDIT: Turns out this is also a limitation of older versions of Unity which offered only a limited subset of resolutions. So custom icon is useful for 3.5 branch.

I’m still looking at the way to handle Developer ID properly regarding this icon matter and I’ll let you know with the solution I come up with.

EDIT2: Okay I’ve submitted an update which fixes some critical issues with Helper process not running and icon being invalid when not using Custom Icon (which is optional). It should be out in a few days but if anyone is experiencing issues I can send the update directly.

Regarding Developer ID: the update allows to keep an untouched copy of the app bundle through an a new setting. It allows you to retain the fully signed bundle before Unity add its icon. We also provide a feature to sign arbitrary app bundles using a preset (it executes the script on any .app bundle). Both features makes the tool perfectly suitable for Developer ID signing.

Sounds good.

For Developer ID apps, it would be nice if it were possible to include a EULA text.

Sure. I don’t know what’s the standard procedure for adding EULAs to apps/games (outside of Mac App Store, I know about the iTunes Connect part) but I’ll look into it and it’ll make it into next version that should be submitted sometime next week.

I’m also looking at implementing plugins exclusion which is useful if you have editor extensions with native plugins (e.g. Cruncher) that get copied over to your bundle while it is in fact useless for runtime execution and takes up valuable disk space.

EDIT: By the way, the update mentionned in a post above is now live on the Asset Store.

Hello everyone,

First a quick update to let our users know that new OS X build targets are not supported at the moment but we’ve submitted a quick fix for this (though it’s a bit of a hack because Unity returns “Unsupported build target!” when building for x64 or Intel universal so we added extra check for security). Should be out in the next few days but as always you can ask directly.

Then specifically @TheOtherMonarch. I looked into it and just to be clear, you want the package installer to display custom welcome screen and license EULA screens? I should be able to come up with a solution for this in a second update coming right along.

Cheers!

Jérémie

@jemast

Yes exactly that. A screen where you need to click I have read this EULA and Accept or Reject buttons before it will install.

@TheOtherMonarch

A quick message to let you know I have made good progress on this feature and it will be ready for submit in a day or two. Sorry it took longer than expected, I had unrelated work plus Apple’s documentation being down did not help.

It will allow customization of welcome, readme, license (EULA) and conclusion screens of the installer. Simply provide a txt, rtf or html file and the tool will do the rest.

I’ll keep you updated as soon as this is live on the Asset Store.

EDIT: This has now been submitted to the Asset Store and will go up in the next few days. Documentation will be up tomorrow though it’s relatively easy: you have to point to a license file (txt, rtf or html) and make sure it’s located in a separate directory in your Assets only dedicated to package resources that you’ll have to pass to the plugin. The plugin will do the rest and generate a package almost identitical to a non-customized build except for the various screens you can customize.

Sounds great

Thanks

@TheOtherMonarch

This update is now live on the Asset Store.

Again, to use it, create a folder in your assets dedicated to package customization resources. Copy your files (e.g. License.rtf) in there. Enable package customization in your Mac App Store Toolset preset. Drag drop your license file to the license field. Update build pipeline. Build and you should be done. You can also localize using folder structure like en.lproj, fr.lproj, ja.lproj inside your package customization assets folder.

If you have any issues or need more package customization features implemented let me know!

Somehow the tool doesn’t generate a .pkg for me. Only a .app :frowning:

Let’s start with the obvious. Could you make sure that:

1/ You’re using a preset where packaging is enabled (when you close/reopen the UI it returns to first preset though that doesn’t mean it’s the one currently used in the build pipeline). If not enable packaging.
2/ You have updated the build pipeline (“Update Build Pipeline” button).
3/ Build pipeline status is showing Packaging as enabled (green checkmark).
4/ Everything is set up correctly (certificates, …). Look at the plugin reference sheet (link in opening message).

If all of that seems valid, could you take a look at Editor log. To see Editor log bring up Unity’s “Console” panel (generaly next to “Project” panel) and click the small drop-down button on the far right of the panel (above Log, Warning Error counts) and click “Open editor log”. Scroll to the bottom and look for a line about executing the postprocess script (it’s a few line above and I can’t look up what it says exactly at the moment; if it’s not there, close the log, rebuild your game and reopen the log). Does it mention any error on that line or right below?

Everything in the toolset is setup and green.

Updating Assets/Editor/entitlements.entitlements - GUID: 775d73a2e623c4c1db385b592ae286be…
done. [Time: 23.670292 ms]
Updating Assets/Editor/PostprocessBuildPlayer - GUID: ef1a4b4d4a0724087b6cb95ba7add2cb…
done. [Time: 3.428152 ms]
Updating Assets/Editor/JEntitlementsPluginSettings.xml - GUID: 208f8ad24675d45119e009814a80da7d…
done. [Time: 3.545238 ms]

No errors.

Hello

Thanks for your plugin, but it won’t export a .pkg.

It only exports an .app

Everything seems to work fine except that little detail.

Thanks