“Sherlocked!”

March 18th, 2009 by Kyle

This Tuesday I sat in my seat and watched Apple announce what would become iPhone OS 3.0, by the end of the presentation Handshake was dead. What events lead me down this road? They were long and very unexpected. Two years ago if you told me that I would have been part of all this I would have just written you off.

How It Started

When the iPhone SDK first became available it felt as though anything was now possible and everything was suddenly exciting. I was still wet behind the ears having just finished Trivial. Ian and I had recently meet at the local CocoaHeads Gathering and we were looking for a project to work on together.

Ian already had a good chunk of the network back end written for another project that never saw the light of day, but I will let him tell that story. We wanted a project that would be fast, easy, and enjoyable for the iPhone. I think the most important thing was seeing if we could work together as a team. Very quickly we came up with the idea of a contact sharing App, as there was a tremendous need and no solutions at the time on the iPhone.

Birth of Handshake

I was tasked with writing the client while Ian would write the back end. I immediately set to work getting a UI up and running so we could start testing things. Handshake was supposed to be a short project with one very simple goal, send contacts from one device to another. Unfortunately it wasn’t that simple, it never is.

Every time we took a step forward it felt like we took two back. The network had to be fast, stable and able to work on unstable cell networks. This kept Ian very busy and left me to fight with the client.

In the beginning my primary focus was the number of button clicks needed to be able to send your card. By the 1.0 ship we were able to get it down to two clicks, one to say you wanted to send your card, and one to select who it was to be sent to. Interfacing with vCards is not as easy as it sounds on the iPhone, especially back in the early days when the SDK was much less complete. Ian wrote an SMS share feature to make it easy for new people to get Handshake. It turned into an App that could have and probably should have been 3 or 4 separate apps.

Sending pictures was one of those afterthought kind of things. The home screen looked empty with just two buttons on it. We really wanted to be able to send calendar events but just couldn’t access that data anyway we tried. I was surprised weeks later to learn that pictures turned out to be a huge hit.

The Awkward Years

I’ve never really publicly talked about this before but Handshake 1.0.0 had a serious bug that was completely my fault. When the app was first run it tried to figure out who the user was. Handshake does this with some fancy code that scrapes through your entire address book trying to piece together information about you. This process took a bit too long, sometimes and would make the iPhone think that it locked up while launching, causing the iPhone to exit the App. This was caused by an extra call in the loop that was redundant and took a long time to execute. Handshake worked fine for address books with only a few hundred people in them. This didn’t get picked up in initial testing because we didn’t have huge address books. Who does have huge address books though? The media, thats who. Despite this Handshake was very warmly received by blogs and other news sources.

The power of Handshake was that it would work over 3G, Wifi or Edge in any circumstance, and across any network. It would automatically find people standing next to you and would even work with one bar of Edge (although slowly). To this day no other third party iPhone developer has really gotten this to work that I have heard about. With peer to peer networking in OS 3.0 I doubt anyone will try to tackle this again.

Growing Up

Handshake was huge (especially in Sweden). The problem was we never really had a way to make money on Handshake. We had an ad supported version and a premium version for $2.99 that was ad free. There was no way we could have been successful at all if we charged for the app since both the sender and receiver needed to have it installed. No one wanted to say: “I’ll send you business card, but you have to pay 99¢ first”. We saw decent premium sales, but they really only covered development and server cost.

The ad supported model just wasn’t working well for us. Handshake was one of those Apps that everyone installed, but only ran once a month for 15 seconds, it was not great place for ads to be. We launched with Ad-Mob and made some money the first few days, but it was causing crashes for some of our users, so we decided to pull it. We then tried to roll our own ad network, with some success and that is what you will see in the latest version of Handshake. We used it mostly for advertising our other software, but also had some success selling ad spots.

We added new features like email sharing and global user searching over time, but mostly we planned Handshake 2.0. We needed to add some premium features to be able to sell it. We had our foot in the door with tons of users in over 150 countries, now we needed a way to make money from it. Sending photos lead us down the path of sending files, without the photo feature we might of never seen that next step.

We got 2.0 mostly written including a file browser, which I will be showing in an upcoming post. We just needed a good way to get the files on the iPhone. We looked at every option available, web apps, desktop clients, and network sharing. We settled on WebDav, the problem was Handshake wasn’t making enough to live on and we did this full time. We were working on projects that had proven income potential. We would not have the time to write it ourselves, so we contracted it out to a friend to write. It would have to work flawlessly with Windows, Mac and Linux to be usable.

The WebDav server was never finished and we kept pushing it to the back burner to work on other things like Trivial, Transactions, Cocktails, Changes, etc.

We always knew that Handshake had a limited life and was expecting it to appear in Apple’s software sooner or later, after all we were filling an important niche. We were limited by the SDK and hardware access, something would have to change to take it much further. Apple was the only one that could take it to that next step.

Death and Cooping

The last few months it feels like we have barely thought about Handshake. The support load has been minimal despite the ever increasing user base. We have been busy working on Transactions. Handshake was slowly turning into a word I would use when introducing myself to other developers, “Hello, I’m Kyle Richter, I wrote Handshake”. Don’t get me wrong I always cared about Handshake, it put me on the indie map, but I think I knew its time was passing.

