Your browser (Internet Explorer 6) is out of date. It has known security flaws and may not display all features of this and other websites. Learn how to update your browser.

Apple Watch is Time, Saved

The keynote is at 1pm today, which of course I’ll be watching LIVE! My boss forwarded me this article, which is an interesting read just hours before the keynote.


iOS 8 Adoption Hits 75%, Finally

Much slower adoption rate than iOS 7, but it’s getting there.


Swift is Not all Roses

My biggest impediment to learning Swift so far has been all the niggly little things I have to remember. Let me give you a couple examples.

Say I want to create a UIButton. You’d think the following would work just fine, right?

let button : UIButton = UIButton.buttonWithType( UIButtonType.Custom )

Nope, it’s not fine. buttonWithType() actually returns an AnyObject, not a UIButton. Beats me why, so I don’t remember that. So the correct code is actually the following:

let button : UIButton = UIButton.buttonWithType( UIButtonType.Custom ) as UIButton

Here’s another one:

for (name, object) in dictionary
let mySubDictionary = object as Dictionary<String,AnyObject>?

Nope, that doesn’t work either. What I actually had to do in one case is the following, and the error message didn’t help me understand why:

for (name, object) in dictionary
let mySubDictionary = object as AnyObject? as Dictionary<String,AnyObject>?

But the worst is figuring out when to use all those question marks and exclamation marks. While I understand the simple cases, the more complicated cases always confuse me. For example, why is the return type of “Bool!” considered an optional?

So yeah, I think Swift is great. But it comes with it’s own set of issues, that’s for sure.

Cool iOS 7 Concept Video

Lots of iOS concept videos created by fans contain a bunch of silly stuff. But this one has some cool things in it.


iPhone 5 Support in my Apps

Hey everyone. Today I am updating my first app for the iPhone 5. It is Beautiful Bucket List. It’s been a rather strange road getting this app approved by Apple. The first time I submitted this update to Apple, I sent the binary to Apple and waited and waited. When I got tired of waiting I went to, only for it to say I was missing one of my five screenshots. There was never a requirement to have all five before, so I dutifully submitted a fifth screenshot.

And then the waiting process began again. Normally, when your app is approved, you get an email from Apple telling you so. I got no such email this time around. My app was approved who knows when, and I only discovered it today when I again went to check out Apple iTunesConnect website.

So there you have it. I am releasing Beautiful Bucket List for iPhone 5 right now. The update should percolate through the internet and get to you pretty soon.

What about my other apps? I am working on both of them. My iBorrow update is almost done and I’ll be submitting it to the app store any day now. Kill Death Ratio needs a little more work because of the graphing feature. But I hope to have that update into the store soon enough. Thanks for your patience.


iPad mini Mini-Review

My boss bought me an iPad mini, and it arrived yesterday. This is my mini-review. It’s only mini because the iPad mini is… well… and iPad. So all the usual stuff is there. It runs all the same apps as a normal iPad. It comes with all the same apps pre-installed. Its part of the Apple ecosystem. Etc etc etc.

So where is this thing different?

Different from previous iPads is the fact that it uses a Lightning dock connector, like the iPhone 5. Many people have complained about the change, but I like it. It’s easier to use, smaller, and reversible!

I have the black iPad mini, and I really like the look of it. The backside isn’t the usual brushed metal look, but a black anodized metal kind of look, and its great. The build quality of the iPad mini is very good all around,and nobody would be ashamed putting this thing next to any other tablet. It just beats item all! And it’s so thin! And light! Can it be held in just one hand? Sure!

Even with all the iPad mini has going for it, the fact that it has a 1024 x 768 display instead of a retina one is a real drawback. I’m often reading the display and thinking that it would be so much better if it were retina. I can’t really understate this. It really annoys me. It’s a pretty big flaw on what is otherwise a perfect tablet. That said, if you’ve never owned a retina device before, and you buy a mini, you won’t even notice. This is a flaw for those of us that are used to the best display you can get, and notice the shortcomings of this one for that reason.

