7 Minute Body

I have always been interested in working out and keeping myself fit. Even now I spend 6 days a week exercising which includes running, swimming and playing cricket. Actually, I am running a 10K on October 25 and a Half Marathon in January. In order to prepare for the marathons I have used a variety of apps which, included Nike Running, 7 Minute Workout etc.

The major pain point of using one of the 7 minute workout apps on your phone or watch was that the experience was not seamless. You always have to glance at the phone or the watch to see the remaining time, next workout etc. I always thought it would be great to run the app on the TV so it is right in front of you and you don’t have any distractions.

When Apple announced the new Apple TV I was delighted and overwhelmed with joy. The new Apple TV allowed developers to write apps for the big screen. Apple was also kind enough to send a number of developers an Apple TV Developer Kit which allowed us to test and run our apps on the actual tv.

Today it is my great pleasure to announce the release of my Apple TV app called “7 Minute Body”. As, the name suggest the app is directed towards health and fitness. 7 Minute Body provides the user with an easy to use interface, smooth navigation and intense workouts. 7 Minute Body also allows the users to listen to the current workout and notify them when to change sides. 

I have been using 7 Minute Body app for several weeks and keeping myself in great shape! I am sure this app will help you stay healthy and fit! 

Download 7 Minute Body now from the Apple TV App Store!


How I Managed to Create 10 Apps While You Ate Your Lunch!

Most people know me as AzamSharp, the guy who runs the AzamSharp YouTube channel about iOS development. Occasionally, I speak at different conferences including 360iDev, Houston Tech Fest, 360iDevMini, Houston iPhone Meetup Group. Sometimes, I also publish iOS related articles in Code Magazine.

But, I bet no one is aware that my day job is not iOS development! At my day job usually I am working with Visual Studio, C#, ASP.NET MVC, JavaScript etc. To simply put my job revolves around Microsoft stack. This results in a very limited amount of time to learn, code and share iOS. 

Over the past 5 years I have been maintaining a very hectic schedule. I start my day by waking up at 4:30 - 5:00 AM in the morning. After a fresh cup of coffee I start working on my app! Since, I have only limited amount of hours before I have go to my work, I focus on very specific tasks that I want to achieve to move the app forward towards completion. Each pending task is reflected either on the sticky note or on my yellow notepad. It is not unusual that a single task might take couple of days for me to complete. Each task is also categorized by the version of the app! This makes it easier to set the app version feature set.

The story of the tortoise and the rabbit is a clear illustration of my iOS life. Just like a tortoise I move slowly towards the finish line. Each day I clear hurdles and make small progress towards my goal. The drive behind this madness is passion. Just like the human spirit it is hard to kill passion.

At present I have been able to publish 10 apps to the App Store. My app "Vegetable Tree - Gardening Guide" was even featured by Apple and is still considered the best vegetable gardening app on the app store. This personally made me very proud because it took me a long time to finish that app! But in the end just like a slow moving tortoise I managed to pass the finish line.

This post is for all the developers who are working part time on their passion projects. I just want to tell them that yes it is possible to publish apps even if you work 45-60 minutes a day. 

360iDevMin Recap

360iDevMIN is an iOS developers conference held in heart of the beautiful city of Greenville, South Carolina. The "MIN" stands for mini, as compared to the 360iDev conference in Denver, CO. The great thing about a smaller conference is that it is very easy to interact with each other and if you have further questions you can always catch the presenter later.

People from all over the United States came for this conference. We even had Juliana came all the way from Brazil to educate us about accessibility in iOS. Juliana's talk was an eye opener as none of the attendees were implementing accessibility in their applications. Jay Thrash session on how to implement and change your user interface based on the device and orientation was also a great session. Jay showed how easy it is to use traits and size classes to create a new interface for iPhone 6 Plus Landscape mode. Melissa talked about new features in Swift 2.0, which is definitely going to help me write my next Swift 2.0 article for Code Magazine. 

I was also fortunate enough to give a talk about iBeacons at the 360iDevMIN conference this year, which was well received. Hopefully, we will see iBeacons more streamline in the industry. The 360iDevMIN was even mentioned in the local Greenville paper. 