As I sat there and watched Apple first announce peer to peer networking in the iPhone OS 3.0 I was worried, more about our business reselling the Handshake back end then Handshake itself, and I instantly started to work through the task needed to switch Handshake onto the new system.

Ian was sitting next to me and I had sensed for a long time he was looking for the reason to move past Handshake onto new projects, I think this was the message he was waiting for. Even as I thought of ways to adapt and save Handshake I could tell it was dying. Once Apple announced MMS and email with attachments I knew Handshake was EOL. I was upset for a few minutes but the more I thought about it the better I felt.

Being “Sherlocked” is one of the highest honors an indie Mac developer can receive in my opinion. Apple saw the niche we filled, saw how we were doing it, and that people wanted it filled. They implemented it and they gave it to everyone instead of our limited user base. In the end we created Handshake to fill a need for ourselves and the journey has come full circle and now everyone can use it. I can’t think of a better way for Handshake to ride off into the sunset.

[Handshake] Should be a built-in iPhone feature.” – John Gruber.

And now it is.

Handshake will remain available in the App store and free until iPhone 3.0 is available to the public, at which point we will see what we want to do with it.

Transactions

March 15th, 2009 by Kyle

Transactions is a new iPhone App that I wrote with Ian Baird for accepting credit cards on the go. This is the second App that we have released jointly, the first being Handshake.

Transactions was a really interesting project despite some difficult hurdles. I ended up rewriting the entire user interface no less then 3 times including 11 revisions along the way. We put a lot of effort into the UI in order to make it simple enough for any retail clerk to master in minutes but powerful enough to handle the complex nature of payment processing. In the end I am very happy with how it turned out.

img-0005.jpg.jpeg

We also have a couple of firsts on the iPhone technologies with Transactions. We had a major problem of easily entering login credentials for PayPal™ and Authorize.net™. Ian developed a tool for solving this problem that we called the Credentials Tool, it allows you to copy and paste your account information into a website and have an email sent to your iPhone that will automatically configure the App. Founded on this same technology we allow you to transfer settings from Transactions Lite to Transactions.

Transactions Lite allows anyone to try out Transactions with no risk, it does have a limit of 2 Transactions per 12 hours though. Transactions sells for $29.99 and is available in the US App Store. International versions will be available as soon as possible.

Detecting the iPhone User’s Name

February 11th, 2009 by Kyle

There have been a lot of questions about how to detect the name of the user on the iPhone. I thought I would take some time today to walk everyone through the process.

One of the challenges a lot of developers have been facing is that there is no -(ABPerson *)me method on the iPhone. On a mobile device it is especially helpful to know who is using the device.

Initially looking at the challenge I spent a couple of days digging around the iPhone to see if it had any record of a “Me” address. I spent a lot of time in Mac’s AddressBook application using Changes to see if the cards were somehow tagged with a “Me” reference that could later be read on the iPhone. Sadly this was a no-go. The iPhone strips all this information out of the contacts before syncing them to the device.

I have been asked to remove this entry from my blog. Sorry.

For my friends at Apple rdar://problem/6579406

Special thanks to Daniel Jalkut for turning me onto MarsEdit this is my first post using it.

Trivial 2.0 Released

February 11th, 2009 by Kyle

Okay so Trivial has been out for a couple of weeks now, but incase anyone is just watching my feed I thought I should mention it.

On top of that my website has seen yet another redesign. I am very happy with how everything looks now so hopefully I will be able to keep it around for more then a year.

You may have also noticed a coming soon teaser on my software page as well as a few tweets about it. More about that should be available soon as development on it is finishing up.

Trivial 2.0 in Closed Beta

January 10th, 2009 by Kyle

As Trivial moves into closed beta this week. Those who didn’t get a chance to get in the beta group I thought I would share just some of the new features that did make it into 2.0. Some of these features may change before release but they are almost certainly going to be included. 

• Interface themes, a lot of people really liked the old look and a lot of people really hated it. There was no way to satisfy  all my users with just one layout. Trivial 2.0 adds 5 built in themes at launch. New themes will be added as time progresses.

• Multiplayer gaming, play against another user across any network Wifi, Edge, 3g or even across different cell carriers. Find users automatically near you or search for users around the world. 

• Artificial intelligence, play against your iPhone/Touch with 4 different levels of skill. 

• Resumable games, I understand that iPhone users want to play for a couple minutes at a time. Trivial 2.0 allows for resumable games and crash protection. Play for as long as you want and when you come back your game will be right there for you. If your iPhone crashes or loses power the game will restore right to where you left off. 

• In game high scores, while Trivial has always had networked high scores they were only available on the Trivial website. 2.0 brings these scores right into the game for you. 

• Questions will no longer repeat between games. Trivial 2.0 will exhaust the question supply before repeating them.

• A new game mode, Timeless! Timeless mode lets you play on your schedule, no pressure to answer questions against a clock, take as long as you want. Timeless mode even has its own soundtrack which is much more mellow and peaceful then the rest of the music. 

