Thursday, October 6, 2016

Submit your app to apple for development/testing


  • Create apple developer account(99$ per year)
  • Goto keychain access in MacBook. Goto keychain access->request certificate. Enter email id(aka apple developer email id) and a name and choose to save on disk and save the certificate.
  • Go to member center from https://developer.apple.com
  • Go to certificates section -> all. Click on '+' icon to create a new certificate, choose ios development and upload new certificate there.
  • Go to app identifiers and create new(from '+' icon). Choose explicit app id and need to provide unique bundle identifier from your Xcode project. If it's not unique, it will not accept.  You can choose all services that you like. 
  • Add new device. To get a unique id for the device, connect mobile/iPad with MacBook. Go to xcode->window->devices and choose your device to get a unique id. Add any name and unique id to add that device
  • Go to provisioning profile and create new for ios app development. Choose app id and certificate. Download provisioning profile. Double-click it and it will open your project in Xcode.(If it does not work properly, you need to restart Xcode and go to signing section of project in general tab and choose the profile or apple id)
  • Choose a generic device in ios simulator section. Go to product->archieve.
  • After archive is created, go to window->organizer and choose archive and export. (You can also export it for specific devices). This will create .ipa file and also create an ad-hoc distribution profile in developer member center. (In case, it does not create distribution profile, you can create it by yourself from apple's development center).
  • Click on upload app. This will upload the app to the app store for testing. It might take some time and you will get email notification of whether it was successful or failure with ways to fix bugs.
  • In case you need to fix bugs, follow the instructions on provided in the email. You need to change bundle version from Xcode before archiving it again and re-uploading it.

Using TestFlight:

  • Google iTunes connect and login with the developer account.
  • Go to myapps->add a new app. Provide same bundle id as used before. Other information can be random.
  • Go to users and roles from top-left navigation and add testers' apple id email there. They will receive an activation email.
  • Next, go to testflight tab and go to internal testing. Select app version(might be shown as processing for some time, you need to wait and refreshing). 
  • Next, select app, you might get the message of encryption. Tick yes yes and go next.
  • Then select users(which were activated in users and roles) and hit start testing
  • All activated users will get an email with instructions for testing.
  • They need to download testflight app on their iPhones and redeem the code provided in the email.
  • Once that is done, users will be able to download the app in their phones to test it! 
  • Wow. It's Done!!!


Monday, May 23, 2016

Cards of wild game

'World of balance' is a gaming solution which includes lots of single-player and multiplayer games. The theme of 'world of balance' is animals and their food chain and all games are conceptualized using that theme. The game lobby is used to login and interact with other players or join their game-rooms.

Cards of wild is part of bunch of mini-games from 'world of balance' game stack. Its a 2-player game where both players are given deck of animal-cards to play with. The cards can attack opponent's card as well as his/her tree('tree of life'). Each card and tree has specific health points and using animal food chaining rules one has to attack opponent. Whomsoever kills the tree, wins the game.

We have a game-lobby server which is common for all the games and Cards of wild has its independent server which receives all requests related to our game. We used unity as game-client and Java for server development. Our game runs on android devices as well.

Github wiki: https://github.com/worldofbalance/wiki/wiki/15.-Cards-of-Wild

Github organization: https://github.com/worldofbalance

Rules for playing Cards of wild: https://github.com/worldofbalance/wiki/wiki/15.-Cards-of-Wild#game-overview

Android apk: https://slack-files.com/T0MJR5JMN-F1A84GJ1Z-7e30545b88

Game demo(best viewed in full screen):


I was team-lead for this game as well as server developer. Main challenge for this game was to refactor existing code. 'World of balance' game-stack is developed over years by students taking multiplayer game development class. I sincerely appreciate their efforts to develop all the components of client and server and make it distributed. Especially card of wild(COW) had excellent class hierarchy in-place and I could totally understand developer's vision but lack of comments, documentation, version control system and Unity's limited debugging capacity made it difficult to grab at first. Also, each game did not have separate repo or folder and client files were scattered over different folders and repetition of same files made it even worse.

Client code was combined and server solution was independently working and that was a problem! Because server was independent, it had all common code like login repeated. So I had to merge it to existing repo for making it more manageable but still run it individually! My team-mates who were working on client side also had hard time with Unity.

At the end, it was a learning experience since I had multiple hats on my head. Apart from team management, their communication and meetings, I took initiatives in class for organizing server code or implementing simplified client-server communication logic so that other developers can also get benefits. We did pair-programming for hours with team-mates first time and it was fun. I took deep dive in gaming world this time and got to know how little things like colors or sound or placements of objects matters!