Rejected for limiting device by device requirements

Hi !

My app has been rejected by Apple for declaring support for Bluetooth LE. My game doesn’t use bluetooth, the only reason I added that to UIRequiredDeviceCapabilities table was to prevent older devices from installing the game. In my case, I was actually aiming at the iPhone 4 and iPhone 4S : the first levels of my game are playable on those devices but it shows very slow performances later in the game, especially on the iPhone 4.

I’ve seen a lot of developpers using this technique to exclude “low end” devices, all over the internet (not only Corona) and I did understand that it may be a cause of rejection from Apple. While other lucky devs could use it without any problem…

Well, I guess I’m unlucky since I’ve received this message from the Apple team :

PLA 3.3.1

Your app uses public APIs in an unapproved manner, which does not comply with section 3.3.1 of the Apple Developer Program License Agreement

Specifically, your app limits devices by device requirements.

So, right now, my only way to exclude devices is to set a minimum iOS. According to this matrix, I shoult set the minium iOS required as iOS 8.1 or iOS 9.1. That would work for the iPhone 4, but wouldn’t be enough to exclude the iPhone 4S.

  • I was thinking about adding the ability to actually use the Bluetooth but I’ve found out that Corona SDK doesn’t have bluetooth support.

  • In the previous matrix, it seems that one great solution would be to exclude devices older than Armv7s. But in the Apple Device Compatibility, I can’t find anything mentionning Armv7s.

What other ways do I have ?

Do you know what part of your app drags a 4 and 4s down performance wise?

I think this is probably the physic engine which is set to run at 60fps.

An iPhone 4 and 4s should be able to handle 60fps. The number of objects, effects and memory are what pulls down frame rates generally speaking.

Rob

This is what I meant by saying “this is probably the physic engine”. Of course, slow performances are not only caused by the physic engine, but it’s mainly tied to it. My game is physically heavy : there are a lot of physical bodies (dynamic, static, sensors, complex shapes), particles, etc. Using collisionFilter has a lot of positive effect but still, it doesn’t run very well on iPhone 4S, especially on iPhone 4. The GPU memory is quite high, but from what I’ve understood and tested, it’s still acceptable. Of course, I’ve also tested several things (reducing the number of sprites, using smallest images, stopping sprite animations when needed, etc).

In my game, at the beginning of each level, there’s a travelling showing the end of the level, and then showing the beginning. During this time, the physic engine is paused : everything is perfectly smooth. Once the game actually starts, a lot of things are going on (timers, transitions, Runtime listeners, etc), but there’s one thing that definitely “kills” performances : physics.start().

Setting the game at 30 fps does seems to give better performance but then, the physic engine doesn’t seem to have the exact same behaviour (which does make sense).

Regarding the performances, I’ve got my own standards but from the feedback I got, it seems people still enjoy the game on an iPhone 4S (and some even on iPhone 4!). In the end, it will probably only be about what Apple considers as “causing slow performances”. I guess I’ll learn it in a few days…

Evans, may I make a suggestion? Instead of trying to block the 4 and 4s, you could limit the features of the game. One simple thing to do is to check the OS and screen resolution in the config.lua and if it’s an iPhone 4 or 4s then change the fps to 30. If you combine this with the iOS restriction you already looked into (restricting to iOS 8+), then you are only dealing with 4s devices. And if a user is running iOS 8 on a 4s they should expect things to be slow from time to time. Apple might think otherwise but maybe this is a good place to start.

I have an HTML/Cordova game that had a similar problem. The game uses various transitions and particle effects and stuff that make the game more enjoyable for players who have devices that can support it. Unfortunately, the features made the game unplayable on slower devices. The fix I implemented was to detect the actual FPS and if it’s too low then remove some or all of these effects.

Oh this is a great idea !

I don’t know why, but adding the feature to turn off some effects (automatically or manually) didn’t cross my mind ! I didn’t thought it was a common practice on mobile device. I’m keeping that in mind if I need to optimize the game for its launch, and I’ll definitely add this feature for future updates !