• Plus many many more features, enhancements, and bug fixes!

Trivial 2.0 will ship when its complete, but its getting close.

Howto – iPhone’s Mail App Delete Button

January 7th, 2009 by Kyle

Okay, admittedly I have been doing a terrible job at running a developer’s blog. I am really going to try and start giving back to the community. This is my first attempt at sharing code and tricks that I have developed for various projects.

Today I will be showing everyone how to make a delete button like we see in Mail App.

maildelete

First off you will need two resources one for the background one for the icon. 

redbutton trashicon

You then simply create a button. 

/*Set your button size*/
deleteButton.frame = CGRectMake(0.0, 0.0, 95, 33);
/*Set button background and scale it to fit the frame we set*/
[deleteButton setBackgroundImage: [[UIImage imageNamed: @"redButton.png"] stretchableImageWithLeftCapWidth:7.0 topCapHeight:0.0] forState:UIControlStateNormal];
 /*Set the icon*/
[deleteButton setImage:[UIImage imageNamed: @"trashIcon.png"] forState:UIControlStateNormal];

/*Then when the user has items selected to be deleted you can set the title*/
[deleteButton setTitle: [NSString stringWithFormat @"Delete (%i), numObjectsSelected] forState:UIControlStateNormal];

/*When the user has nothing selected you can disable the button with*/
deleteButton.enabled = FALSE;

/*Don’t forget to enable it when the user has selected a file!*/

And this is what our final product looks like, the button adjust and centers just like the Mail App button.

endresultdelete

You are free to use this code or modify it in anyway that you want, I only ask that if you plan using it that you send me an email or a comment with what it is being used in.  If you plan on republishing this tutorial please give me credit somewhere. 

Trivial 2.0 Progress

January 6th, 2009 by Kyle

 

I have been very busy the last few months working on Handshake. However I have recently found some time to work on the next version of Trivial. I am really trying to get this update out to everyone before I get sucked back into other projects.

As promised the next version of Trivial will bring true head to head gaming over any network. It also is a complete rewrite from the ground up. Dozens of new features have been added and I am very pleased with the progress. I am hoping I can finish implementing new features this week and move it into beta. 

Here are some sneak peak pictures of what is coming!

Twitter

October 20th, 2008 by Kyle

@kylerichter

‘Nuff Said

Trivial A Month Later

September 15th, 2008 by Kyle

trivialIconOkay well it has been a little bit more then a month but the point remains valid. Trivial has been out for a little over a month now and I thought I would share some of the things that have happened over that time. 

Well it has certainly been a roller coaster ride to say the least. iPhone development has it good days and its bad days. Apple has made some significant improvements that benefit iPhone developers that I will touch on as well. 

The entire time I was working on Trivial I was really worried that I would be beaten to the market by another trivia game. When Trivial was released it was the first iPhone trivia game, and it allowed me to relax a little bit. That relaxation was brought to a sharp end two days later when the competitors started to show up. I remain confident that Trivial is by far the best trivia game out there still, and continues to improve all the time. 

There have been several upgrades to Trivial over the month to bring in feature request and improvements and I have many more to add in the near future. I have added multiple game modes, iPod music support, a new interface, high scores and a plethora of other enhancements. There are also 5 new versions of Trivial coming through the pipe and in approval with Apple right now. 

Network play is a major feature request and I am happy to announce it will be available in the next major version 1.3. The networking system that I will be using will allow head to head play with anyone in the world and will allow the player to find everyone else playing Trivial nearby. It is very “Apple-Like” and will be a very smooth type of networking. Most of the networked iPhone games out there require a LAN to play on. Trivial’s networking will work seamlessly across LANs, Edge and 3G networks. Look forward to these new features “soon”.

Apple has made major improvements both with developer relations and with the iPhone itself. Developers are now able to look at daily sales results instead of just monthly. The portal that we mange our Apps through have seen significant improvements as well. The iPhone 2.1 firmware has fixed several issues that plagued developers such as the infamous crash on launch bug that was often blamed on the App itself. 

I have begun working on several new iPhone Apps that will be appearing in the App Store soon. Also don’t forget to look for Trivial Science, Trivial History, Trivial Technology, Trivial Movies and the free Trivial Lite in the App store next week.

Trivial for the iPhone

August 11th, 2008 by Kyle

Today, well yesterday if you want to get technical Dragon Forged Software released Trivial for the iPhone. Trivial is that secret project that I have spent the last several months of my life on. Trivial is the world’s first native iPhone trivia game. 

We initially released 3 question packs for the game engine; general, sports and pop culture. Plans are in place to release many additional versions including history, geography, technology, TV, movies, and specialized sports such as baseball, basketball, hockey, ect. If you would like to see any specialized questions drop us a line

Getting Trivial to the market was our first priority, however we have many features planned for the future. Already in the works is web based high scores, multiple game modes, and resumable play. I have also started to look into iPhone networking and the possibility of network play is strong. 

Right now I am just happy it is out and I can slow down for a few days, the last couple of months have been a nonstop ride and it feels good to be able to catch my breath.