My apps were rejected

Archives Forums/MacOS X Discussion/My apps were rejected

Grey Alien(Posted 2011) [#1]
On two things:

1) Command + Q doesn't quit them. I'm assuming this should be easy to add with a Blitz key-code...
2) They didn't like me writing to ~/Library/Application Support/Injoy Games because that was the original name of the game's publisher. Looks like I'll have to change that to Grey Alien Games.

Anyway, thought the info might be useful for other devs.


Cartman(Posted 2011) [#2]
Thanks for posting that.

Questions for everyone:

Would the Command+Q immidately quit the game no matter what you are doing? Or would it do a confirmation box first? Or would it just be a shortcut for when you are on a menu screen that has a Quit option?

Can anyone point to some documentation with expected behavior for Command+Q?


Grey Alien(Posted 2011) [#3]
I discovered that Command Q quits automatically in windowed mode but it doesn't in full-screen mode so I needed to add this code in my framework:

If KeyDown(KEY_Q) And (KeyDown(KEY_LSYS) Or KeyDown(KEY_RSYS)) Then

EndIf

I don't know enough about Macs to answer your other questions, but I think it's supposed to just dump you out an app.

Last edited 2011


SLotman(Posted 2011) [#4]
Don't know what you're doing on your games, but here if I hit Command+Q my game does close.

I know it's dumb to ask, but are you checking AppTerminate() in your code? I really didn't have to change anything here for it to work...

Also, why are you writting to /library/app support...?

I only write files (configuration, player stuff) on "users/shared" (I use an API call to get that folder) - the rest of my files just goes together with the main app (usually just a .dat with everything on it).

Is library/app support the correct place to write? Am I doing something wrong by placing 'other files' (read only) together with the main .app?

(I'm a Mac newbie, so I don't know if I'm doing things right :P)


Brucey(Posted 2011) [#5]
Generally, you could stick global files into the App Support folder, and user-specific settings into the user folders.
I'm sure Apple's guidelines have a better explanation, of course :-)


jkrankie(Posted 2011) [#6]
I got caught out by the command-q thing too! I only tested in windowed mode, and Appterminate() catches the key press there.

Also, if you have a full screen and windowed mode, you need to make command-f switch between the two.

Cheers
Charlie


SLotman(Posted 2011) [#7]
Also, if you have a full screen and windowed mode, you need to make command-f switch between the two.

Ooops... that one I didn't know! Is it a requirement?

Edit: Hah! I just love blitzmax, a couple of lines here and there, and my game switches from fullscreen to windowed (or back) without having to re-load anything at all :)

Edit2: Oops, spoke too soon... on MacOS I'm loosing images on miniB3D and will have to reload everything.

This in the middle of the game - I'm pretty much screwed :(

Last edited 2011


skidracer(Posted 2011) [#8]
That should be Command-Shift-F yes?


Grey Alien(Posted 2011) [#9]
@SLotman: I used to use users/shared for my framework but Apple won't let you for the Mac Store, which is why I use the library path. Also yes I am testing for AppTerminate and it never happens in full-screen when you press those keys.

@jkrankie: Is that command-shift-f an official thing then? I don't do that yet (I support alt+enter), I'll check the official docs...Hmm can't find it. I was looking here: http://developer.apple.com/library/mac/#documentation/UserExperience/Conceptual/AppleHIGuidelines/XHIGKeyboardShortcuts/XHIGKeyboardShortcuts.html#//apple_ref/doc/uid/TP40002725-CHDIGFBH

Last edited 2011


Grey Alien(Posted 2011) [#10]
F**kit, I'll add Command+Shift+F support anyway. I don't want any more rejections. The question is if they stopped after my Command-Q failure or test all the other things on their checklist and I'll get more this time round. I hope not...

Last edited 2011


SLotman(Posted 2011) [#11]
Ok... I now am also writing to /library(...) but one thing got me concerned - my game (which uses miniB3D) apparently doesn't allow command-tab out of the game (!) and I have no idea why!

Would this be something problematic on Apples eyes?


Cartman(Posted 2011) [#12]
I also got this error when uploading the package via Application Loader.

"the installer package may not include paths outside of a bundle"

The solution was to run these three commands in the terminal right before creating the package.

ls -lad@ *
xattr -d -r com.apple.FinderInfo *
xattr -d -r com.apple.ResourceFork *

This fixed up the files and after packaging and testing, I got my new build up there. With Command+Shift+F, Command+Q, and saving in the right location. Hopefully second time is the charm. :)

Thanks for everyone's help and good luck to others who follow us.


skidracer(Posted 2011) [#13]
> Edit2: Oops, spoke too soon... on MacOS I'm loosing images on miniB3D and will have to reload everything.

I'm not sure but adding a call to GLShareContexts in your app may fix this problem?


SLotman(Posted 2011) [#14]
I'm not sure but adding a call to GLShareContexts in your app may fix this problem?

Unfortunately, not :(

The most strange part, is that on another game, without miniB3D I can swap normally without loosing any image. But with miniB3D I loosed both images and textures... very strange

Arg! Now I see: in fullscreen command-Q doesn't work!

Last edited 2011


SLotman(Posted 2011) [#15]
So, I just made command-Q to work in fullscreen (would be better to hack it into the modules...) and I can switch with command-shift-f.

But can anyone confirm that you can't command-tab out of a blitzmax fullscreen game? Here, neither with or without miniB3D it works...
(apparently I'm not the only one: http://www.blitzbasic.com/Community/posts.php?topic=87755)

Arg! even more troubles: when I switch from fullscreen to windowed mode, I "auto detect" the desktop resolution - but apparently it doesn't take into account the available desktop size - so the windows is bigger than it should be! (What I mean: the window is cut off at the bottom, because of the title bar, and even the dock stays in the way)

So, anyone knows how to actually get the "available" desktop area?
Edit: this one I just solved by comparing the window size and the desktop area... if they match, I reduce the window size in 10% :P

Last edited 2011

Last edited 2011

Last edited 2011


Grey Alien(Posted 2011) [#16]
Good luck Cartman and SLotman!

I don't know about Command-Tab. Is it in their require keys?


Oddball(Posted 2011) [#17]
Regarding where Apple want you to put files. Here is the official word.
http://developer.apple.com/library/mac/#documentation/MacOSX/Conceptual/BPFileSystem/Articles/WhereToPutFiles.html

And some choice quotes to address the comments above.
All of the resources and data files required for an application to run should reside inside the application bundle.

A support file is any type of file that supports the application but is not required for the application to run. ... The preferred location for nearly all support files is in the Application Support directory of the appropriate domain. ... If the resources apply to all users on the system, such as document templates, place them in /Library/Application Support. If the resources are user-specific, such as workspace configuration files, place them in the current user’s ~/Library/Application Support directory.

In particular, you should never install files into a user’s Documents directory or into the /Users/Shared directory.


I tried to put together a list of officially preferred locations for all three OSs, but there was so much conflicting info I gave up.
http://forums.tigsource.com/index.php?topic=15112.0


Winni(Posted 2011) [#18]
I don't know about Command-Tab. Is it in their require keys?


Command-Tab is for switching tasks. Something tells me that this feature is expected to work even when you are in a full screen game. I think pausing the game while the user is Command-Tabbing through the running applications would be a good idea.


SLotman(Posted 2011) [#19]
I don't know about Command-Tab. Is it in their require keys?

It should be. It's the same as Alt-tab on windows.
Just checked, it's even on the link you posted:
"cmd-tab: Move forward to the next most recently used application in a list of open applications."

Command-Tab is for switching tasks. Something tells me that this feature is expected to work even when you are in a full screen game. I think pausing the game while the user is Command-Tabbing through the running applications would be a good idea.


Problem is, bmax doesn't fire a AppSuspended when the user hits a command-tab - it does nothing!

So it's another thing to check manually... and do what? I have no idea :(

All of the resources and data files required for an application to run should reside inside the application bundle.

This has to be a joke...! How am I supposed to do that on blitzmax?
I know I can set the file location to be inside the app bundle, but still, every time the games gets compiled, it will destroy it and create a new one!

When I think I can't hate Apple even more... *sight*

Last edited 2011


SLotman(Posted 2011) [#20]
At least one "hack" that can help out others - change this on polledinput.bmx:

Rem
bbdoc: Return app terminate state
returns: True if user has requested to terminate application
End Rem
Function AppTerminate()
	If autoPoll PollSystem
	Local n=terminate
	terminate=False

?MacOS
   If (KeyDown(KEY_LSYS) Or KeyDown(KEY_RSYS)) And KeyDown(KEY_Q) Then terminate=True; Return True
?
	
	Return n
End Function


This will make cmd-Q to fire appterminate even on fullscreen. It's not the best way to do it, but it's the best I could do :P

Now the only thing left is the command-tab thingie... which we *need* a fix. Can't check for just cmd-tab in code, since it could be cmd-tab or even F9 or F3 (or fn+F3) to show Exposé.... which also doesn't show on fullscreen.

Last edited 2011


JazzieB(Posted 2011) [#21]
I know I can set the file location to be inside the app bundle, but still, every time the games gets compiled, it will destroy it and create a new one!

Actually, it only overwrites the executable/binary. Any files you have copied into the bundle will remain there until you change them yourself. I also put together a HOWTO guide a while ago here.


SLotman(Posted 2011) [#22]
Actually, it only overwrites the executable/binary. Any files you have copied into the bundle will remain there until you change them yourself.

Yeah, just noticed it. But still... another hassle on mac-side :(

I just posted the command-tab problem on the bug report forum, so let's hope it gets fixed soon...


Grey Alien(Posted 2011) [#23]
I have my data in the app bundle. What happens is the first time I compile the game the data is outside. Then I copy it into the bundle in the resources folder and change a flag in my code, then it always looks in the bundle for data instead. Save files are still stored externally in the correct location.


Grey Alien(Posted 2011) [#24]
Hmm I see that Command Tab fails in full-screen but not in windowed mode. Well I've already re-submitted to apple. Let's see if they fail. Hope not! Fingers crossed!


SLotman(Posted 2011) [#25]
Good luck :)

Edit: regarding file paths, I now get the correct path to /Library/App Support/ to store the game config file - but I read somewhere that not everyone has write permission there?

Should I use ~/Library/App support instead? And if so, where do I store a high score table, so all users get access to it?

Last edited 2011


jkrankie(Posted 2011) [#26]
Yes, ~/Library/App support Users with limited account may not be able to write to the main library.

Use Brucey's volumes module. It's great, and uses the api's to get the right folders.

Cheers
Charlie


SLotman(Posted 2011) [#27]
Hmmm... now I'm thinking: what about saving the high score table inside the app bundle?

Would that work, and more, would all users be able to read/write on it?

As for Brucey's volumes mod, I'm not using it, but looking at the source, I'm doing exactly the same:
FSFindFolder( kUserDomain, kApplicationSupportFolderType, False, ref )

Which returns the user application support folder - but that is for each user... no way to save a highscore there for all users!

Last edited 2011


jkrankie(Posted 2011) [#28]
I don't think you should be saving anything inside the app bundle.

Cheers
Charlie


Grey Alien(Posted 2011) [#29]
Agreed. Don't do it. I used to user Users/Shared for data that everyone could read but seems that's not allowed now.


SLotman(Posted 2011) [#30]
So where can I save a highscore table? Are we stuck with scores for each user?

On another note, I was looking for some light on the cmd-tab thing, and ended up seeing a lot of info - on the user part - about this issue. This thread mostly sums it up:

http://forums.techarena.in/video-games/1354597.htm

Apparently, what WoW and every game from Blizzard uses is cmd-M to change to windowed mode - and that's appear to be the most 'known' hotkey. Some games also uses cmd-F to change - but I found no mention to shift-cmd-F!

So now, I'm checking for both cmd-m and cmd-f to cycle from window to fullscreen mode. If the user also press shift (trying shift-cmd-f) it would work the same way.

Edit: Ouch, we may be out of luck. Just found this, which cleared some things:

There's presently no unified solution, because some games use the classic technique of capturing the display device, and some do not.

The Source Mac games don't do that, they use a fullscreen window, so they have more flexibility with things like Command-Tab switching.

Since this is the recommended setup from Apple for fullscreen games going forward, hopefully more games over time will adopt the technique.


Indeed looking at glgraphics source, bmax is capturing the display device instead of using a fullscreen window. If Apple now really recommends to use a fullscreen window, then we may be in trouble :(

Edit: Yeah, apple does recommend that: http://developer.apple.com/library/mac/#DOCUMENTATION/GraphicsImaging/Conceptual/OpenGL-MacProgGuide/opengl_fullscreen/opengl_cgl.html

It gets worse: cmd-M is a hotkey to minimize the window, and it's not working even on windowed mode! I tried listening to events, but hitting cmd-m triggers no event on macos :(

Last edited 2011


Grey Alien(Posted 2011) [#31]
They recommend it but it can't be essential as several Blitz games have already made it on there and all they did was fix the path and add Command + Q. We should be OK.


SLotman(Posted 2011) [#32]
Well, I decided to manually check for cmd-tab, and if the app is in fullscreen, I change it to windowed mode :/

Is there a way to manually force the app to minimize?

Last edited 2011


Grey Alien(Posted 2011) [#33]
There is on PC. I have a Boss Key in my framework that auto-minimises. Maybe there is on Mac too. I'm a Mac noob though so don't know.


jkrankie(Posted 2011) [#34]
Ok, my app status says processing for app store. I only added command-q and command-shift-f. Make of that what you will...

Cheers
Charlie


jkrankie(Posted 2011) [#35]
There it is: http://itunes.apple.com/gb/app/irukandji/id414472647?mt=12

Cheers
Charlie


ima747(Posted 2011) [#36]
Congrats! best of luck to everyone else in process as well. I've referenced this in the bmax tutorial thread as you've all resolved some likely snags a lot of bmax devs will run into. Perhaps a bug report/feature request can be submitted for command Q behavior in bmax by default (since it works in windows mode it's odd it doesn't always in full screen anyway, but now with the app store it's far more critical)


SLotman(Posted 2011) [#37]
Yay! Congratulations :)


Grey Alien(Posted 2011) [#38]
Awesome congrats! When did you submit?


jkrankie(Posted 2011) [#39]
thanks! the second submission was at the end oj january, so i guess it too about 2 weeks!

Cheers
Charlie


Grey Alien(Posted 2011) [#40]
Yeah it took exactly 10 days for mine to get rejected so that figures. Thanks!


jkrankie(Posted 2011) [#41]
Actually, it's really annoying not getting any information on when things are going to happen. Even if you just had a queuing number or something that would be a huge improvement.

Also, my games tend to look less good in static images, but there doesn't seem to be any support for video files in the app store page. Booo!

Cheers
Charlie


Grey Alien(Posted 2011) [#42]
Agreed, I'd love to see progress. I just check everyday, stare at the orange lights and exit. XBLIG lets you link to a video.


SLotman(Posted 2011) [#43]
On a side note: I finally managed to get miniB3D on mac to change the graphic mode (resolution, window, etc) without having to reload everything :)

The problem was not only enabling glShareContexts, but also I forgot my function that resets the video context was calling 'clearworld' :P~


ima747(Posted 2011) [#44]
Could you post your resolution switch for miniB3D in the miniB3D forum? would love to have some reference on hand for when I need to implement that.


SLotman(Posted 2011) [#45]
This is basically what I do:

I have added a var called B3DGraphics (Global B3DGraphics:TGraphics
on TGlobal type) which basically stores the result given by the Graphics command, so I can call CloseGraphics() when restarting.

(from TGlobal.bmx, Graphics3D function)
B3DGraphics = Graphics(width,height,depth,rate,GRAPHICS_BACKBUFFER|GRAPHICS_DEPTHBUFFER|GRAPHICS_ACCUMBUFFER)


Then it's a matter of opening a new video mode, and that's it!

CloseGraphics(TGlobal.B3DGraphics)
EndGraphics()

Graphics3D ScreenWidth,ScreenHeight,ScreenBpp, WindowMode


sorry for not posting the full code I use, because it's all tied up with several other things I've been doing, and would only clutter the simple code above :)

Last edited 2011


ima747(Posted 2011) [#46]
Do you need to explicitly close the graphics before calling EndGraphics()? I though EndGraphics() did that too...

Thanks for the walkthrough!


Gabriel(Posted 2011) [#47]
The question is if they stopped after my Command-Q failure or test all the other things on their checklist and I'll get more this time round. I hope not...

I'm assuming it's late and you've already resubmitted now, but my experience with Apple has been that they report all of the problems they find. They don't stop after the first one. That's only my experience, and it's perfectly possible that some testers are less diligent than others.


Cartman(Posted 2011) [#48]
So my first one made it through. Majestic Forest just went live in the app store today. Now waiting on the poker game. You can find it in the app store, but it's not searchable through itunes yet. Here's to many new sales. :)


jhans0n(Posted 2011) [#49]
My second one is out there now too. NameGen is a name generator for creating fantasy and sci-fi names. It generates names for Elves, Dwarves, taverns, spaceships, magical items, and more. It will also speak the names to you so you can hear what they sound like.


Cartman(Posted 2011) [#50]
My second game was rejected yesterday. They said it crashed. Sigh. Back to the old drawing board. :)


SLotman(Posted 2011) [#51]
I'm still waiting for them to verify my company info... over a week now :(


OscarBraindeaD(Posted 2011) [#52]
@SLotman
Please, can you say what company info they need (it's legal info about ICON Games?)
I'm thinking about upload, in a few weeks, two games to the store but with all the problems listed here and there I'm very confused...

Thanks in advance.


SLotman(Posted 2011) [#53]
I just filled the initial form - they didn't contact me or asked for anything yet... :(


OscarBraindeaD(Posted 2011) [#54]
Thanks for the info and good luck with the game!
Regards


ima747(Posted 2011) [#55]
Regarding the store I thought I'd just chime in with a few things:
There are essentially 2 classes of developer, personal or business. I have 2 business accounts through some of my projects (iOS and Mac on one, and the other is just iOS) and one personal for myself (just iOS currently but I'll be upgrading once I have something to post personally).
Personal accounts require very little to set up. Your SSN, a couple I agree to everythings, then you have to set up your banking info and agree to a few more things. Assuming you have the bank ready to go (and that's assuming you arn't going for just free stuff which doesn't require any banking info at all), it takes a day or 3 for them to activate EVERYTHING if I recall correctly.

It's a totally different can of worms if you setup an account for your business. You have to wait for them to request things, then fax them over, wait for them to process, possibly fax some more, maybe make a call, a few emails, etc. on top of everything you have to do for a personal setup. The first business I set up took about a week and a half, the second is in it's 3rd or 4th week (thankfully I don't have to handle the communications on that one) and still isn't active yet...

Plan around those delays when you sign up! you can't just drop 99 bucks on your credit card and 10 minutes later your app is on the store. There's delays at every point (not even touching on review times...).

It's a huge hassle, but it's a one time thing, renewal of your account is just a charge and they warn you months in advance so there's little risk you'll lapse.

Good luck, stick with it! None of our pay stuff for the mac store is through review yet, but the free downloads have been VERY encouraging so I think there's some money to be made.

And one more reminder, VET YOUR APP INTERNALLY BEFORE SUBMISSION! Make sure you've read up on the requirements, like where you're allowed to store things. Waiting potentially weeks to get rejected and have to wait all over again for something that could have been avoided is all on you as the developer :0) There's plenty of stuff that will fall through the cracks and you can't help in the real world, but there's a lot of prep you can do to save yourself some serious time.

Totally anecdotal here, but it seems that the fewer problems you historically have (less rejections) the faster they seem to accept your future submissions, and updates etc. I have nothing to back that up but my own experience which may just be coincidental but it would make sense for them to have some sort of prioritization other than first come first serve... likewise I think the more downloads you get bumps you up the que slightly (for updates at least, possibly overall as a developer as well).


SLotman(Posted 2011) [#56]
Yeah, I subscribed as a company... since I didn't get any calls, emails or any request, it will probably take forever. Oh, well :(


ima747(Posted 2011) [#57]
You can contact them and see what's up. Just heard that they timed out the pending application because the person in charge of the setup took to long to get back to them... Quite annoying.


Grey Alien(Posted 2011) [#58]
Congrats Cartman and jhans0n!

Both my games are out now. Holiday Bonus a couple of weeks ago (selling pretty crap though as it's so out of season) and Oz withing the last couple of days. Oz actually go rejected a second time because the exe name was Oz and the game name on the store was The Wonderful Wizard of Oz. This is mentioned in their docs, I just failed to take it in. It also answers my question about if they tell you about everything that is wrong when they reject your game, no they don't always do that, otherwise they'd have told me about the name thing before.


jkrankie(Posted 2011) [#59]
I put another one up too! http://itunes.apple.com/gb/app/bullet-candy-perfect/id422298000?mt=12

As an experiment, i didn't add fullscreen switching when in game, only in the menus. So there you go!

Cheers
Charlie


ima747(Posted 2011) [#60]
Gratz. They tell you about all the things they notice, but they may stop looking after the first thing, so it's not usually a complete list (assuming more than 1 problem). Obsessive attempts at digesting the rules and applying them are your best bet, but things will slip through both your filter and occasionally theirs. Just budget LOTS of extra time for waiting and re-submitting and do your best :0) Hoping your sales pay off all!


Grey Alien(Posted 2011) [#61]
Congrats. yeah it's pretty much 2 weeks every time I submit.