Creating A Twitter Client For OSX – Part 1

With the upcoming release of the Mac App Store, I can only imagine another gold rush is upon us. Clever Indie developers making money hand over fist while the store as well as developers find their identities. With that being said, I feel that there is a serious lack of interesting (maintained) Twitter clients for OSX. I say ā€œmaintainedā€ because Tweetie for OSX is just fantastic, however Twitter said they donā€™t have any plans for it at this time. So, I want to provide devs with the tools to create an amazing Twitter client for the Mac that I will want to use :)

Quite some time ago, I began (and never completed) a series on writing a Twitter client for OSX. It was very well received by the development community, however once Twitter switched over to OAUTH, I became too lazy to update it :( . So, I figured a tutorial series for #iDevBlogADay would be the perfect opportunity to complete it.

So we are going to start from the ground up. In todayā€™s tutorial, we are going walk through getting the initial resources and setting up Twitter to authenticate our application. We will also post a basic tweet.

Setting Up Twitter

In order for your application to interface with Twitter, you must register it with them over at http://developer.twitter.com.

  1. Go to http://developer.twitter.com and sign up if needed
  2. Click on Your Apps
  3. Click Register A New App and fill out all of the information about your client
  4. Youā€™re all set!

Getting Necessary Resources

I spent a bit of time researching the various options for handling OAUTH and all of the fun stuff that goes along with Twitter integration and found that MGTwitterEngine was the least painful to implement. I say least painful because it has a few quirks of itā€™s own along with not having the best documentation in the world.

So after battling for a bit to get the thing compiled, I have figured out the setup process :). You could also read Mattā€™s installation instructions, but I will regurgitate them here a little differently and hopefully be more clear. So here it is:

  1. Make sure you have git installed. If not, download it for OSX here.
  2. cd to the directory that you want to clone the files to
  3. Clone the MGTwitterEngine repository. Type:
    $ git clone git://github.com/mattgemmell/MGTwitterEngine.git
  4. cd into the MGTwitterEngine folder (we will install the dependancies at this level)
  5. Now install the dependancies (TouchJSON and OAUTHConsumer). Note: There is an option to use yajl (yet another json library), but I found it a pain to integrate, so we will just throw it out.
    $ git clone git://github.com/schwa/TouchJSON.git
    $ git clone git://github.com/ctshryock/oauthconsumer.git

Altogether, this is the order of commands you should have:

<code class=ā€™bashā€™>$ cd ~/Desktop
$ git clone git://github.com/mattgemmell/MGTwitterEngine.git
$ cd MGTwitterEngine
$ git clone git://github.com/schwa/TouchJSON.git
$ git clone git://github.com/ctshryock/oauthconsumer.git</code>

Building MGTwitterEngine (What a freakin pain)

I find it interesting that this project is riddled with errors directly upon download. So much work went into it, yet itā€™s so challenging to get working.

Now open up MGTwitterEngine.xcodeproj. You will notice that there are quite a few missing files (they show in red). Thatā€™s fine. DELETE THEM ALLā€¦

  1. Delete the yajl group with everything in it
  2. Delete the Twitter YAJL Parsers group and everything in it
  3. Delete OAToken_KeychainExtensions.m and OAToken_KeychainExtensions.h (they are not used)
  4. Delete CJSONDataSerializer.h and CJSONDataSerializer.m
  5. Delete CSerializedJSONData.h and CSerializedJSONData.m
  6. Click the arrow on the OAuthConsumer group and you will notice that the Crypto is missing. We still need this group, but itā€™s in the wrong place. Delete this group and then open up your MGTwitterEngine folder in Finder. Navigate to MGTwitterEngine->oauthconsumer. Drag the Crypto folder into your project.
  7. We need to change the C Language Dialect to C99. To do this right click on MGTwitterEngine in XCode and click Get Info. Scroll down to C Language Dialect and click the drop down changing it to C99
  8. Finally, we need to tell MGTwitterEngine that we want to use TouchJSON instead of yajl. To do this open up MGTwitterEngineGlobalHeader.h and set TOUCHJSON_AVAILABLE to 1.
  9. If you still have any hair left at this point, click Build and Run to and check out the output in the Console
  10. If you donā€™t feel like jumping through all of these hoops you can download my MGTwitterEngine project with all of this fun stuff completed. Download it here.

Testing MGTwitterEngine

For todayā€™s tutorial, we will just be displaying our timeline and updating our status using the demo file provided by MGTwitterEngine. In the next tutorial, we will actually be integrating the engine into a new project. So, open up AppController.m in the Demo group. Matt has given us some nice variables to fill in, in order to make this thing work. Letā€™s update to applicationDidFinishLaunching method to look like the code below:

<code class=ā€™objcā€™>- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
        // Put your Twitter username and password here:
        NSString *username = @"brandontreb";
    NSString *consumerKey = @"aKKEsJHTDNsv4xVlMHmMqw";
    NSString *consumerSecret = @"oldpeoplenakedcriscotwister";
    // Create a TwitterEngine and set our login details.
    twitterEngine = [[MGTwitterEngine alloc] initWithDelegate:self];
[twitterEngine setUsesSecureConnection:NO];
[twitterEngine setConsumerKey:consumerKey secret:consumerSecret];
[twitterEngine setUsername:username];

token = [[OAToken alloc] initWithKey:@"16369316-GgqA00WO0poCAj0XAFhJYDDRthVvWMxTnVyKdfWa1"
                              secret:@"StrongEnoughForAManButMadeForAWoman"];
[twitterEngine setAccessToken:token];
[twitterEngine getHomeTimelineSinceID:0 startingAtPage:0 count:20];

}</code>

So obviously I changed my consumer secret and Access Token Secret. You will need to fill this out with your information. Here is how to obtain them.

Consumer Key & Consumer Secret

When logged into http://developer.twitter.com/apps/ , click on the application that you created in the first step:

Scroll down and you should see the Consumer Key and the Consumer Secret.

Access Token & Access Token Secret

In the right column, you should see a link titled ā€œMy Access Tokenā€. Click on it.

Now you should see YOUR Access Token and Access Token Secret

Have Fun!

After you copy the tokens, keys, and secrets into the app, you should be able start making calls to Twitter using the engine. Build and run the application at this point and watch your home timeline get output to the console. One thing I want to point out is we are displaying an NSDictionary. That means MGTwitterEngine did all of the parsing for us (using TouchJSON), which is super rad.

One more thing to try for fun is to update your status. It will even show that you updated it from YOUR application on Twitter. Add the following line and run it again.

<code class=ā€™objcā€™>[twitterEngine sendUpdate:@"@brandontreb is a code gangster!  Check out his #iDevBlogADay post on making your own Twitter client here http://bit.ly/gGrZvI"];</code>

Well, that does it for today. Join me next week when I will show you how to move the engine into your own project and we will begin displaying tweets in a basic table view.

Happy Coding!

Click Here To Go To Part 2

—-

ļ»æļ»æThis post is part of iDevBlogADay, a group of indie iOS development blogs featuring two posts per day. You can keep up with iDevBlogADay through the web site, RSS feed, or Twitter.



#Mac
Brandon Trebitowski

šŸ’» Software šŸ• Outdoors šŸ  Family šŸƒā€ā™‚ļø Fitness