Apart from the awesome sessions, the beautiful city of Greenville had lot to offer. The Falls Park on the Reedy is an absolute must attraction if you are in Greenville. The stream of water at the Falls Park follows the infinite trails around the park and makes the experience surreal and magical. 

Overall, everyone who attended 360iDevMIN had an amazing experience and I can't wait to come back next year and learn new stuff from really smart people!

Celebrate your App Launch!

I started developing for iOS in July 2010. My first app ABC Pop was created in 7 days without any prior knowledge of iOS development. On the 8th day I submitted the app to the App Store and started thinking about my next app. I never took the time to take a step back and reflect all the hard work I have done in creating, launching and marketing the app. It felt that I had no connection with the app and it was a just a mirage, which faded away with time. 

I continued the tradition of not celebrating the launch of my apps even when I invested a lot of time and hand work for their development. Vegetable Tree - Gardening Guide , which is considered the number one gardening app on the App Store was also the victim of silent celebration. Even when the Vegetable Tree was featured by Apple I never bothered to take a break and enjoy the moment.

At present I am working on an Apple TV app which I plan to release on the launch day of Apple TV, sometime late in October 2015. This time I intend to break my bad habit of not celebrating the launch. Also a celebration does not mean a 7 day cruise to Bahamas, but it can as simple as a chocolate cake or a family dinner at a nice restaurant. 

So, the next time you launch an app make sure you take a minute to enjoy the moment and reflect back on all the hard work you have done in creating a master piece! 

Yikes! I deleted the Objective-C Bridging Header

I have read countless posts where developers are stuck after deleting their Objective-C Bridging Header file. The bridging header basically provides a way for Swift code to call Objective-C code. If however you delete the bridging header by accident then your app will NOT compile. The reason it does not compile is because the app is still looking for that bridging header.

You can easily fix that by removing the Objective-C Bridging Header entry from the Build Settings.

Hope it helps! 

Swift Extensions Lacks @IBDesignable And @IBInspectable

@IBDesignable and @IBInspectable allows the developers to view their live rendering of their custom  controls. Recently, I had the need to make the rounded corners for the UIButton control. I thought instead of making a subclass of UIButton why not utilize the power of extension methods. 

Here is the implementation: 

import UIKit

extension UIButton {
    public var cornerRadius :CGFloat {
        set { layer.cornerRadius = newValue }
        get {
            return layer.cornerRadius

Simple! The new property cornerRadius even appears in the Xcode properties window where I can adjust it. Unfortunately, the changes to the cornerRadius property are not rendered in real time but only when you run the app. 

Upon further investigation I found out that currently, the @IBDesignable and @IBInspectable live rendering is only supported on custom controls using subclasses. Hopefully, this feature will be extended to the Swift extensions in the future. 

Should You Learn Objective-C?

At WWDC 2014 Apple unveiled their new programming language, Swift. Swift language is a massive leap forward from its predecessor, Objective-C. Swift is a modern language which inherits many concepts from other popular languages including Go, Java, C#, Ruby etc. From the very start Apple made it clear that Swift is the path moving forward. At WWDC 2015 almost all of the sessions were delivered in the Swift language. 

At this point a common question on everyone's mind is that should I even learn Objective-C. Before answering this question with a simple YES or NO let me tell you my experience in development.

I have been developing professionally for more than a decade. During those years I worked at around dozen different companies ranging from oil and gas to health care. In those 10 years I can only recall couple of occasions where I worked on a *greenfield project. In all the other instances I was either fixing bugs or adding new features to the existing code base. Just last week I fixed some bugs on an iOS 4.0 application. 

The point I am trying to make is that although it might not be impossible to work on a brand new greenfield project, it is quite rare. This means most of the time you will be digging deep into the old codebase to either fix a bug or add a new feature. In iOS development this means you will be dealing with a lot of Objective-C code and which will be around for several future years.

So, to answer your question that whether you should learn Objective-C?


*greenfield project means a brand new project where no lines of code has been written.

Evaluating Ionic Framework!

For the last couple of days I have been evaluating the Ionic Framework. Here are my thoughts: 

1) Clean Look: 

Ionic Framework looks very clean and slick. The developers behind Ionic has certainly spent the time in making sure that the Ionic look matches the iOS flat layout and also material display for Android. 

2) Documentation is Limited: 

The documentation on Ionic website is quite limited and most of the examples do not have any screenshots. Documentation is the life and blood of these small JS frameworks. The time investment in the framework becomes useless if no one knows how to use it. 

3) Community is Small: 