I have seen some app store listings that say something like “Optimized for iPhone 5 and iPad Air and above.” You might consider something like that if you do something like what I suggested in my previous post.

Yes, I’ve added that too. A lot of games seems to do this, like Angry Birds 2 for exemple.

Let’s just hope that I’m just being kinda paranoid and that the game is smooth enough to pass Apple’s review.

Quick update : my game has been approved ! Like I said earlier, I’ve removed all the device requirement and the only limitation that I’ve got is an OS limitation (ios 9 only).

My game definitely doesn’t run very well on iPhone 4s but I guess it runs well enough for Apple (or the Apple reviwer) which is great !

You set the minimum iOS version to 9? In your earlier post you said 8.1. That’s a bummer for me since my personal phone is iOS 8. My iPad runs iOS 9. I guess I can play it there.

Hmm… I have a doubt : I think I actually set it to iOS 8 because I don’t have any real reason to set it to iOS 9. I’ll need to verify that once I’m back at home. 

I hope I didn’t make a stupid mistake…

Do you know what part of your app drags a 4 and 4s down performance wise?

I think this is probably the physic engine which is set to run at 60fps.

An iPhone 4 and 4s should be able to handle 60fps. The number of objects, effects and memory are what pulls down frame rates generally speaking.

Rob

This is what I meant by saying “this is probably the physic engine”. Of course, slow performances are not only caused by the physic engine, but it’s mainly tied to it. My game is physically heavy : there are a lot of physical bodies (dynamic, static, sensors, complex shapes), particles, etc. Using collisionFilter has a lot of positive effect but still, it doesn’t run very well on iPhone 4S, especially on iPhone 4. The GPU memory is quite high, but from what I’ve understood and tested, it’s still acceptable. Of course, I’ve also tested several things (reducing the number of sprites, using smallest images, stopping sprite animations when needed, etc).

In my game, at the beginning of each level, there’s a travelling showing the end of the level, and then showing the beginning. During this time, the physic engine is paused : everything is perfectly smooth. Once the game actually starts, a lot of things are going on (timers, transitions, Runtime listeners, etc), but there’s one thing that definitely “kills” performances : physics.start().

Setting the game at 30 fps does seems to give better performance but then, the physic engine doesn’t seem to have the exact same behaviour (which does make sense).

Regarding the performances, I’ve got my own standards but from the feedback I got, it seems people still enjoy the game on an iPhone 4S (and some even on iPhone 4!). In the end, it will probably only be about what Apple considers as “causing slow performances”. I guess I’ll learn it in a few days…

Evans, may I make a suggestion? Instead of trying to block the 4 and 4s, you could limit the features of the game. One simple thing to do is to check the OS and screen resolution in the config.lua and if it’s an iPhone 4 or 4s then change the fps to 30. If you combine this with the iOS restriction you already looked into (restricting to iOS 8+), then you are only dealing with 4s devices. And if a user is running iOS 8 on a 4s they should expect things to be slow from time to time. Apple might think otherwise but maybe this is a good place to start.

I have an HTML/Cordova game that had a similar problem. The game uses various transitions and particle effects and stuff that make the game more enjoyable for players who have devices that can support it. Unfortunately, the features made the game unplayable on slower devices. The fix I implemented was to detect the actual FPS and if it’s too low then remove some or all of these effects.

Oh this is a great idea !

I don’t know why, but adding the feature to turn off some effects (automatically or manually) didn’t cross my mind ! I didn’t thought it was a common practice on mobile device. I’m keeping that in mind if I need to optimize the game for its launch, and I’ll definitely add this feature for future updates !

I have seen some app store listings that say something like “Optimized for iPhone 5 and iPad Air and above.” You might consider something like that if you do something like what I suggested in my previous post.

Yes, I’ve added that too. A lot of games seems to do this, like Angry Birds 2 for exemple.

Let’s just hope that I’m just being kinda paranoid and that the game is smooth enough to pass Apple’s review.