My App finally was shipped: http://itunes.apple.com/app/weiqi2go/id543435551?mt=8
Following are lessons I learnt over the final stage:
1) I developer-rejected my submission close to a dozen times for the issues around network reachability, here first you need to be able to detect whether network is available, second you need to be able handle very slow 2G network. and one key point here is you should never use synchronous network calls instead make async calls and always set a time out.
2) Test, test, test and perhaps seek help from profesisonal testers. Ideally write up the functional requirements and/or user guide before testing, they will make tester life easier and helps have all points checked.
3) Prepare videos along the way for marketing the app down the road-as most app review sites such as 148apps requires you to provide videos. I also found shooting such videos is quite helpful to your QA effort. And if you want to put your video on YouTube, remember to limit you video under 100M, YouTube will remove your upload if it is "TOO LONG".
4) Keywords, The English App Store allows 100 character max keywords, you can NOT changed after the app released until you add another version, pick them carefully and make sure all your audience are covered if you got a global audience, at first while I had keyword "baduk"(korean name of Go), I didn't put in its korean spelling "바둑"-I wonder which one Koreans would use to search App Store, best way for sure is to include both keywords so no matter which keyword these international audience use they will always find your app!
P.S. despite I developer-rejected my submissions some 10 times, the time my last submission spent in the 'Wait For Review" queue was 10 days exactly the average, unlike what some people wrote in a blog, saying if you rejected you app many times you will have to wait even longer than normal-that blog article for sure added me some additional stress during my wait.
Saturday, August 18, 2012
Friday, July 6, 2012
When you created a distribution provision profile, you need to selected at least ONE device
Apple's provision portal is very misleading on this one, if you do NOT selected any device, NO provision profile will be generated!
Tuesday, July 3, 2012
EXC_BAD_ACCESS error and NSTimer, and invalidate!
For almost 1 day and half I have been troubleshooting an odd situation where after my code that stops a NSTimer object, the application could crash mysteriously.
After combing sands over and over and over, I realized the crash was not in the code where I kill off the timer. Soon after reaching this conclusion I found the cause, and one reason it made it so hard to find this error was that even after you sent "invalidate" to a NSTimer object(according to Apple docs, invalidate remove the timer from run loop also cause the timer to be released!), your timer event handling code STILL could be called!
Why cannot Xcode point us more closely to where in the code the exception or "error" occurred?!
After combing sands over and over and over, I realized the crash was not in the code where I kill off the timer. Soon after reaching this conclusion I found the cause, and one reason it made it so hard to find this error was that even after you sent "invalidate" to a NSTimer object(according to Apple docs, invalidate remove the timer from run loop also cause the timer to be released!), your timer event handling code STILL could be called!
Why cannot Xcode point us more closely to where in the code the exception or "error" occurred?!
Friday, June 22, 2012
A couple iOS implementation tips
First tip, inside UITableView, if you need to change the background of a row, you need to do so inside the willDisplayCell delegate instead of cellForRowAtIndexPath:
Second tip, if you need to organize a group of files inside a subfolder under Resources, make sure you drag the folder from the Finder into Resources inside Xcode, and ALSO make sure you check this option:
Second tip, if you need to organize a group of files inside a subfolder under Resources, make sure you drag the folder from the Finder into Resources inside Xcode, and ALSO make sure you check this option:
Monday, June 18, 2012
To the Device and Beyond?
Just deployed my code to my phone, didn't expect it to work right away but wished to have some pleasant surprises, no, there were issues more than one, and it made me scratching my head wondering.
As you could see on the device the background image for the game board was not rendered as in the simulator, also the image for one of the button was not rendered either........
After digging around, I found the issues:
As you could see on the device the background image for the game board was not rendered as in the simulator, also the image for one of the button was not rendered either........
After digging around, I found the issues:
| 1)the iPhone simulator is NOT case sensitive but the device is case senitive |
| 2)earlier I used initWithFormat to get the path to the background image, it worked in the simulator but failed on the device, I replaced that with stringByAppendingPathComponent, and now it is working both in the simulator and on the device. |
Thursday, June 14, 2012
initWithContentsOfURL and encoding
In the pictures below you could see the Chinese Characters were not displayed properly, it turned out I had to specify encoding NSUTF8StringEncoding when calling the method initWithContentsOfURL.
And the default encoding if no encoding specified? ISO-8859-1 encoding...........
Friday, June 8, 2012
Performed static analysis of my objective-c code and fixed reported issues
Memory leak is the biggest headache for developers coding for iOS 3 and iOS4 devices, after using the static analysis tool of Xcode to identify the possible issues and fixing them, I found the tool to be quite helpful in improving your code. I reduced the possible issues from 110 items to just 22.
And about half of these actually from the RegexKitLite regular expression library I used, and after looking closer, the potential issues reported there were already looked into and could be "safely ignored".
This process not only improves your code quality and builds you confidence, also helps you understand the iOS memory management better.
Friday, May 4, 2012
UIActionsheet Button not working issue
The lower portion of the buttons were not working when I used code like:
[actionsheet showInView:self.view];
It turned out that was because I have tabBar in that bottom area of that View, after I changed code to following it started to work as expected:
[actionsheet showInView:[UIApplication sharedApplication].keyWindow];
[actionsheet showInView:self.view];
It turned out that was because I have tabBar in that bottom area of that View, after I changed code to following it started to work as expected:
[actionsheet showInView:[UIApplication sharedApplication].keyWindow];
Tuesday, March 13, 2012
Wednesday, February 29, 2012
Subscribe to:
Posts (Atom)








