Recently some Unity customers who have been very anxious to get their game approved by Apple for listing in the app store have received a disappointing rejection notice by Apple because they use something that was not approved by the Apple rules.
As it turns out, the Unity iPhone application was accessing those non-public functions through the Mono runtime which is a third party piece of code we use. Therefore, some of our customers had the bad experience of seeing their application be rejected.
We have been working on hard on this issue as it stalls and affects our iPhone developer customers. We were able to correct the issue just 2 days after we first heard about it and delivered that fix to those that had reported the problem. Many of them have already resubmitted their application to Apple.
We will be releasing this new version, Unity iPhone 1.5.1, sometime next week. In the meantime, you have a need or concern, please contact support@unity3d.com and request an iPhone build with this issue fixed.
Note that Unity games already on the app store are not affected by this.
Recently, some Unity customers who have been very anxious to get their iPhone game approved by Apple, have received a rejection notice because they use something that was no longer approved by the Apple rules.
We have been working hard on this issue as it stalls and affects our iPhone developer customers. We were able to correct the issue 2 days after we first heard about it and delivered that fix to those who had reported the problem. Many of them have been already resubmitted their application to Apple. The first Unity game to completely pass the App Store Submission Process is “Star Wars: Trench Run”.
We will be releasing this new version, Unity iPhone 1.5.1, publicly on our website sometime next week. In the meantime, if you have an urgent need or concern, please contact oleg@unity3d.com and request an iPhone build with this issue fixed.
Note that Unity games already on the app store are not affected by this.
For those who are interested here are the technical details:
The reason why Unity authored games (amongst other applications) have been rejected is that Apple recently has begun using special tools to check against usage of private APIs. The main reason for restricting private API usage is to avoid problems with applications breaking when Apple releases new versions of the iPhone OS. Unity iPhone 1.5.0 is accessing 2 private functions _NSGetEnviron and exc_server from the .NET runtime Mono.
There has been a lot of confusion about this topic recently. So to be 100% clear, there is zero relation between those 2 private functions and harvesting user information. Harvesting of user information can be done with a public API. The 2 private functions used in Unity, can not be used for this purpose. Neither do we know of any Unity games that performed any kind of harvesting of user information like phone numbers.
So why did we access those 2 private functions? First of all, Mono runtime was ported from OS X where those functions are very commonly used. Actually they have been used for years now. And as those functions didn’t give us any problems during Unity port to the iPhone, we simply continued to use them.
What do those functions actually do?
_NSGetEnviron is used by the Mono runtime to provide an implementation of the .NET core API method: Environment.GetEnvironmentVariable(). On UNIX environment variables are often used to pass arguments to applications. Due to how the function is exposed, it does not let developers do any data collection.
exc_server is used by the Mono runtime to provide graceful NULL reference exception handling. This is useful for developers, when they dereference a null pointer, we can avoid a crash and instead throw an exception and continue the game.
While those functions are useful for debugging purposes, Apple now rejects Apps that use them.
In order for us to solve this problem we simply removed any calls to _NSGetEnviron and exc_server. Update Unity iPhone 1.5.1 was sent out to developers days ago. Most of them have already resubmitted their Apps to the AppStore with the functions removed. Unity iPhone 1.5.1 will go live this week. The first Unity game to completely pass the App Store Submission Process is “Star Wars: Trench Run”.
You can follow any responses to this entry through the RSS 2.0 feed.
You can leave a response, or trackback from your own site.
FingerGaming » Unity-Powered iPhone Games Rejected from iTunes App Store - Gaming on the iPhone and iPod Touch said on November 14th, 2009 at 2:36 am:
[...] Unity has also published a weblog post on its official website explaining the problem and the [...]
Unity Powered games getting rejected by Apple? RESOLVED! said on November 14th, 2009 at 4:41 am:
[...] team responsive as always were ready with a fix for the Appstore issue that will be out in unity iPhone 1.5.1 Early next week. Thanks guys for the hard work that you do to keep us looking good. Thanks to the team at Unity [...]
diamondTearz said on November 14th, 2009 at 4:42 am:
Thanks guys for all of the work that you put in to keep us shining! It’s very appreciated. Unity FTW!
Minevr said on November 14th, 2009 at 4:42 am:
Hateful apple
Aaron said on November 14th, 2009 at 6:18 am:
Why the “hateful Apple” comment? Apple was responding to an issue with another game using private variables/api to harvest user information (of something like that). All apple did was enforce the already existing rule more strictly. Kudos to UT for responding so quickly.
gamedev1 said on November 14th, 2009 at 6:01 pm:
I have tested a new release 1.5.1f2 on my large project and everything worked just great. Not even a single issue, great job guys.
Why the “hateful Apple” comment?
Because it has nothing to do with harvesting user information. You can request a user phone number programmatically even using exposed public SDK API.
That is right there is a hole here, but Apple should be responsible for that and try to fix it on system level introducing something similar to UAC.
What does it mean enforce existing rule more strictly? Wait a second, you know, the rule exists or it doesn’t. The fact they approved a bunch of applications calling private API means they not doing a good job there either.
And c’mon how harmful is the exc_server function? It is responsible for exceptions handling and it should be exposed in an SDK in the first place.
Apple removes games to protect user privacy | iPhone Hellas said on November 15th, 2009 at 9:32 am:
[...] τω μεταξύ το Unity έχει αναβαθμιστεί έτσι ώστε να μην περιλαμβάνει πλέον τα δύο αυτά API και [...]
Ashkan said on November 15th, 2009 at 5:19 pm:
how about fixing unity 2.6.
it has many bugs in editor that were not available on 2.5 and web player still has input problems and sometimes send key presses to the game for no reason
i know you will fix it soon guys but talk about that on the blog too
Thank you great unity guys
Graham said on November 16th, 2009 at 2:05 pm:
@ashkan
We are working on 2.6.1.
Japan-Nachlese: iPhone immer noch ohne Konkurrent aber mit Entwickler-Problemen said on November 16th, 2009 at 2:22 pm:
[...] soll ‘unzulässige’ iPhone-Schnittstellen benutzt haben. Es ist jedoch bereits nachgebessert [...]
Minevr said on November 16th, 2009 at 7:06 pm:
“Hateful apple” is a joke~~~ LoL….
Indie Vault » Ad Apple non piace Unity? Subito la patch! said on November 16th, 2009 at 7:08 pm:
[...] che facevano uso di quei comandi sono stati immediatamente rifiutati da Apple. Fortunatamente, Unity Technologies si è immediatamente messa all’opera per risolvere il problema, annunciando una nuova versione [...]
Daniel Wind said on November 16th, 2009 at 8:07 pm:
Thanks guys for looking into this so quick
Desenvolvedores passam por problemas na aprovação de jogos para iPhone/iPod touch criados com Unity | MacMagazine said on November 16th, 2009 at 10:20 pm:
[...] sorte, o pessoal responsável pela criação das ferramentas foi capaz de corrigir os problemas rapidamente e, dois dias depois de enviarem suas reclamações, alguns desenvolvedores receberam uma nova [...]
Desenvolvedores passam por problemas na aprovação de jogos para iPhones/iPods touch criados com Unity | MacMagazine said on November 16th, 2009 at 10:31 pm:
[...] sorte, o pessoal responsável pela criação das ferramentas foi capaz de corrigir os problemas rapidamente e, dois dias depois de enviarem suas reclamações, alguns desenvolvedores receberam uma nova [...]
Forbidden Fruit in Apple’s APIs @ Dr. Touch said on November 16th, 2009 at 11:09 pm:
[...] Unity 3D engine appears to be accessing this value as well. Update: The problem has already been fixed in Version 1.5.1 of Unity. Apple was tipped off to this number being abused by another case (i.e. lawsuit), but now [...]
Dwair said on November 17th, 2009 at 12:34 pm:
Ouch! I sent an update to the app store on 14th, and did al the PR and marketing thing…half of the world will hate me for sure…
Well, time to get the patch, then ;P
Craig Mirkan said on November 19th, 2009 at 8:06 am:
I’m surprised you were making use of exc_server — none of the headers required for implementing your own forwarding exception server are available in the SDK, but you can do implicit NULL checks just fine by trapping the equivalent BSD signals.
lesfundi said on November 20th, 2009 at 5:02 am:
when will unity iphone 1.5.1 be out?
Renaldas Zioma said on November 20th, 2009 at 11:52 pm:
Unity iPhone 1.5.1 is out already: http://unity3d.com/unity/whats-new/iphone-1.5.1
Unity Technologies Blog » Blog Archive » Unity iPhone 1.5.1 Released said on November 21st, 2009 at 10:20 pm:
[...] I’m pleased to announce that we’ve publicly release Unity iPhone 1.5.1 yesterday. Unity iPhone 1.5.1 includes improved XCode support and improved AssetBundle support, but more importantly Native APIs (NSGetEnviron and exc_server functions) have been removed to comply with new Apple requirements, previously reported by Joachim here. [...]
This Week in iPhone News - November 27/2009 said on November 30th, 2009 at 4:48 am:
[...] Unity iPhone App Store Submissions – Problem Solved In a response to the rejections of Unity based iPhone apps, Unity has solved the issue with an update. [...]
Apple removes and rejects apps built on the Unity Engine | Mobility Site said on December 1st, 2009 at 2:43 am:
[...] Update: Hit the link in the comment below from Keli Hlodversson for more info. In about 2 days from being made aware of the problem, Unity engineers have fixed it and are in the process of releasing an update to the game engine software. Only about a handful of game developers using Unity have been affected by this flaw, as Apple was only refusing adding new applications. No existing Unity-authored games have been removed from the store because of this. For more information on Unity’s fix see: http://blogs.unity3d.com/2009/11/14/unity-iphon…; [...]