All in all I’m pretty happy with the mini. I want retina, but that’s not going to stop me from using it. It’s just too handy.


Nokia 900 Impressions

My day job lets me play with new gadgets sometimes. As an iOS developer, my boss always buys me the latest iOS gadget, so there’s an iPad mini in my future, so that’s cool. However, the company I work for is a mobile development company that serves markets other than iOS, so we get other gadgets as well. I have an Android phone, and recently my boss lent me a Nokia 900 to try out. I’ve never actually played with a Windows Phone 7.x device before, and all the vids and screenshots I’d seen had made me very curious to try out one of these devices. So here are my impressions.

I’ll start off with my second impression, because I want to start this with something good. I love the blackness of the screen. The front of the phone is mostly a black surface, but not all of that is the screen. But there is a lot of black in the Windows Phone 7.5 UI, and it tends to blend seamlessly into the black non-screen area of the phone. And I love that! It is an effect that totally beguiled me, and it think it’s very smart.

The first impression, though, of this device isn’t good, I have to admit. It is big, bulky, and heavy. The screen is only a bit bigger than my iPhone 5′s screen, and yet the device is much bigger in my hand. Not only that, but I was immediately confused by the plastic material the phone is made from. Confused? Well, you see, I’d read a ton of reviews of this phone and others by Nokia that uses the same polycarbonate (plastic) material, waxing eloquent about how it felt so high quality. My impression, and also that of my wife, is quite the opposite, it felt cheap. Holding a Nokia 900 in one hand and an iPhone in the other, the build quality of the latter clearly shines out.

Another blow against this phone is its low resolution screen. After getting used to using iPhones with retina displays for three generations now, going to a phone without that kind of resolution is a real disappointment. The Windows Phone 7.5 UI has lots of squares, sure. But there are also lots of circles for the buttons. And those circles don’t look so nice. The text, also, could look nicer with a better screen. The screen is vibrant, which is good, but low-res, which is bad.

I liked the fact that I could download free apps from the Microsoft app store without having to create a Microsoft account. I had logged into Xbox Live with my Xbox ID, so maybe that’s why. I don’t know. But I was downloading free apps to try, no problem. But speaking of free apps, the first time I tried downloading Microsoft’s YouTube app, the phone told me I couldn’t because of the region I was in. I tried it again later, and it worked fine. Weird. Also, the YouTube app is just a web app in a wrapper, which wasn’t very nice. Especially because there was a problem with it, and it displayed a blank band across the top.

I liked playing around with Windows Phone 7.5 because it was so different than the iPhone’s iOS. I’ve played with Android, and it seems to be a poor-man’s version of iOS. But WP7.5 is something truly different and unique. I appreciated that. It was fun to discover how this phone did things, even if sometimes the scrolling performance wasn’t so good, or that using the back button undoes some actions, which was really weird. At one point I set a profile photo of myself, and using the back button undid that. Not what I was expecting. But just like on the Android, I like the back button.

I know I did a lot of complaining, but all in all I found the device fun to use. I liked many things about it, like the Facebook integration. I just wish they could make the phone a lot less bulky and increase the display quality. I wonder if the Nokia Lumia 920 fixes those issues…


Learn to Let Go

When I first started development of Beautiful Bucket List (BBL), I had envisioned something totally different than what is available on the App Store today. The app I ended up creating is something elegant, simple, and easy to use (if I do say so myself). It wasn’t always that way.

My first app concept included just one screen for each goal. That screen had an area for a picture, and area for text, and a thermometer on the side, which would show your progress in achieving your goal. I envisioned the user sliding his finger on the thermometer to set the goal’s progress.

Today there is no thermometer. It was a bad idea. It took me a while to realize that, and I didn’t want to admit it at first. I just thought it would be cool, and my stubborn little brain didn’t see what a crazy idea it was. I mean really, what does a thermometer have to do with how complete a task is? Also, this app is for life-goals. Bucket list items. Those type of items don’t tend to have a progress. You go and do it. And it’s done. It’s not like someone will be pulling out the app as they’re skydiving, indicating how far it is until they hit the ground. In retrospect, it just doesn’t make much sense for the kind of app I was creating.