Ionic community is not that large so if you are stuck with a problem then you will find hard to get some help. Since, it is a quite new framework it is understandable that the community is relatively small. 

4) Steep Learning Curve: 

Ionic has a steep learning curve which becomes steeper with poor documentation. An example would be the tag <ion-nav-view> which is an integral part of the framework but it is only mentioned very briefly through the documentation. 

5) Performance is decent

The performance of the pages created in Ionic is pretty decent but they are no way near the native implementations. You can clearly notice the lag in some of the controls like modal etc. But on the other hand it is far better than any other mobile website framework. 

6) Failing Silently:

This reminds of the Sencha framework which also failed silently. Sometimes your code will not work and you will never know what happened. I believe Ionic near better routes validation and better core framework to warn users of the potential problems in their code instead of silently failing.   

7) Angular Support

Since, Ionic utilizes the AngularJS framework it has to keep up with all the changes. I believe the current version of AngularJS used in Ionic is 1.3.13 while the current version of Angular is 2.X. 

In the world of mobile website frameworks Ionic is among the best and definitely worth checking out if you are building mobile web applications. For me I will continue my search! 


Evaluating Xamarin

For the past couple of days I have been evaluating the Xamarin framework. Here are my thoughts:    

Storyboard Editor: 

Xamarin Studio Storyboard editor is quite slow as compared to Xcode. First, I thought that this might be on the first launch only but the slowness persisted after subsequent launches. Another problem I noticed immediately is when you are zoomed out to and click on any of the Storyboard scene then it selects "view" by default instead of selecting the "view controller". This really bugged me since when I am in zoomed out view I want to assign a custom class to the view controller instead of tinkering with the view. 

The Storyboard designer feels in a very fragile state. There are a lot of occasions where I was not able to delete the existing scenes on the designer. I also noticed that there is no way to select the segue from the designer. You have to expand the "Document Outline" to select the segue.  The Xamarin Studio also crashed multiple times after my Mac woke up from sleep. 

Auto generated Code Overriding Custom Code:

In Xcode when I add a custom UITableViewController class I don't immediately assign that class to my view controller in Storyboard. I usually write some code in my custom class and then finally when I am satisfied with the code I assign the custom UITableViewController class to the scene in Storyboard. I tried to do the same thing in Xamarin and unfortunately, that kicked in auto generated code which wiped all the custom code I wrote in my custom UITableViewController class. The workaround is to use the UITableViewController template for your custom table view controllers. 

One to One Method Name Matching .. Not Exactly: 

In the native implementation of the UITableViewDataSource protocol there is a method named "cellForRowAtIndexPath". If you try to find this method in Xamarin implementation it will yield no results. This is because in Xamarin it is called "GetCell". Now, I do agree that GetCell is a much better name but when you are reflecting another API in your framework you should not randomly name methods as you please. UITableViewDataSource's GetCell was easy to spot since I am quite familiar with it but what will happen when I am in an unknown territory then I will be sent on a wild goose chase to hunt down the equivalent method name in Xamarin.    

Consuming Third Party API:

In the native world if I have to consume some open source API then I simply copy and paste the source code in my own project and be done with it. Of course if I am feeling adventurous I can also use CocoaPods to manage my dependencies. In Xamarin  consuming existing Objective-C and Swift API's is not as simple. Check out the following link which explains all the steps you need to take to consume open source native API's implementing in Objective-C or Swift. 


Code Sharing:

One of the good features of Xamarin is that you can write your service layer entirely in C# and then consume it from iOS or Android application. Code sharing in Xamarin really depends on per app basis. If your service layer is composed of complicated objects then your code sharing percentage will be high. In my case the services are implemented in C# and returning JSON objects. So, yes the consuming party which is iOS and Android application should have their own custom code to iterate and populate their own custom objects. Once, again depending on your domain model it can be complicated or simple.


Xamarin has a large community but when compared to the native iOS community it is still very small. Community is also an important factor when choosing a product because if you are stuck on some issue or need help then you are more likely to get help from a larger, move active community rather than the small community. 

Bottom Line:

Xamarin is a good choice if your background is in C# and you don't want to either learn or train your team in the native Objective-C or Swift. There is also a code sharing aspect which really depends on the size of your app. For me Xamarin still has a long way to go before I use it in my application. I also like to test out the brand new frameworks which Apple puts out in Beta builds which are usually not available on Xamarin on day one.

Houston Hackathon Recap 2015

The city of Houston hosted its largest Hackathon on May 16 - 17 2015. The idea of the hackathon is to build something exciting, practical and useful in just 24 hours. People from many different skill sets attending the hackathon ranging from developers, artists, public service, Houston Police Department. 

I was fortunate enough to attend the hackathon and represent "Blinds.com".

Before starting the hackathon everyone was given an opportunity to pitch their project. I already had project in mind but was also interested in finding out if I can help anyone else. Houston Police Department project caught my attention which required a mobile app for different inquiries. 

I connected with the officer who introduced me to the project and then I started on the implementation of the iPhone app.

The project was completed on before time and you can view it on ChallengePost. 


I also worked on another project which involved iBeacons. I pitched this project for the Houston Museum district and how they can improve the interactions inside the museum using iBeacons.  

You can also check out the video of this project using the link below: http://challengepost.com/software/houston-museum-ibeacon-enabled-tour-iphone-application

After the final submission each team was given 3 minutes to present the project. After judges reviewed all the submissions and the presentations they announced the 3 best and the most practical projects. 

I am very proud to announce that our Houston Police Department App was one of the 3 winners. 

All in all it was great fun and very well organized. A big thanks go out to Jeff Reichman and his fellow organizers for making this event possible.

See ya next year! 

How I Gained 5X more Downloads for my App Using Twitter Ads

In the past I have used many different mediums of advertising for my app "Vegetable Tree - Gardening Guide". This included Skippy's Vegetable Garden, Garden Betty and Veggie Gardening Tips. I had mixed result with all the above options but I was never satisfied with the result. 

After reading an inspiring and informative post from Ryan Nystrom "How I validated a Niche Idea for $32.19 with Facebook Ads" I decided to give Facebook Ads a try. After setting up the ad for my Vegetable Tree app on Facebook with their less than impressive system I waited to see the results. I did got a small hike and increase in sales and downloads but it was not too much to get excited.

During that time I called Facebook for help and they called me back in couple of days. The lady on the phone immediately told me that the Facebook ads are not good for me. She kept insisting that I should turn off Facebook ads and simply not use it. As you can expect it was very discouraging for me. I asked her why is she recommending that I should not use Facebook ads and she said because my daily budget is too low. I was spending $5 daily to test out the ads. She recommended to increase the budget to $50. Of course I said no since I was just testing out the ads and didn't wanted to spend a large amount. Anyway, after that the conversation did not go anywhere since she only wanted to help me if I increase by budget. 

After the expiration of my ads I decided to renew it again and try it out for one more week. Unfortunately, it was too much to ask for the broken Facebook ads system. There was absolutely no obvious way to duplicate the ad and change the dates. I scheduled a call with Facebook and they called me back in 2-3 business days. I explained them the problem that I just want to change the date of the new ad. It took them at least 10 minutes to find out how to change the dates and it was so complicated that I still don't know how. 

After being disappointed with Facebook customer service and their ad network creation tool I moved to Twitter Ads. Twitter ads was easy to setup, although they also did not have any functionality to duplicate and change the ad. I got around to that by constantly running the ads with limited budget. Once, the budget expires the ads were automatically shut off. 

