UpdateYou must use an absolute path in step 3 or you could get a crash. Thanks @hyperjeff

At the time of this writing the latest version of Xcode (4.3.2) was released on March 22nd 2012. The latest version of Clang (267) was released on June 1 2012. There have been 4 updates to Clang since Xcode 4.3.2 has shipped and those updates fix bugs and add better support for blocks. See the Clang release notes.

It is really easy to take advantage of these updates on your development machine or on your build servers.

When I first started using Jenkins with Github I was using scm polling to check github for changes. This is bad, there is a much better way. Have github tell you when changes have been pushed via a Service Hook. The problem is that your Jenkins might be behind a private network. The solution is to use a Reverse Proxy.

Ole Begemann has a nice post on What iOS Should Learn from Android and Windows 8. Specifically the post is about how Android, Windows 8 and iOS implement the sharing of things. The short version is that both Android and Windows 8 include a generic way to share things between applications and iOS has a very specific few ways to share only certain things.

There has been a lot of “Back to the Mac” talk in the last year however I think iOS could take a page from the Mac in this scenario. OS X has had the ability to share different types of media between applications using what are called Services. You can probably find Services on your machine right now. Just select an image file in the Finder and then click Finder -> Services from the Menu. This is what mine looks like

Take for example that “Upload with CloudApp”. The Cloud.app on my machine has registered a Service with the OS that accepts an image file.There are even more Services installed for sharing a URL

Check out that Tweet Service. Thats provided by the official Twitter.app. It’s like a Twitter Share Sheet right here in OS X Lion.

The Technical Details

Applications can register the Services they support by declaring them in the Info.plist. Lets go back to Twitter.app and see what that declaration looks like.

All this boils down to mean any selected text is sent to the Twitter.app tweetService method as a NSString from the Pasteboard. This is what the method signature of that Service probably looks like in thw Twitter.app AppDelegate

I have updated my example over the air distribution script to use “xcrun PackageApplication” instead of manually creating the Payload directory and zipping that.

This allows you to use the same flow to package and sign your application that Xcode does. It also allows you to choose the signing certificate and provisioning profile completely separate from what was defined in the Xcode project.

Every so often I get an email like this “How do I use KeyGrinder?”. This is a fair question. KeyGrinder does not do a very good job of teaching people how to use it. I always figured that if people didn’t know about PwdHash they wouldn’t even bother to download it. However it turns out that there are people out there hungry for better password security and are seeking something to help them.

This post is for them.

KeyGrinder uses the Stanford PwdHash algorithm to mix together a URL domain and a master password to come up with a strong password that is unique to that domain.

For example the domain “http://twitter.com” plus a master password of “prettybird” gives us a PwdHash of “n2A0x64KS1BC”.

The domain “http://facebook.com” plus a master password of “prettybird” gives us a PwdHash of “lYuZHW5JZHM3”.

Thats the same master password used at a different domain giving us a completely different password. If you are the type of user that uses the same password for most of your online logins, KeyGrinder allows you to have a unique strong password for every website you use. Simply change your passwords on the sites you visit to the ones generated by KeyGrinder and you are good to go.

The KeyGrinder iOS and Mac apps allow you to enter in your domain and master password and then copy the resulting PwdHash into your clipboard, ready for you to paste into whatever web site or app you are logging into. If you are away from your devices or are using a computer that does not have KeyGrinder installed you can always use KeyGrinder.com to get your password.