So I removed the thermometer, and it was the right thing to do. The app is much better for it. As I get older I get less and less attached to my ideas. I try to assess them on their merits. The fact that I thought of them and would like to hold on to them is having less of a hold on me. And that’s helping me to create better apps. Instead of clinging to the first idea I come with, I try to come up with more ideas, and see which is better. Many of you are saying “duh” to yourselves right now, but this is something that’s taken a while for me.

Just recently I came up with an app idea and spent about 20 hours developing the app, figuring out if it was even possible. Playing around with the technology, that kind of thing. After a while it dawned on me that, while cool, an app like this wouldn’t sell. So I stopped working on it, and am now developing a different idea. Bad ideas come in all sizes, from little features, to cornerstone features, to whole products. You shouldn’t be afraid to assess and dismiss ideas of any size.

That’s where I stand today. I’m working on a new app concept. I’ve already tossed out a bunch of feature and UI ideas. I’m applying everything I know, and even some stuff I don’t yet (see upcoming article). I think this will be the best app I’ve made so far. Time will tell.


Trying New iOS Tech

I’ve been developing iOS apps for about four years now. I have created many apps for my day job, and I have three of my own apps on the store as well. You’d think that, with all this time under my belt, I’d be an expert iOS developer, with expertise in all areas of iOS development. But that’s not true. I’ve developed a lot of apps that require the use of similar technologies and API’s within the iOS ecosystem. There are big gaping holes in my iOS development knowledge.

I noticed that trend a while ago, and have purposefully been trying to learn new iOS technologies as I go along to help fill those gaps. For example, I didn’t need to use CoreData in iBorrow, but I did anyway, just so that I could learn about it. It wasn’t detrimental to the product in any way, and I learned something new in the process.

For my next app I think I’ll try out storyboards. The work that I’ve done since that feature was introduced has mostly been incremental, though I think that I might have been able to use it for Kill Death Ratio. (Maybe i should have!) Starting a new app from scratch is an exciting time, however, and I think that this new app is perfect for storyboards.

I’ll tell you how it goes.


Swiping on a UITableViewCell

My Kill Death Ratio iPhone app lets you swipe on a cell in order to reveal an edit button and a delete button. I never liked how it worked in practice, however, because it was very finicky. You had to be very precise with your swipe, otherwise it would just register as a tap on the cell, and you would be brought to a different screen. Very frustrating. Through some research on, I realized last night that I was doing it totally wrong.

What I was doing before was to put a gesture recognizer on every UITableViewCell’s contentView. What I should have been doing instead was to put the gesture recognizer on the UITableView itself. Like so:

UISwipeGestureRecognizer * swipeRecognizer = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(onSwipeLeft:)];
[swipeRecognizer setDelegate:self];
[swipeRecognizer setDirection:UISwipeGestureRecognizerDirectionLeft];
[_tableView addGestureRecognizer:swipeRecognizer];
[swipeRecognizer release];

swipeRecognizer = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(onSwipeRight:)];
[swipeRecognizer setDelegate:self];
[swipeRecognizer setDirection:UISwipeGestureRecognizerDirectionRight];
[_tableView addGestureRecognizer:swipeRecognizer];
[swipeRecognizer release];

One of the samples I found used one shared gesture recognizer for both left and right swipes. And then it tried to figure out which direction was swiped in the delegate method. But that didn’t work for me, so I created two gesture recognizers.

The next trick was to find out which table cell was swiped, which I also found on

- (void) onSwipeLeft:(UISwipeGestureRecognizer *)recognizer
if (recognizer.state == UIGestureRecognizerStateEnded)
CGPoint swipeLocation = [recognizer locationInView:_tableView];
NSIndexPath *swipedIndexPath = [_tableView indexPathForRowAtPoint:swipeLocation];
UITableViewCell *swipedCell = [_tableView cellForRowAtIndexPath:swipedIndexPath];

// do what you want here

Now the swiping in my app works much better. Here’s the post on that helped me the most.