Search Unity

Mac App Store Toolset - OS X packaging made easy

Discussion in 'Assets and Asset Store' started by jemast, Jun 12, 2013.

  1. jemast

    jemast

    Joined:
    Dec 7, 2011
    Posts:
    141
    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


    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
     
    Last edited: Mar 8, 2015
  2. petr cada

    petr cada

    Joined:
    Jun 24, 2013
    Posts:
    1
    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
     
  3. jemast

    jemast

    Joined:
    Dec 7, 2011
    Posts:
    141
    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.
     
  4. jemast

    jemast

    Joined:
    Dec 7, 2011
    Posts:
    141
    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 :)

    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).
     
  5. TheOtherMonarch

    TheOtherMonarch

    Joined:
    Jul 28, 2012
    Posts:
    866
    Does this work for Developer ID Applications? Non-mac store stand-alone builds.

    It would be great if it did.
     
  6. jemast

    jemast

    Joined:
    Dec 7, 2011
    Posts:
    141
    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.
     
  7. jemast

    jemast

    Joined:
    Dec 7, 2011
    Posts:
    141
    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:

    Code (csharp):
    1. /Users/Shared/Unity/4-0_AngryBots/Build/OS X/AngryBots.app: a sealed resource is missing or invalid
    2. In architecture: i386
    3. 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.
     
  8. TheOtherMonarch

    TheOtherMonarch

    Joined:
    Jul 28, 2012
    Posts:
    866
    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?
     
  9. jemast

    jemast

    Joined:
    Dec 7, 2011
    Posts:
    141
    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.
     
    Last edited: Jul 11, 2013
  10. TheOtherMonarch

    TheOtherMonarch

    Joined:
    Jul 28, 2012
    Posts:
    866
    Sounds good.

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

    jemast

    Joined:
    Dec 7, 2011
    Posts:
    141
    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.
     
  12. jemast

    jemast

    Joined:
    Dec 7, 2011
    Posts:
    141
    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
     
  13. TheOtherMonarch

    TheOtherMonarch

    Joined:
    Jul 28, 2012
    Posts:
    866
    @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.
     
    Last edited: Jul 22, 2013
  14. jemast

    jemast

    Joined:
    Dec 7, 2011
    Posts:
    141
    @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.
     
    Last edited: Jul 29, 2013
  15. TheOtherMonarch

    TheOtherMonarch

    Joined:
    Jul 28, 2012
    Posts:
    866
    Sounds great


    Thanks
     
  16. jemast

    jemast

    Joined:
    Dec 7, 2011
    Posts:
    141
    @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!
     
  17. Eric-Diepeveen

    Eric-Diepeveen

    Joined:
    Aug 19, 2013
    Posts:
    11
    Somehow the tool doesn't generate a .pkg for me. Only a .app :(
     
  18. jemast

    jemast

    Joined:
    Dec 7, 2011
    Posts:
    141
    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?
     
  19. Eric-Diepeveen

    Eric-Diepeveen

    Joined:
    Aug 19, 2013
    Posts:
    11
    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.
     
  20. gegagome

    gegagome

    Joined:
    Oct 11, 2012
    Posts:
    392
    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
     
  21. jemast

    jemast

    Joined:
    Dec 7, 2011
    Posts:
    141
    In which case nothing seems to work fine as Unity generates the .app package. Sorry you're getting trouble, we'll find a solution.

    Could you go to the plugin Settings panel and enable the "Verbose Mode" option, then "Update build pipeline" again and rebuild your game. In the folder where the .app is generated, there should be a log file named *YourAppName*.log. Could you either paste the contents here or send them to me via e-mail: jeremie [dot] diprizio [at] jemast [dot] com.
     
  22. gegagome

    gegagome

    Joined:
    Oct 11, 2012
    Posts:
    392
    Thanks for pointing the verbose mode option.

    I discovered that the problem was the "appropriate signing identity" your plugin looks for.

    THE PROBLEM was that in the "Enable packaging" option your plugin was looking for:
    "3rd Party Mac Developer Application: <Developer Name>"
    or
    "Mac Developer: <Developer Name>"

    WHEN in fact it needed to be set to:
    "3rd Party Mac Developer Installer: <Developer Name>"

    After I FIXED that your plugin processed the PKG and it did everything it is supposed to using Mavericks 10.9, Xcode 5.0.1 and Application Loader 2.9.

    App is now waiting for review so I am happy camper!



    THANKS!
     
    Last edited: Nov 1, 2013
  23. jemast

    jemast

    Joined:
    Dec 7, 2011
    Posts:
    141
    For reference and users seeing this post, I may add that the issue pointed out by gegagome is that at the moment we don't distinguish certificates functionalities and simply present you with all your certificates related to Mac development and production in packaging.

    While a simple method to check for installer certificates would be to look for the "installer" word in the certificate name, Apple can change that at any time and it's hard to monitor on our end. Though the certificate may give away information about its usage so we'll look into it to filter out non-installer certificates.

    Thanks for the feedback and god speed on your release!
     
  24. Avinash-pdy

    Avinash-pdy

    Joined:
    Mar 4, 2013
    Posts:
    28
    Hi,

    I just bought the plugin (1.7.5) but its not working with Unity4.3. I am getting following error

    Your PostprocessBuildPlayer is not using Perl scripting language. Mac App Store Toolset only supports Perl at the moment.

    I think Unity4.3 doesn't support perl anymore. Do you have a fix for this or a workout so that i can publish my game.
     
  25. jemast

    jemast

    Joined:
    Dec 7, 2011
    Posts:
    141
    Hello Avinash,

    Thanks for reaching us. I've got back to you via e-mail. The issue is that you already have a PostprocessBuildPlayer file that is not using Perl scripting (could be Python or anything).

    I need to stress that we only support Perl scripting at the moment since we have had no demand for other languages but at some point we'll add support for more languages per request. We'll definitely provide a fix for your issue.

    By the way Unity 4.3 still supports Perl.


    Regards,

    Jérémie.
     
  26. Avinash-pdy

    Avinash-pdy

    Joined:
    Mar 4, 2013
    Posts:
    28
    Thanks jemast for replying so fast. You guys are really supportive.

    I looked into my project and found that one of the plugins was using PostprocessBuildPlayer which was written in python. I deleted it because i was not using that anymore. And this worked fine.
     
  27. yuriythebest

    yuriythebest

    Joined:
    Nov 21, 2009
    Posts:
    1,125
    Hi! I bought and am currently using your toolset (which is amazing) - I am trying to use it in combination with the mac gamecenter

    Code (csharp):
    1.  
    2. void Start ()
    3. {
    4.         if(!_authenticateStarted)
    5.         {
    6.             Social.localUser.Authenticate (ProcessAuthentication);
    7.             _authenticateStarted = true;
    8.         }
    9. }
    10.    
    11. void ProcessAuthentication (bool success)
    12. {
    13.         if (success)    
    14.             Debug.Log ("GameCenter Authenticated");
    15.            else
    16.               Debug.Log ("Failed to authenticate");
    17. }
    18.  
    19.  
    20.  
    However I always get "Failed to authenticate"

    I have tried stuff from:
    http://forum.unity3d.com/threads/116901-Game-Center-Support/page5
    but to no avail

    (otherwise everything works - I have used your plugin to set up all the provisioning profiles, make the pkg and submit to the mac app store - I thought the game center would "work" when submitted but alas no so it got rejected)

    please help!
     
  28. jemast

    jemast

    Joined:
    Dec 7, 2011
    Posts:
    141
    Hello yuri,

    We made a mistake with Game Center in version 1.9.5 where we removed the Game Center entitlement as we thought it was deprecated (it crashes your app during development).

    We have reverted this entitlements in version 1.9.6 (live on the Asset Store). You should enable the Game Center entitlement (under Enable entitlements) in your Release preset. For development, you need to disable it and you should be able to authenticate with the Game Center sandbox.

    Though to test Game Center you still need to sign your app using development profiles and enabling entitlements (fill in the Application Identifier) and sandboxing. Is this what you're doing for development testing? (recap: enable development codesign/entitlements/sandbox but do not enable Game Center entitlement only for dev/testing)
     
  29. yuriythebest

    yuriythebest

    Joined:
    Nov 21, 2009
    Posts:
    1,125
    Thanks for your quick reply! I updated the plugin and have the gamecenter button, however my attempts at testing it in sandbox prior to submitting still fail (cannot login due to no validation)
    for now I've disabled the gamecenter checkbox, turned off mac app store validation and set the profiles to "developer", I've also signed out of gamecenter on the mac. What worries me is that unlike the Mac Appstore profile, the "associated app ID" is blank - does this mean I should head to developers.apple.com and attempt to make a new "correct" certificate? (screenshot attached)

    $macSettings.png

    Also a side question - when in the gamecenter, should the leaderboard ID be "com.MyAppName.LeaderboardName" or meerly "LeaderboardName"? currently I'm using "LeaderboardName"

    thanks in advance!
     
    Last edited: Mar 14, 2014
  30. jemast

    jemast

    Joined:
    Dec 7, 2011
    Posts:
    141
    The issue is that you are using Developer ID certificates. They're not intended for Mac App Store development/distribution and can't be used for testing Mac App Store features in development sandbox.

    You indeed have to make certificates/profiles for "Mac Development" (exact wording in Apple's certificate area). Also make sure the whole thing is tied to an AppID with Game Center enabled. Let me know if you have any trouble setting up those certificates/profiles and I'll try and help.

    We know we should document the whole certificate/profiles issue but those things takes time to do well (and like most people here we're crumbling with work), so at the moment we're relying on the fact that this is correctly documented (e.g. in Apple documentation). I hope I can get around making those tutorials soon!
     
  31. yuriythebest

    yuriythebest

    Joined:
    Nov 21, 2009
    Posts:
    1,125
    Thanks for your quick replies! yes, there is an AppID with a leaderboard

    I did the following steps (developers.apple.com)
    -added my mac to "devices" with it's UUID
    - in provisioning profiles, created a "Mac App Development" profile with my mac added

    - downloaded it, opened with Xcode!

    Progress:


    $macDevCertificate1.png

    now the associated appID is filled, however it still says that it cannot validate

    btw are "network connections" required for gamecenter? for now they are off in sandboxing
     
    Last edited: Mar 14, 2014
  32. jemast

    jemast

    Joined:
    Dec 7, 2011
    Posts:
    141
    Can you confirm that (following your pattern):

    Your bundle identifier (in shared settings) is: com.sdsd.ssd
    Your application identifier (under entitlements) is: 345435435.com.sdsd.ssd

    Network connections shouldn't be required as you're using a system service (same for iCloud or Push Notifications) though in my experience you should enable outgoing network connections regardless (it will allow Unity usage statistic to go through for example, other plugins might use network for their features). In my latest tests, Xcode doesn't enable any network connection entitlement when you enable Game Center (though I'm not a 100% certain you'd rather double check that).
     
  33. yuriythebest

    yuriythebest

    Joined:
    Nov 21, 2009
    Posts:
    1,125
    yup

    yes - in "enable entitlements"
     
  34. jemast

    jemast

    Joined:
    Dec 7, 2011
    Posts:
    141
    I'll have to do some testing to check for potential pitfalls. I'll try to do it in a few hours but I may have to make you wait until tomorrow morning (CET time), so 12h max.

    Thanks for your patience.
     
  35. jemast

    jemast

    Joined:
    Dec 7, 2011
    Posts:
    141
    @yuri

    Hello again,

    Sorry for the delay. I finally got the chance to conduct some advanced tests. We used user feedback on Game Center development thus the back-and-forth changes regarding this entitlement.

    In fact, it is indeed required for both development and release. You should also enable outgoing network connections in sandboxing settings. That's the way Xcode configure entitlements when you enable Game Center.

    You then only need to make sure that your AppID is Game Center enabled, your certificates/profiles are up to date and enabled with this AppID. Also make sure the profiles are installed on the system in System Preferences you should have a "Profiles" icon with your development profiles (not the release ones).

    The easiest way to make sure everything is configured is to make a dummy Xcode Cocoa app project with your settings (bundle id,...), enable game center and build run once. On my end it worked both on Xcode and Unity. You may also have to log out your current Game Center account so it can prompt you with the sandbox mode.

    I'll update Mac App Store Toolset once again to reflect this change and mention this in documentation!
     
  36. yuriythebest

    yuriythebest

    Joined:
    Nov 21, 2009
    Posts:
    1,125
    hi! Okay, I did the following:
    I was able to create a Cocoa app in Xcode using the same profiles and enabled "game center"

    I updated to the latest Mac App Store Toolset, enabled gamecenter, set the developer profiles (same as in the previous screenshot), enabled gamecenter, updated the build pipleline, built the app, logged out of the gamecenter in OSX but same thing "failed to authenticate"

    the interesting thing which I didn't notice however was that when running inside unity, it DOES authenticate

    EDIT: I tried making an empty Unity3D app to test the gamecenter -same thing. Maybe I'm doing something wrong - to recap:

    Mac App Store BundleID : co.MyCompany.MyGame (with gamecenter enabled in developers.apple.com)

    Enable Code signing
    provisioning profile: Mac Development Profile
    Certificate: Mac Developer: John Johnson (1234567ABC)
    Associated App ID (read only) : 1212121212.co.MyCompany.MyGame

    Enable Entitlements:
    Application Identifier : 1212121212.co.MyCompany.MyGame -copy pasted from "Associated App ID (read only)

    Enable Gamecenter
    Enable Sandboxing - Allow Incoming/outgoing connections

    (after that I clicked "update build pipeline")
    made sure I was logged out from game center,
    built - same thing

    $build.png
     
    Last edited: Mar 17, 2014
  37. yuriythebest

    yuriythebest

    Joined:
    Nov 21, 2009
    Posts:
    1,125
    Hi! I was able to get everything working on another computer - the issue seems to have been that I have 2 versions of Xcode installed and there is some weird provisioning profile/signing identity/etc stuff going on - To anyone reading the Mac App Store Toolset plugin is totally awesome and I would never have been able to submit to the app store without it. 10/10 stars
     
  38. jemast

    jemast

    Joined:
    Dec 7, 2011
    Posts:
    141
    Hello yuri,

    First off sorry I couldn't get back to you earlier.

    Your issue with multiple Xcode seem indeed quite tricky. In Mac App Store Toolset settings you can set the path to a custom Xcode version, may be this could help. In fact I'm unsure why I didn't ask first but in the settings you can enable verbose mode.

    It seems your app may not get correctly signed on your Mac where you're getting issues. The verbose mode will output a log in the same folder as the generated .app and should give you some insight into if everything went OK. Feel free to paste your log here if you're unsure.

    Finally, about Game Center working in Unity editor I'm unsure but it could be a simple workaround faking authentication from Unity, as Game Center cannot work if your app isn't signed with a Game Center enabled AppID.

    Thanks for the review, it could use some more work on documentation/clarity/tutorials and overall polish.
     
  39. OneThree

    OneThree

    Joined:
    Oct 28, 2011
    Posts:
    181
    How do you fully uninstall this plugin?

    I installed it and got it partially set up, then decided that I want to publish a new build to Steam before setting up the game for the Mac App Store. So I want to pull the Mac App Store Toolset from the build pipeline until I'm fully ready to use it.

    I deleted the Jemast folder, but noticed that there's also a PostProcessBuildPlayer file in Assets/Editor now. Was that auto-generated by the Mac App Store Toolset? If so, is it safe to delete?

    Are there any other files I need to remove when uninstalling?

    Thanks!
     
  40. jemast

    jemast

    Joined:
    Dec 7, 2011
    Posts:
    141
    Actually thanks for pointing that out, that's something we haven't properly documented. Indeed the plugin works with the PostProcessBuildPlayer file.

    Other plugins in your project may use this file to trigger post-process actions so I cannot guarantee it's "safe" to delete it. In fact you don't need to delete Mac App Store Toolset to disable its functionnalities.

    I'd suggest you re-import Mac App Store Toolset and in the plugin window, hit the "Clear build pipeline" button at the top which will remove the plugin's commands in your PostProcessBuildPlayer file but won't touch other plugins' commands (if any at all). Though if you're a 100% sure you have no other plugin using PostProcessBuildPlayer file, you can also safely delete it.

    By the way if you want a full cleanup, the plugin also creates entitlements.entitlements file alongside the PostprocessBuildPlayer file, as well as an xml file for preferences. You can safely delete both as they are 100% specific to Mac App Store Toolset.

    I'll make sure to document this. Let me know if you need any additional help or if anything was unclear!
     
  41. OneThree

    OneThree

    Joined:
    Oct 28, 2011
    Posts:
    181
    Nope, that was all I needed to know. Thanks for the quick reply!
     
  42. yuriythebest

    yuriythebest

    Joined:
    Nov 21, 2009
    Posts:
    1,125
    Hi! Again somewhat tangential questions - I'm having another issue: when using this plugin and trying to purchase something (IAP) I get the error:


    (When logged in to GameCenter as the test user)
    The product List does not load and I get the error:

    (when logged out of GameCenter)
    The product list loads and I get the error:

    and later an error window pops up (But only on some Macs):
    any insight would be much appreciated, gratitude in advance!
     
  43. jemast

    jemast

    Joined:
    Dec 7, 2011
    Posts:
    141
    Hello yuri,

    I'm unsure about IAP as I'm not really familiar with them, though we've just been made aware of possible inconsistencies with other plugins that implement functionnalities that need post-processing (that's the case for IAP). We have to make an update to make sure the plugin signing happens after all plugins have performed their post-process operation.

    Currently it's quite late here but I can definitely look into making a quick update tomorrow in 12h to 24h max. I'm not sure it will fix your issue but I'd rather rule out this possibility first. Could you send me an e-mail at contact@jemast.com so I can get back to you with the update as soon as it's done.
     
  44. yuriythebest

    yuriythebest

    Joined:
    Nov 21, 2009
    Posts:
    1,125
    Thanks! just in case I'm using Prime31's Mac Storekit plugin.
     
    Last edited: Apr 9, 2014
  45. yuriythebest

    yuriythebest

    Joined:
    Nov 21, 2009
    Posts:
    1,125
  46. jemast

    jemast

    Joined:
    Dec 7, 2011
    Posts:
    141
    I'm unsure how Mac App Store Toolset could help on that hand, though I just wanted to let you know I'm working on this update that will ensure that our plugin will operate after Prime31's post-process which may contribute to the issue at hand.

    The update is a bit trickier than expected so it could take me a few hours. Could you send me an e-mail at contact@jemast.com so I can send you the update as soon as it's done.

    EDIT: I've contacted you via PM, if you send me an e-mail you'll get the update. I'll perform additional testing but it should be good to go for Asset Store submit today as it's a critical fix.
     
    Last edited: Apr 9, 2014
  47. yuriythebest

    yuriythebest

    Joined:
    Nov 21, 2009
    Posts:
    1,125
    Hi! New question: we are trying to test the app on another mac. We have added the UID to the provisioning profile and re-downloaded the profile, opened it with xcode,refreshed the profiles list in the Xcode account settings, etc. I then open unity, refreshed the certificates/profiles list in the mac app store toolkit, updated the build pipeline and created the build - however it does not open on the other mac whose UID was added to the profile (one one it gave the warning that the app was "corrupted", on another it meerly crashes instantly). I checked the verbose log thingy and there it all seems fine and I can open it on my original mac
     
  48. jemast

    jemast

    Joined:
    Dec 7, 2011
    Posts:
    141
    Does the other Mac have the profile correctly installed? You can quickly check this in System Preferences > Profiles (if that's a development profile).

    Otherwise, you can check Mac OS Console (Applications > Utilities > Console) which will give you a reason for the crash (exit code), that could help locate the issue.
     
  49. yuriythebest

    yuriythebest

    Joined:
    Nov 21, 2009
    Posts:
    1,125
    Yess! I have gotten in-app Billing (PRIME31 StoreKit) to work with Mac App Store Toolset!!

    1. You need to get the _MASReceipt - without it it will never work. _MASReceipt's are test-user dependent (they won't work if you switch test users)
    http://answers.unity3d.com/questions/173397/how-to-implement-mac-app-store-in-app-purchase-and.html
    disregard the stuff about the cocoa app - build the unity3d project using console commands or through the Mac App store toolset - but you need to install it using:

    in the terminal

    Make sure your built app is deleted everywhere or it won't work - just leave the pkg
    - it is best to build the Storekit Test scene for that purpose.
    run the app and press the buttons in the storekit test scene to get the reciept.
    close the app
    after that get the _MASReceipt from inside the app package contents (right click the app - show package contents)

    2. Build your "normal" developer certificate app using Mac App Store Toolset

    3. place the _MASReceipt folder inside your built app

    NOTE: If the app doesn't launch on other Macs make sure their UID's are added to the provisioning profile, and that the users downloaded the developer profile and clicked it - it should then launch - the "file is corrupt" message appears if they haven't done that I think

    NOTE2: if you get messages like:

    this is not your fault! just wait and maybe later it will work.

    NOTE3: if you are getting:
    you either haven't inserted the _MASReceipt or are not using the same test user account that you created your _MASReceipt with

    Note4: if you are getting "unknown errors" when purchasing it could be due to the test user - some say you should go to the app store and go through the new user setup (read the license, etc) up to the point of the credit card info and then exit. Some others say this breaks the test user - for me I did that and it seems to work now

    NOTE5:When rebuilding apps you have to re-insert the _MASReceipt in the package contents for it to work!

    NOTE6: if your app crashes at start is is 99% due to incorrect entitlements like not having USB in the entitlements - check the player log

    NOTE7: for this I used the current version of the toolset on the app store (nothing experimental that was shared through emails)

    Mac App store Toolset Feature Requests:
    1. create _MASReceipt automatically from Unity3D (enter the test user login, pass, have the app installed into applications, grap the reciept)?
    2. build with the _MASReceipt already in the app package contents (even if generating it from Unity3d is not possible, if you already created it twould be cool to not have to open up the package contents and paste it in every time)
    3. copyright information field in info.plist?
     
    Last edited: Apr 14, 2014
  50. jemast

    jemast

    Joined:
    Dec 7, 2011
    Posts:
    141
    Hello yuri,

    Glad you figured it out! Indeed the entire process is quite complex...

    About your requests, I'm not sure we can come up with a solution to auto-generate the receipt. As you mentionned, the receipt is generated when you install an app with Mac App Store validation enabled: it will crash/exit and prompt you to login to the Mac App Store (that's where you enter your test user). To my knowledge, there's no other way to trigger this prompt and generate the request for a receipt.

    What we could add is an auto-install mechanism, first deleting the locally generated app bundle then running the installer command on the package. I'll need to test it but at this point each time you reinstall it should re-download the receipt (tied to the test user you're logged in with).

    Finally copyright information in plist is available, it's the "Bundle Get Info" settings under "Shared Settings" (may be we could swap the label with "copyright" as "bundle get info" is the technical name).

    I'll definitely look into making things smoother for getting test MAS receipts after build.


    Thanks for your feedback!