Twitter ads are injected directly into the user's timeline which makes them more appealing!

The Twitter ad creation tool is simple enough to fit my brain and I came up with the following promoted tweets. I believe at present you can enable two promoted tweets within a list of your composed tweets.  

For my overall downloads and revenue I was using iTunes Connect and App Annie. After running Twitter ads for one week I immediately started seeing the impressive results. The downloads for my app increased by 5 folds. I also made it to #15 in the world in the Lifestyle category. I can also see the drop in sales when Twitter ads were  exhausted, which means I ran out of allocated funds. The graph below shows the ups and downs. 

The dips are mainly because the Twitter ads were off during that time due to insufficient funds. Overall I am extremely satisfied with the result and will be using Twitter ads for my future products.


Smart Watch in Real Life

Couple of years back I visited New York with my brother. Our plan was to see as much New York as possible in one day. We walked for almost 5-6 hours straight and visited tons of awesome places. It was a lot of fun, except that I missed almost 10-15 calls including notifications. Even though my phone was on full volume and vibration I was not able to detect anything in the crowded city. This was a concern to me since anyone of those calls could have been an emergency call. All of those missed notifications could easily had been avoided if only I was wearing my Smart Watch. The vibration on your wrist is more identifiable than a ping in the pants. 

I planned the whole New York trip which included all the places I wanted to visit and the routes that I will take. The only problem was that when going to a new attraction I had to consult/listen to my phone for directions. One way to avoid this was to wear headphones and listening to directions but that felt like a dorky idea. The Taptic engine in the Apple Watch is capable of providing Haptic feedback which can be extremely useful in the above scenario. Think about it! You are making all the correct turns without even consulting your phone. People will think you are a freaking genius!

Of course if you don't make any wrong turns you will never end up in a new location

Now, lets talk about Grocery shopping! Unlike many people I like to write down the items I need from the grocery store. I mean I write down on paper, you know paper that is made from trees. At this point you might be wondering why the hell would I not use my phone instead. There are few reasons. First, I hate when I have the grocery list on the phone opened and the phone keep locking itself. Of course I can go to settings extend the time of the lock screen but then after I have done grocery shopping I will have to remember to turn it back to the default settings. Another issue is that sometimes I have to lift items that require both hands. This means I have to first put the phone in my pocket, pick the item and put it in the shopping cart and then again take out the phone out of my pocket to shop for the next item in the list. The Smart Watch will eliminate this constant juggling and our hands will be completely free to pick up those heavy boxes of baby diapers. 

The only point of doing groceries is to prepare for the party. I don't usually go to that many parties mainly because I am not invited but if you are the host of the party a Smart Watch would be a God send. Consider hooking your phone on the dock which is connected to your surround sound system. Now, with smart watch you can launch your music app on your phone and play Norah Jones in your party.

Throwing a party requires fitness. That is why every morning I wake up and perform a 7 Minute Workout. There are tons of iPhone apps that can be used to perform the 7 Minute Workout but using an iPhone for workout is such a painful and broken experience. You constantly have to consult your phone when to change the workout and your focus is lost. I use my Pebble Watch for my morning workout which provides a seamless experience. The watch vibration to change the workout keeps me focuses with my workout progress.

These are of course just few real life uses of smart watch technology. I am really excited about the smart watch future and with Apple Watch just around the corner things will just get more interesting. 

CloudKit Dashboard Bug

I have been playing around with CloudKit API in iOS 8 and found a really weird and annoying little bug. If you select your target and then create a new custom container and then launch the CloudKit Dashboard by clicking the "CloudKit Dashboard" button, then instead of launching your new container it launches one of your random containers. 

This bug of course exists if you have multiple containers and most probably you will since there is no way to delete your custom containers. So before banging your head against the glass table make sure you have the correct container selected in the web user interface of the CloudKit Dashboard.  


I am happy to announce that I have joined Blinds.com as a Senior Mobile Developer. For those who are not aware Blinds.com is the world largest online blinds retailer and are owned by Home Depot. 

It is an exciting new opportunity and a new chapter in my life!