Sunday, 6 April 2014

Interesting Flappy Bird Tutorial using SpriteKit

Found this Flappy Bird Tutorial using SpriteKit and it works quite well.

Just need to add a few things: score display, music, sound effect, game over handling (currently the bird just disappeared when it died, which wasn't that user friendly), an icon...etc, and it's a fully functioning game!

Found a bug though, although collision detection was added for the ground, it wasn't added for the top of the screen. Which means I can actually fly above all pipes and keep traveling, scoring as many points as I like, until I felt tired, stopped flapping, and the bird fell to it's death...

Any way, it's great fun learning all the different techniques presented by the author. Wonder where did the author get all the images from?

Found another one here Flappy Bird tutorial, which has game score display, plus much better game over handling. Also, although I can also fly over all the pipes, I couldn't get any score as the bird didn't fly though the gap between the pipes. Looks like the second one is a better design!

Monday, 17 March 2014

iOS 7.1 devices not supported by XCode 5.02

Was thinking of upgrading my iPhone 5 to iOS 7.1, after last time's bad experience with iOS 7.0.6 killed my iPhone 5s, I certainly make sure my iPhone 5 been backed up first before the upgrade.

The upgrade went on smoothly, however, I got another issue after that. my XCode won't recognise the phone after the upgrade! As shown below, it shows the version of iOS is not supported! Checked my XCode and found it's on version 5.0.2, looks like need to upgrade XCode as well.

Checked App Store and found XCode version 5.1 available for download. Luckily, the upgrade was quite smooth too. Another issue resolved, back to my development work...

Wednesday, 26 February 2014

Damn! iOS Patch 7.0.6 killed my iPhone 5s !!

After successfully applied the 7.0.6 patch to my iPhone 5 over WiFi, logically I just apply the same patch to my iPhone 5s also through WiFi….. and then it died!!! WTF!

The screen shows this image to indicate I should connect to iTune (photo taken from iPhone 5 after connected the iPhone 5s to cable).

But in iTune it shows the device is in "Recovery Mode" and I was forced to restore the iPhone from backup. Wait, my last backup is more than 2 months ago, does this mean I am going to lose all my data/photo/apps in past 2 moths??!! NO!!!!!!!!!!!!!

Tried to stop it, but it wouldn't let me. Tried switch it off and on again, tried all buttons, holly crap! That's not very user friendly??!! Shouldn't you give me a chance to cancel the update and back up my data first??!!

Sucks! Really sucks! After various attempts I have no choice but to restore from that 2 months old backup and lost lots of stuff….. Stupid patch! And looks like I am not alone : see this link where lots of people having similar issue….

At least I learned a lesson, no longer trust any update from Apple any more, will definitely perform more regular backup - specifically before any update! Plus, may be update from iTune is safer than using Wifi!?

Thursday, 13 February 2014

Everyplay sounds very interesting, but my game doesn't use OpenGL?!

While studying descriptions of other games in App Store, noticed quite a few of them mentioned "Powered by Everyplay", for example, this one from Chasing Yello Friends:

"New video sharing powered by Everyplay, which allows you to show off your high scoring games!"

Did some study on it and quite surprised to find lots of popular games (bad piggies, hill climb racing, …etc) already using Everyplay to provide video play back and sharing function, this is amazing! Imagine your players can easily play back a video of the whole game (recorded while playing the game!) and then share it on the net!

They also have quite a few videos in YouTube, for example this one:

I am really excited about this and quickly signed up and downloaded their iOS SDK. Then I was stuck while trying to follow their tutorial  - the only iOS tutorial is using OpenGL but none of my game uses OpenGL and I don't have an "EAGLView" or "createFrameBuffer" method… Urh…. what now? Tried to search on the net and stackoverflow, but no one mentioned such silly newbie question like mine and I couldn't find any info about this in their Developer's FAQ section either.

Sent an email about this to their support area, let's wait and see what they say…

[Update 14/Feb/2014]

Happy valentines day everyone.

Bad news for me though, as I received email confirming what I don't like to hear - Everyplay requires OpenGL!! It would make every beginner's life easier if they can simply add this info to their FAQ...

Well, may be next time, as Everyplay still works with Cocos2D and Unity, may be can try later if there's any other future game using Cocos2D or Unity. Looks like they don't support Sprite Kit either…. Hmmmmm, that's another factor to consider while choosing between Sprite Kit or Cocos2d for future projects, as the function provided by Everyplay is really cool….

Tuesday, 11 February 2014

Getting closer to "seeing other players" in multiplayer game through Nextpeer

Have been working on improving my game with Nextpeer, and the most important feature I like to have, is to be able to "see other players". As shown in the sample screen below, the player can see the status of all other players, making the game more interesting and challenging.

One of the trouble I have is, although I was broadcasting data to the other players, I wasn't able to receive anything at all. Thanks to help from the Nextpeer support guys Alexander Mussafi and others, finally got it working by replacing the calls in AppDelegate to as below, and that solves the problem.
[Nextpeer initializeWithProductKey:NextPeerKey
                              andDelegates:[NPDelegatesContainer containerWithNextpeerDelegate:self

What? You game still doesn't have multiplayer capability?! Give Nextpeer a try, you will be surprised how easy it is, and it's free! Plus, with the excellent service from their support guys, any problem of yours will be easily solved in no time! Honestly, I spent a lot more time getting the painful AV Foundation Framework to function properly than adding multiplayer capability to my game. 

One major problem solved, now back to the next one in the long list...

Sunday, 9 February 2014

First encounter with "UI Automation"

Was reading this book called "Test iOS Apps with UI Automation" by Jonathan Penn and I have my first trial of "UI Automation" inside Instrument today and it was quite interesting.

For those who never heard of "UI Automation", it's the trace template called "Automation" inside Instrument. It records your inter-actions with the simulator or the device, and then it creates a JavaScript file which you can later execute and it will simulate all the recorded UI interactions with your iOS application. The idea is, you can then sort of perform quite a lot of "boring" test steps to see if your latest modification caused any problem. Apple has a user guide here, and there's also an example here although it's a bit old.

However I found there's some limitations when using UI Automation with my latest game.

Although it did pick up "most" of the actions I performed on the device: such as tap on a button, swipe up or left, ...etc, occasionally it will miss a few swipe actions - and this makes it quite annoying. As my game relies heavily on user interaction, the execution of the test script failed quite frequently - as if user didn't swipe properly, the following action to tap on an button will certainly fail! I then have to track down which line failed, and manually add the swipe action.

Probably for iOS applications that has fixed buttons/tables would have a much higher success rate with UI Automation. Still recommend everyone to have a play with it, as it might save you lots of time with testing!

Sunday, 2 February 2014

Another SpriteKit game example - also about fighter planes....

Found another nice SpriteKit game example here. However this time there wasn't much details/explanation provided like other tutorials, therefore I am having some difficulties understanding the code and the design/structure.

I like the way how everything been put in it's separate classes, and the way the 2 layers of background cloud been handled, and different emitters been used when the hero fighter was hit to show how serious the plane was damaged.

The only problem is, for some unknown reason, the hero fighter wouldn't move on my iPhone 5 (iOS7). As shown in images above, the hero fighter is always stuck in the middle of the screen.

According to the code, it's using "CMDeviceMotion" in CMMotionManager to detect the roll and pitch of the device to move the hero fighter - by using "physicsBody applyImpulse" method - which is another new thing to me.

Thinking it might be problem with the device, I tried the same game on my iPad 2 (iOS7), it crashed on the first run due to "Main_iPad" storyboard missing. After I copied over an empty "Main_iPad" storyboard from another project, it works. However, still can't get the hero fighter to move at all, very strange.

Compared with the "Airplane" tutorial mentioned before - which uses "CMAccelerometerData"instead, and works on both my iPhone 5 and iPad 2. Suspect there's some problem with the code somewhere. Already left a comment and will wait for the author to help. May be if I can find some spare time, will convert it over to use "CMAccelerometerData" as well…

[Update] 04/Feb/2014

Yes, I got it working!

All I did was:
(1) Remove the following line inside "FighterGameScene.m"

  CMMotionManager *_motionManager;

(2) In "FighterGameScene.h" add an import at the top

#import <CoreMotion/CoreMotion.h>

Then add the following line near the end (before @end). That is, basically move the declaration of "motionManager" from  "FighterGameScene.m" to "FighterGameScene.h"

@property (strong, nonatomic) CMMotionManager *motionManager;

(3) Finally, inside "FighterGameScene.m" change the following lines:

        CMMotionManager *motionManager = [[CMMotionManager alloc] init];
        if([motionManager isDeviceMotionAvailable]) {
            [motionManager setAccelerometerUpdateInterval:1.0/30.0];
            [motionManager startDeviceMotionUpdates];

            [motionManager startDeviceMotionUpdatesToQueue:[NSOperationQueue new] withHandler:^(CMDeviceMotion *motion, NSError *error)

to the followings, note that I also removed the 4th line "[motionManager startDeviceMotionUpdates];" as that seems to be duplicate and I don't see that extra line in other examples on the net and books.

        self.motionManager = [[CMMotionManager alloc] init];
        if([self.motionManager isDeviceMotionAvailable]) {
            [self.motionManager setAccelerometerUpdateInterval:1.0/30.0];

            [self.motionManager startDeviceMotionUpdatesToQueue:[NSOperationQueue new] withHandler:^(CMDeviceMotion *motion, NSError *error)

As below, now it works on both my iPhone 5 and iPad 2. Before the fix, can only reach top score of 800 as the hero fighter will die after a few crashes (since it can't move!). Now I can get much higher score than that, yeah!

To be honest, I don't really understand why this fixed the problem. And if you look at Chris Grant's comments on his post, it works on his iPhone 5/5s even without the change!?

Would be really appreciated if any of you can kindly explain why this simple change fixed the problem, why it was working on Chris' devices but not mine before the change? Is there some settings in Xcode or the phone that could cause this issue??

Monday, 27 January 2014

PhysicsDebugger - excellent tool to show object borders

Was playing around with physic bodies in iOS 7 Sprite Kit, and the biggest problem I have is working out when and why the objects collide with others. Tried to work out a way to show the debug borders of each objects but keep failing.

Finally found this excellent tool PhysicsDebugger by ymc-thzi today, it's free and really easy to use. I don't have CocoaPods so just by manually dragging in a few files, include a few lines and it works perfectly.

Sample screen below from my iPad 2 using demo project with some slight modification - just added a few more objects and labels. Strongly recommended!!

Friday, 24 January 2014

CS164 - Computer Science 164 Mobile Software Engineering from Harvard College

Happy New Year everyone. Got this information about free Mobile Software Engineering course from Harvard College, the link is at You will find tones of info, lecture slides, resources, projects, ...etc, go and have a look if you are learning iOS development, have fun!

Sunday, 1 December 2013

Slight improvement to the Airplane Tutorial by Jorge Costa and Orlando Pereira

Was learning Sprite Kit and found this excellent tutorial Build An Airplane Game with Sprite Kit by Jorge Costa and Orlando Pereira.

However, I don't quite like the idea of treating the plane, the plane shadow, the propeller and the smoke as 4 separate SpriteNode objects. As with every movement of the plane, you have to calculate and adjust the positions 4 times.

I made some adjustment to add the plane shadow, the propeller and the smoke all as child of the plane. This way, when the plane moves, all it's child will also move accordingly.

However there are some slight issues:
(a) the child SpriteNode will also scale accordingly when the main SpriteNode was scaled
(b) don't know how to adjust the "zPosition" of the child SpriteNode, they seems to just add on top of each order according to the order it's been added. So I have to swap the plane and the plane shadow, and add the smoke before the plane image so that the smoke is under the plane image, and add the propeller last. ==> This would obviously have some impact to the collision detection part if the shadow is too far apart from the plane, as they have now been swapped, and the collision has to be adjusted too.

The modified code in -(id)initWithSize:(CGSize)size as below, note that as I was using iPhone instead of iPad, you might have to change the parameters a bit to fit into iPad screen.

Best part of this change is, I can now remove all those codes for updating propeller/shadow/smoke position from the "update()" method and would definitely make the plane movement more responsive.

        float planeScale = 0.3;
        shadowDiff = 20.0;
        propellerDiff = 30.0;
        //background image
        SKSpriteNode *background = [SKSpriteNode spriteNodeWithImageNamed:@"airPlanesBackground.png"];
        background.position = CGPointMake(CGRectGetMidX(self.frame), CGRectGetMidY(self.frame));
        [self addChild:background];
        //add plane (now contains the shadow image instead)
        _plane = [SKSpriteNode spriteNodeWithImageNamed:@"PLANE 8 SHADOW.png"];
        _plane.scale = planeScale;
        _plane.position = CGPointMake(screenWidth/2, 1+_plane.size.height * 0.5);

        //add smoke
        NSString *smokePath = [[NSBundle mainBundle] pathForResource:@"Smoke" ofType:@"sks"];
        _smokeTrail = [NSKeyedUnarchiver unarchiveObjectWithFile:smokePath];
        _smokeTrail.position = CGPointMake(shadowDiff, -1*_plane.size.height);
        [_plane addChild:_smokeTrail];
        //add shadow (now contains the plane image instead)
        _planeShadow = [SKSpriteNode spriteNodeWithImageNamed:@"PLANE 8 N.png"];
        _planeShadow.position = CGPointMake(shadowDiff, shadowDiff);
        [_plane addChild:_planeShadow];
        //add propeller
        _propeller = [SKSpriteNode spriteNodeWithImageNamed:@"PLANE PROPELLER 1.png"];
        _propeller.position = CGPointMake(shadowDiff, shadowDiff+_plane.size.height*1.4);
        SKTexture *propeller1 = [SKTexture textureWithImageNamed:@"PLANE PROPELLER 1.png"];
        SKTexture *propeller2 = [SKTexture textureWithImageNamed:@"PLANE PROPELLER 2.png"];
        SKAction *spin = [SKAction animateWithTextures:@[propeller1, propeller2] timePerFrame:0.1];
        SKAction *spinForever = [SKAction repeatActionForever:spin];
        [_propeller runAction:spinForever];
        [_plane addChild:_propeller];

        [self addChild:_plane];

Tuesday, 19 November 2013

Can get some info about frameworks used by apps/games by looking at crash log

This might not be something new to you - I just realised by looking at the application/game crash log from "Device logs" of my iPhone inside XCode - Organizer, it actually shows some info about the frameworks used by the app/game.

Using "Clash of Clans" for example, it shows tones of frameworks as listed below....

0x30aed000 - 0x30af6fff AOSNotification armv7s  <e046709c9dcf397baf74853c24016e3d> /System/Library/PrivateFrameworks/AOSNotification.framework/AOSNotification
0x30bf7000 - 0x30c17fff AccountsUI armv7s  <3a3b90a83e713ca5a1791c0ece8a8fe1> /System/Library/PrivateFrameworks/AccountsUI.framework/AccountsUI
0x30c18000 - 0x30c1cfff AggregateDictionary armv7s  <d271b13eb5c03c8dacb154bb867e39f7> /System/Library/PrivateFrameworks/AggregateDictionary.framework/AggregateDictionary
0x30e1a000 - 0x30e2efff AirTraffic armv7s  <802751bb2f21301aaa846b7af966a257> /System/Library/PrivateFrameworks/AirTraffic.framework/AirTraffic
0x3119f000 - 0x311dcfff AppSupport armv7s  <f085b254be9c37d8ac8529e677ec6f73> /System/Library/PrivateFrameworks/AppSupport.framework/AppSupport
0x311dd000 - 0x31214fff AppleAccount armv7s  <19ffd6d5761b3242ae1666c065f67ec8> /System/Library/PrivateFrameworks/AppleAccount.framework/AppleAccount
0x31215000 - 0x3121bfff AppleAccountUI armv7s  <edd1dfbafed23374994143eefe8a45dc> /System/Library/PrivateFrameworks/AppleAccountUI.framework/AppleAccountUI
0x312b4000 - 0x312c4fff ApplePushService armv7s  <f773ba9a776e3551b2ff49f656afc9ec> /System/Library/PrivateFrameworks/ApplePushService.framework/ApplePushService
0x312fc000 - 0x31309fff AssetsLibraryServices armv7s  <b1da50d989d83bc58e0a932471d82c1d> /System/Library/PrivateFrameworks/AssetsLibraryServices.framework/AssetsLibraryServices
0x3130a000 - 0x31325fff AssistantServices armv7s  <08e48b48a3f8360fa244cd195b246d97> /System/Library/PrivateFrameworks/AssistantServices.framework/AssistantServices
0x31346000 - 0x31349fff BTLEAudioController armv7s  <616f9b31be713911a95796404a700035> /System/Library/PrivateFrameworks/BTLEAudioController.framework/BTLEAudioController
0x3134a000 - 0x3136dfff BackBoardServices armv7s  <851e6a2fca27396a901cadb1dd564305> /System/Library/PrivateFrameworks/BackBoardServices.framework/BackBoardServices
0x31370000 - 0x31375fff BluetoothManager armv7s  <c3ed062e34c03ec299d5779a97d2df24> /System/Library/PrivateFrameworks/BluetoothManager.framework/BluetoothManager
0x31376000 - 0x3139afff Bom armv7s  <f94bbc499d1a3c13a96614a0dc2a8e62> /System/Library/PrivateFrameworks/Bom.framework/Bom
0x313ad000 - 0x313f5fff BulletinBoard armv7s  <8f36dc0cc40a352e8734c81f6a4eccf2> /System/Library/PrivateFrameworks/BulletinBoard.framework/BulletinBoard
0x31439000 - 0x31441fff CaptiveNetwork armv7s  <d1b431c5e918342b95e6f89cae386684> /System/Library/PrivateFrameworks/CaptiveNetwork.framework/CaptiveNetwork
0x31442000 - 0x3151cfff Celestial armv7s  <7722147b1e0c33ad97282d0896cc9e3d> /System/Library/PrivateFrameworks/Celestial.framework/Celestial
0x3151d000 - 0x31528fff CertInfo armv7s  <9b2bb900f6873906a1bccc771e7609e6> /System/Library/PrivateFrameworks/CertInfo.framework/CertInfo
0x31529000 - 0x3152efff CertUI armv7s  <da95bee5fff13f049a1d5ca4c137f6e6> /System/Library/PrivateFrameworks/CertUI.framework/CertUI
0x315f7000 - 0x31617fff ChunkingLibrary armv7s  <9c0f1f682d4f38e5904eb1309f522e53> /System/Library/PrivateFrameworks/ChunkingLibrary.framework/ChunkingLibrary
0x31668000 - 0x31673fff CommonUtilities armv7s  <38e170cdcb583bc7b0918a9fd2d56189> /System/Library/PrivateFrameworks/CommonUtilities.framework/CommonUtilities
0x31674000 - 0x31678fff CommunicationsFilter armv7s  <aa60717294d63ce8b3d6ce3e62350308> /System/Library/PrivateFrameworks/CommunicationsFilter.framework/CommunicationsFilter
0x3170f000 - 0x3173ffff ContentIndex armv7s  <5022d05f42f33597847379f7669774b4> /System/Library/PrivateFrameworks/ContentIndex.framework/ContentIndex
0x31740000 - 0x31742fff CoreAUC armv7s  <be171f81db453c5680ee38b862362f83> /System/Library/PrivateFrameworks/CoreAUC.framework/CoreAUC
0x3174f000 - 0x317a3fff CoreDAV armv7s  <096f501a43b23126bccb0154954e66da> /System/Library/PrivateFrameworks/CoreDAV.framework/CoreDAV
0x317e4000 - 0x318e2fff CoreMediaStream armv7s  <444e19f3c43d32aaaad0f4050a876844> /System/Library/PrivateFrameworks/CoreMediaStream.framework/CoreMediaStream
0x3197c000 - 0x31986fff CoreRecents armv7s  <42095bc33bc8335a9398ff3cef2d3340> /System/Library/PrivateFrameworks/CoreRecents.framework/CoreRecents
0x319d4000 - 0x319f2fff CoreServicesInternal armv7s  <9c1c34613680340cb8b7ee3b8f12a08f> /System/Library/PrivateFrameworks/CoreServicesInternal.framework/CoreServicesInternal
0x319f3000 - 0x319f4fff CoreSurface armv7s  <c9312d9c3c473019835a71b356145c9a> /System/Library/PrivateFrameworks/CoreSurface.framework/CoreSurface
0x31a96000 - 0x31a9afff CoreTime armv7s  <2571d3d4300733e8965903ad4b55aac0> /System/Library/PrivateFrameworks/CoreTime.framework/CoreTime
0x31a9b000 - 0x31af5fff CoreUI armv7s  <40d696324564353e981f4f8ba480586f> /System/Library/PrivateFrameworks/CoreUI.framework/CoreUI
0x31af6000 - 0x31b43fff CoreUtils armv7s  <d07e0341714e369fba980e2e16702831> /System/Library/PrivateFrameworks/CoreUtils.framework/CoreUtils
0x31b44000 - 0x31b49fff CrashReporterSupport armv7s  <bc6c1698be993d0b9be9016cf2a89a8a> /System/Library/PrivateFrameworks/CrashReporterSupport.framework/CrashReporterSupport
0x31b4a000 - 0x31b80fff DataAccess armv7s  <c5260f7d4eac39f88bdcf08e06e8646c> /System/Library/PrivateFrameworks/DataAccess.framework/DataAccess
0x31d12000 - 0x31d27fff DataAccessExpress armv7s  <16e4c6b2b55e3644b4bcc9ef328153a8> /System/Library/PrivateFrameworks/DataAccessExpress.framework/DataAccessExpress
0x31d31000 - 0x31d47fff DataDetectorsCore armv7s  <fb76f79902b9331ca68166b93935564e> /System/Library/PrivateFrameworks/DataDetectorsCore.framework/DataDetectorsCore
0x31d49000 - 0x31d61fff DataDetectorsUI armv7s  <99d0ac88d77937248b0b339ebdc41dc9> /System/Library/PrivateFrameworks/DataDetectorsUI.framework/DataDetectorsUI
0x31d62000 - 0x31d65fff DataMigration armv7s  <167a3e3059a4355ab50f4b6f6cfa06a3> /System/Library/PrivateFrameworks/DataMigration.framework/DataMigration
0x31d6a000 - 0x31d6bfff DiagnosticLogCollection armv7s  <bd1b516e30aa337b92cb086936b93d6a> /System/Library/PrivateFrameworks/DiagnosticLogCollection.framework/DiagnosticLogCollection
0x31d6c000 - 0x31d86fff DictionaryServices armv7s  <f74a317e4672339babc6103959df3472> /System/Library/PrivateFrameworks/DictionaryServices.framework/DictionaryServices
0x31da2000 - 0x31dbffff EAP8021X armv7s  <460bfb71241d33ea9d9e191ec0cb69c7> /System/Library/PrivateFrameworks/EAP8021X.framework/EAP8021X
0x31dc8000 - 0x31dd3fff ExFAT armv7s  <0f2de9eb7f6139de8a51ba3eccbec8d2> /System/Library/PrivateFrameworks/ExFAT.framework/ExFAT
0x31de5000 - 0x31de7fff FTClientServices armv7s  <dc622c6e65533d199f7b20494596c202> /System/Library/PrivateFrameworks/FTClientServices.framework/FTClientServices
0x31de8000 - 0x31e11fff FTServices armv7s  <e1835ecd46eb3fc8945374ba7d5997aa> /System/Library/PrivateFrameworks/FTServices.framework/FTServices
0x31e12000 - 0x3222dfff FaceCore armv7s  <e767863dac8a3d798877de0a07624ba9> /System/Library/PrivateFrameworks/FaceCore.framework/FaceCore
0x32260000 - 0x32266fff libGPUSupportMercury.dylib armv7s  <fafbf480b296319f87b2d145be9f10fa> /System/Library/PrivateFrameworks/GPUSupport.framework/libGPUSupportMercury.dylib
0x32267000 - 0x3238afff AVConference armv7s  <1d5a1dcc150d3680952861338acba0f2> /System/Library/PrivateFrameworks/GameKitServices.framework/Frameworks/AVConference.framework/AVConference
0x32395000 - 0x323b5fff ICE armv7s  <2bc09e27ec753412aa5e6b7fceefcf7a> /System/Library/PrivateFrameworks/GameKitServices.framework/Frameworks/ICE.framework/ICE
0x323b6000 - 0x323b6fff LegacyHandle armv7s  <314936d6421a37df9b70846b6131630a> /System/Library/PrivateFrameworks/GameKitServices.framework/Frameworks/LegacyHandle.framework/LegacyHandle
0x323b7000 - 0x323bffff SimpleKeyExchange armv7s  <af5b06f4f438391196a457150d92fdbc> /System/Library/PrivateFrameworks/GameKitServices.framework/Frameworks/SimpleKeyExchange.framework/SimpleKeyExchange
0x323c0000 - 0x323d2fff ViceroyTrace armv7s  <1801427fbdc03d87afaf1067476774c7> /System/Library/PrivateFrameworks/GameKitServices.framework/Frameworks/ViceroyTrace.framework/ViceroyTrace
0x323d3000 - 0x323d4fff snatmap armv7s  <1a158d4c46703db09a051bab60a8025d> /System/Library/PrivateFrameworks/GameKitServices.framework/Frameworks/snatmap.framework/snatmap
0x323d5000 - 0x3244ffff GameKitServices armv7s  <4cc66bf7ea803f0997c7ef7f4ae183db> /System/Library/PrivateFrameworks/GameKitServices.framework/GameKitServices
0x32450000 - 0x3245cfff GenerationalStorage armv7s  <02b0c943f582373cbca3c0881d9b172c> /System/Library/PrivateFrameworks/GenerationalStorage.framework/GenerationalStorage
0x3245d000 - 0x325f5fff GeoServices armv7s  <84b62d5c98ac3914bf90cb356d0fe875> /System/Library/PrivateFrameworks/GeoServices.framework/GeoServices
0x325f6000 - 0x32604fff GraphicsServices armv7s  <963e9b456da7301cb752303a69f27d10> /System/Library/PrivateFrameworks/GraphicsServices.framework/GraphicsServices
0x32693000 - 0x32719fff HomeSharing armv7s  <deb893f5c4d93457aae2a2da054dbd35> /System/Library/PrivateFrameworks/HomeSharing.framework/HomeSharing
0x3271a000 - 0x32726fff IAP armv7s  <45b9fd8abac334e7adc617a75acbedb3> /System/Library/PrivateFrameworks/IAP.framework/IAP
0x3278c000 - 0x327c0fff IDS armv7s  <b0e8f70f8cc135d3a964e505323c8481> /System/Library/PrivateFrameworks/IDS.framework/IDS
0x3282d000 - 0x3283efff IDSFoundation armv7s  <4802c0e94fa2345195b318824bf0fbae> /System/Library/PrivateFrameworks/IDSFoundation.framework/IDSFoundation
0x328a4000 - 0x32930fff IMCore armv7s  <dafc2e13a75630178d29cbef36104aa3> /System/Library/PrivateFrameworks/IMCore.framework/IMCore
0x329b0000 - 0x32a0afff IMFoundation armv7s  <2e56e96350c733ed8fc9eb2dc065d718> /System/Library/PrivateFrameworks/IMFoundation.framework/IMFoundation
0x32a11000 - 0x32a13fff IOAccelerator armv7s  <cd8b2e85ad7e3c2a88266092ed2efd78> /System/Library/PrivateFrameworks/IOAccelerator.framework/IOAccelerator
0x32a14000 - 0x32a1bfff IOMobileFramebuffer armv7s  <c66dabcbbc533cfd9b28f2544b71b8cd> /System/Library/PrivateFrameworks/IOMobileFramebuffer.framework/IOMobileFramebuffer
0x32a1c000 - 0x32a21fff IOSurface armv7s  <c734ca27e347327ba351c6c6deab91f7> /System/Library/PrivateFrameworks/IOSurface.framework/IOSurface
0x32a6e000 - 0x32a73fff IncomingCallFilter armv7s  <8005f7c5feec39ae8a789d8e4fb5e537> /System/Library/PrivateFrameworks/IncomingCallFilter.framework/IncomingCallFilter
0x32a93000 - 0x32a9ffff Librarian armv7s  <83cb00b6af823b69b66fef04a2b921bb> /System/Library/PrivateFrameworks/Librarian.framework/Librarian
0x32aa0000 - 0x32ad9fff MIME armv7s  <95be12e7eeb63d12a06c3726fa32bc60> /System/Library/PrivateFrameworks/MIME.framework/MIME
0x32ada000 - 0x32b17fff MMCS armv7s  <a7bee5263b62370c82ac8a8125f8bc18> /System/Library/PrivateFrameworks/MMCS.framework/MMCS
0x32b20000 - 0x32b2bfff MailServices armv7s  <0039147aae90369c93ae40b573e4f1df> /System/Library/PrivateFrameworks/MailServices.framework/MailServices
0x32b5f000 - 0x32bd8fff ManagedConfiguration armv7s  <c51a5c4673783a4ea0be004f72de3035> /System/Library/PrivateFrameworks/ManagedConfiguration.framework/ManagedConfiguration
0x32bd9000 - 0x32bdafff Marco armv7s  <b76d261fa68b3008bf161559012e8a9a> /System/Library/PrivateFrameworks/Marco.framework/Marco
0x32bdb000 - 0x32c53fff MediaControlSender armv7s  <ff3941956263313fbba34757305dbcb0> /System/Library/PrivateFrameworks/MediaControlSender.framework/MediaControlSender
0x32c8b000 - 0x32c95fff MediaRemote armv7s  <5f6dc798e39b32c1ab4cf554668ce7ea> /System/Library/PrivateFrameworks/MediaRemote.framework/MediaRemote
0x32c96000 - 0x32caefff MediaStream armv7s  <20fb650d829f321ea9a9a1f48789015e> /System/Library/PrivateFrameworks/MediaStream.framework/MediaStream
0x32d13000 - 0x32de5fff Message armv7s  <27616c0cfe2c37abb470339564f221f8> /System/Library/PrivateFrameworks/Message.framework/Message
0x32dea000 - 0x32decfff MessageSupport armv7s  <d23da1866a543eec82065617c4bccad2> /System/Library/PrivateFrameworks/MessageSupport.framework/MessageSupport
0x32df8000 - 0x32e03fff MobileAsset armv7s  <5129443f89f937238576308808e62124> /System/Library/PrivateFrameworks/MobileAsset.framework/MobileAsset
0x32e27000 - 0x32e2ffff MobileBluetooth armv7s  <4d8e6011aca13a058fe6a7988ab3e1d4> /System/Library/PrivateFrameworks/MobileBluetooth.framework/MobileBluetooth
0x32e42000 - 0x32e49fff MobileIcons armv7s  <c0246ac9408734c29dc022efa399222a> /System/Library/PrivateFrameworks/MobileIcons.framework/MobileIcons
0x32e4a000 - 0x32e4dfff MobileInstallation armv7s  <a81c3c35bce5399d9f1308ff85aeaa73> /System/Library/PrivateFrameworks/MobileInstallation.framework/MobileInstallation
0x32e4e000 - 0x32e56fff MobileKeyBag armv7s  <6a7ed5c70f603339bb2b7fe8d3446d0c> /System/Library/PrivateFrameworks/MobileKeyBag.framework/MobileKeyBag
0x32e7e000 - 0x32e81fff MobileSystemServices armv7s  <708039aee4ec32899e4bbf817407798f> /System/Library/PrivateFrameworks/MobileSystemServices.framework/MobileSystemServices
0x32ea0000 - 0x32eabfff MobileWiFi armv7s  <59c298c093e63ac8ade746aa2ad0fe44> /System/Library/PrivateFrameworks/MobileWiFi.framework/MobileWiFi
0x32ee2000 - 0x33065fff MusicLibrary armv7s  <d32405f16040365e9fa95fc9c38d9014> /System/Library/PrivateFrameworks/MusicLibrary.framework/MusicLibrary
0x3311a000 - 0x3311ffff Netrb armv7s  <d5383e33b9c33ce39ed248c251c65848> /System/Library/PrivateFrameworks/Netrb.framework/Netrb
0x33120000 - 0x33125fff NetworkStatistics armv7s  <28a54cc525333d80a2d0e882a8e63243> /System/Library/PrivateFrameworks/NetworkStatistics.framework/NetworkStatistics
0x33126000 - 0x33143fff Notes armv7s  <edd5bd4898d23bb7bb64c93c41a36ec4> /System/Library/PrivateFrameworks/Notes.framework/Notes
0x33144000 - 0x33146fff OAuth armv7s  <4726833fd7d9357a8bbdd3487dcfa9c9> /System/Library/PrivateFrameworks/OAuth.framework/OAuth
0x3389e000 - 0x338d9fff OpenCL armv7s  <d7ea5f75fc103fe28436f1180ffa98a6> /System/Library/PrivateFrameworks/OpenCL.framework/OpenCL
0x33e7f000 - 0x33ea5fff PersistentConnection armv7s  <1137f9d6610337be8d208465d7caea23> /System/Library/PrivateFrameworks/PersistentConnection.framework/PersistentConnection
0x34009000 - 0x34181fff PhotoLibraryServices armv7s  <bb5b6bdd49e636fbbeac1e8fad45a41c> /System/Library/PrivateFrameworks/PhotoLibraryServices.framework/PhotoLibraryServices
0x342c0000 - 0x342edfff PhysicsKit armv7s  <8fa2fcdc554d387fa59ea688840048d0> /System/Library/PrivateFrameworks/PhysicsKit.framework/PhysicsKit
0x342ee000 - 0x342f1fff PowerLog armv7s  <fd8a01d8756038d786cecf1bb73d8881> /System/Library/PrivateFrameworks/PowerLog.framework/PowerLog
0x3436e000 - 0x343dbfff Preferences armv7s  <c3811c48b6e034269a96cbc5e2154fb6> /System/Library/PrivateFrameworks/Preferences.framework/Preferences
0x343dc000 - 0x34413fff PrintKit armv7s  <6bc12fe7b63739e79d7dba91a4f2560c> /System/Library/PrivateFrameworks/PrintKit.framework/PrintKit
0x34417000 - 0x3449efff ProofReader armv7s  <fb8e397448fe3cf7b6559afd96572cb2> /System/Library/PrivateFrameworks/ProofReader.framework/ProofReader
0x3449f000 - 0x344a9fff ProtocolBuffer armv7s  <5b4e6b3fda35338582564205c2124948> /System/Library/PrivateFrameworks/ProtocolBuffer.framework/ProtocolBuffer
0x344aa000 - 0x344dafff PrototypeTools armv7s  <20f984d5c691322792685361651c3ab0> /System/Library/PrivateFrameworks/PrototypeTools.framework/PrototypeTools
0x344db000 - 0x3454ffff Quagga armv7s  <f8c175157b1f3e598ea6036cb4e0fd97> /System/Library/PrivateFrameworks/Quagga.framework/Quagga
0x34550000 - 0x345f0fff Radio armv7s  <38a2966e2ae4324681fbbfc0b8ee7af4> /System/Library/PrivateFrameworks/Radio.framework/Radio
0x34654000 - 0x34679fff RemoteUI armv7s  <4202e143ebba3d489623c1fd39f26f2e> /System/Library/PrivateFrameworks/RemoteUI.framework/RemoteUI
0x3467a000 - 0x346fafff SAObjects armv7s  <4e06485d6c523afba3f2ffdb43ccff75> /System/Library/PrivateFrameworks/SAObjects.framework/SAObjects
0x347fb000 - 0x34823fff SpringBoardFoundation armv7s  <5cf83a537bea3247a2ebb5a2e73a1ef7> /System/Library/PrivateFrameworks/SpringBoardFoundation.framework/SpringBoardFoundation
0x34824000 - 0x34838fff SpringBoardServices armv7s  <07b50ddb252a3670ae27c994e345d32d> /System/Library/PrivateFrameworks/SpringBoardServices.framework/SpringBoardServices
0x34839000 - 0x34852fff SpringBoardUI armv7s  <6129f1073a913c30a4ffb1d88de9ef07> /System/Library/PrivateFrameworks/SpringBoardUI.framework/SpringBoardUI
0x34853000 - 0x3486afff SpringBoardUIServices armv7s  <061ba80c86f031ce99271a2f6b5b6a69> /System/Library/PrivateFrameworks/SpringBoardUIServices.framework/SpringBoardUIServices
0x34a4f000 - 0x34b67fff StoreServices armv7s  <64f930de40553f1b941468839bb35795> /System/Library/PrivateFrameworks/StoreServices.framework/StoreServices
0x34b68000 - 0x34b77fff StreamingZip armv7s  <51f10d7de8d33ac5af35f1dfdbe3be42> /System/Library/PrivateFrameworks/StreamingZip.framework/StreamingZip
0x34c16000 - 0x34c18fff TCC armv7s  <b14719f4f9213db6bf035e9dd349691c> /System/Library/PrivateFrameworks/TCC.framework/TCC
0x34c19000 - 0x34c61fff TelephonyUI armv7s  <e1c65c22bf4e35da8f15c332dce09ed8> /System/Library/PrivateFrameworks/TelephonyUI.framework/TelephonyUI
0x34c62000 - 0x34c83fff TelephonyUtilities armv7s  <452c156104483fc3aea85ebaf9f5c734> /System/Library/PrivateFrameworks/TelephonyUtilities.framework/TelephonyUtilities
0x34ff6000 - 0x3501afff TextInput armv7s  <abdd894319ef3742b7d8c75764e2279c> /System/Library/PrivateFrameworks/TextInput.framework/TextInput
0x35212000 - 0x35227fff ToneLibrary armv7s  <8e172e07ec7f3f2b86c20ee6fa3698cb> /System/Library/PrivateFrameworks/ToneLibrary.framework/ToneLibrary
0x35275000 - 0x35335fff UIFoundation armv7s  <b4d1d18af2023e42b8bc5bf94e134dd1> /System/Library/PrivateFrameworks/UIFoundation.framework/UIFoundation
0x35336000 - 0x3534cfff Ubiquity armv7s  <b898e996d6d637b38398e5345c0bb7d4> /System/Library/PrivateFrameworks/Ubiquity.framework/Ubiquity
0x3534d000 - 0x35350fff UserFS armv7s  <8cadaf260e5c331a98f0cbc94efbc6a6> /System/Library/PrivateFrameworks/UserFS.framework/UserFS
0x355b6000 - 0x356abfff VideoProcessing armv7s  <c23ab746c2df3a9fb3c2be4052f9ed33> /System/Library/PrivateFrameworks/VideoProcessing.framework/VideoProcessing
0x35755000 - 0x35772fff VoiceServices armv7s  <fcde59b5b6f43dd7b5b1b79b29a7b75f> /System/Library/PrivateFrameworks/VoiceServices.framework/VoiceServices
0x35795000 - 0x357bafff WebBookmarks armv7s  <4d200a2b0c84314f91326a90d439470c> /System/Library/PrivateFrameworks/WebBookmarks.framework/WebBookmarks
0x357d0000 - 0x3627efff WebCore armv7s  <7df88f9af79231758f97431994ad6be8> /System/Library/PrivateFrameworks/WebCore.framework/WebCore
0x3627f000 - 0x3633ffff WebKit armv7s  <2d9a513d87bd3c2d8de0098df694485c> /System/Library/PrivateFrameworks/WebKit.framework/WebKit
0x363cf000 - 0x363cffff WirelessCoexManager armv7s  <c73d16088bf0326bbe92177f2edfc04c> /System/Library/PrivateFrameworks/WirelessCoexManager.framework/WirelessCoexManager
0x363d0000 - 0x36473fff WirelessDiagnostics armv7s  <897da4b57a5c3d6aaa186c454371abf4> /System/Library/PrivateFrameworks/WirelessDiagnostics.framework/WirelessDiagnostics
0x3647f000 - 0x36485fff XPCKit armv7s  <b8f2a05eb58a3ea9ad4ec860abebacf9> /System/Library/PrivateFrameworks/XPCKit.framework/XPCKit
0x36486000 - 0x3648efff XPCObjects armv7s  <e7759ab9bb643390af3c2ac7ad96619d> /System/Library/PrivateFrameworks/XPCObjects.framework/XPCObjects
0x36632000 - 0x36655fff iCalendar armv7s  <25c772fc08cd33528e38dc8f845d53c4> /System/Library/PrivateFrameworks/iCalendar.framework/iCalendar

Friday, 15 November 2013

Any one planned to port their Cocos2D-iPhone games to Sprite Kit like me?

My "Where is it? - Smart Kids Edition" game was written in Cocos2D-iPhone V1.0x, and I got quite a lot of problems with every iOS version update.

Spent some time recently playing around with the new Sprite Kit from Apple, although it has the limitation for iOS7 only, I am quite surprise how simple and easy to use, and all the objects and concepts are quite similar to Cocos2D-iPhone (did someone copy something? I don't know...)

After I finished the current project, I will definitely try to port my game to Sprite Kit!

"Importnat" Update about Buzzdoes

Compared with the excellent service from the nextpeer guys, I have always been very unhappy with the slow service and support provided by buzzdoes.

Then this morning received this "Importnat" update email from buzzdoes which sort of explained why:

Dude, if you are closing down, shouldn't you be more careful with the spelling when making such an important announcement?

Is any one aware of any other framework/company also offering similar service? Please let me know, as  there's definitely a market for this area and there's lots of people like me who have to change all our apps/games..... Damn...

Friday, 25 October 2013

WTF, OS X Mavericks is free!?

Just upgraded to Mountain Lion for less than one month and learned that now OS X Mavericks is free and I can upgrade from 10.6.8, 10.7 or 10.8 directly to OS X Mavericks! Damn!

Monday, 7 October 2013

My MacBook Pro died!

The other day I was using my MacBook Pro on the train testing a few things on my iPhone 5 and suddenly it shuts down without warning. Tried to boot it up but wouldn't work at all. Thought it's the battery as it's about 2.5 years old and planed to try again when connected to power at home.

Later tested at home with power connected, still nothing. The small light on the power connector wouldn't even light up.

Holy crap! My MacBook Pro is dead! How can I live without you!!!

Searched the net and found a few repairers, some of them asked for $99 just for inspection and quote, that's quite expensive! Finally found iExperts - the company which fixed my iPad 2 last time, and booked for a free inspection at their city branch.

It was pretty quick, a guy called Patrick have a quick inspection and said one of the fuse on the motherboard had blown up and need to be replaced. The quote is $89, much cheaper than I expected and even cheaper than the price for an inspection in other shops!

After about another 20 min wait and it's fixed. I was so happy.

Patrick asked if I was using non-genuine Apple power adapter for the MacBook Pro, I don't as I only have the original Apple one that comes with the MacBook Pro. The only other thing I can think of is the cheap $2 lightning USB cable I bought from eBay - which was exactly what I used to connect to my iPhone 5 for testing when it died on the train.....WTF! Never know a $2 cable would cause that kind of damage to my $15xx MacBook Pro!

Since then, I won't use the cheap $2 lightning USB cable to connect to my MacBook Pro, will only use that for the windows boxes :-)  hope everyone don't make similar mistake like me!