https://github.com/ustwo/objective-c-style-guide
At ustwo we have a document outlining our iOS coding style guidelines for developers and have recently placed them up in a github repo for the world to use and share.

izzy's playlists!
hello vonnie
todays bird

Product Placement
ojovivo



if i look back, i am lost
"I'm Dorothy Gale from Kansas"
The Stonewall Inn
🩵 avery cochrane 🩵
Mike Driver

titsay
cherry valley forever
Noah Kahan
The Bowery Presents

Love Begins
Claire Keane
RMH
seen from United States
seen from Mexico
seen from Bangladesh
seen from Bangladesh
seen from United States
seen from Italy

seen from United States
seen from Venezuela

seen from Malaysia

seen from Malaysia
seen from Mexico
seen from Singapore

seen from Philippines
seen from Singapore
seen from United States

seen from United States
seen from United States

seen from United States
seen from United States
seen from United States
@alexefish-blog
https://github.com/ustwo/objective-c-style-guide
At ustwo we have a document outlining our iOS coding style guidelines for developers and have recently placed them up in a github repo for the world to use and share.

Anya is live and ready to show you everything. Watch her strip, dance, and perform exclusive shows just for you. Interact in real-time and make your fantasies come true.
Free to watch • No registration required • HD streaming
Building Xcode projects with Ruby
Image by vandalog
Continuous integration is a powerful tool in any iOS developers toolchain as it allows you to automate a large portion of your workflow and ensures projects stay healthy and running. One problem with Xcode is that the command line interface can be very complex and undocumented at times which makes continues integration tricky.Â
This is why i've created yolo, a RubyGem which provides a Ruby interface to Continuous Integration build tools. yolo is currently geared towards the Xcode toolchain and iOS development.
yolo allows you to run a number of continuous integration tasks and is best implemented with an installation of Jenkins.
Examples of tasks yolo can complete for you are:
Building Xcode projects
Running OCUnit & Kiwi unit tests and generating reports
Running Calabash integration tests and generating reports
Packaging iOS IPA files and deploying them to external services
Sending notification emails
Running tasks on each new git tag or commit
Yolo on Github
Yolo on RubyGems
Converting svn repositories to git with Kafka
image by christiaan_tonnisÂ
SVN really sucks, every time i use it i find myself rolled up in a ball on the floor crying after about 20 minutes. And unfortunately for me, some of the very old projects i work on now and again are based in SVN repositories.Â
The great project svn2git seemed like a dream come true when i stumbled upon it, although I found out pretty quickly that it just doesn't seem to want to play ball with repositories hosted on unfuddle, which the majority of our projects are.Â
This is where the idea for kafka came along, I needed a quick and hassle free way to convert our old SVN repositories to git, for sanity and general productivity. Loosely based on svn2git kafka is a tiny little ruby gem which uses the power of git-svn to convert svn repositories to git.
To give Kafka a try, simple install the gem with rubygems:
gem install kafka
Kafka is in it's pretty early stages, as in version 0.0.2, so it does have it's limitations. The largest being it will only work with SVN repo's using the standard SVN repo layout:
- trunk - branches - git
For a step-by-step guide and more information you'll want to head to the github for the project.Â
Kafka on GithubÂ
Introducing Laterflix - Watch later for Netflix
I spend a few hours today putting together a Chrome extension i've been needing for a while now. I always found i spotted films on Netflix that i wanted to watch but not right now. Netflix didn't have any sort of functionality that would allow me to save films to a list for later so i thought i would build this functionality into Netflix.com with a Chrome extension.
Laterflix add's watch later functionality to Netflix.com allowing you to save movies and view them at a later date.Â
Ever spot a movie you've been meaning to watch when browsing Netflix.com but don't have the time to watch it right then? Laterflix allows you to save it for later so that you don't miss out.Â
* Simply press the watch later icon underneath each movie to save them to your watch later list.
* Laterflix adds a new 'Saved' menu option to Netflix.com which allows you to browse and view your saved movies.Â
* Remove items from your saved list just as easily as you added them. Â
Laterflix is 100% free so there's no excuse not to try it out! It's also open source so feel free to fork it on Github.
<![CDATA[// <![CDATA[ // <![CDATA[ // <![CDATA[ // <![CDATA[ // <![CDATA[ if (chrome.app.isInstalled) { document.getElementById('install-button').display = 'none'; } // ]]]]]]]]]]]]><![CDATA[><![CDATA[><![CDATA[><![CDATA[><![CDATA[> // ]]]]]]]]]]><![CDATA[><![CDATA[><![CDATA[><![CDATA[> // ]]]]]]]]><![CDATA[><![CDATA[><![CDATA[> // ]]]]]]><![CDATA[><![CDATA[> // ]]]]><![CDATA[>]]>
Fetching every row of a table with Parse and PFQuery
Recently i came across a problem when using the Parse iOS SDK. Unknown to me, the Parse PFQuery object will only return 100 results by default. Which unfortunately, i found out the hard way when one of my apps stopped returning results when the table hit the 100 rows mark. As the Parse documentation says hidden away somewhere:
You can limit the number of results by setting limit. By default, results are limited to 100, but anything from 1 to 1000 is a valid limit:
So what if we want more than 100 results? This question on the Parse support site has a great answer from HĂ©ctor Ramos on how to return all the rows in a table with a PFQuery. Although.. as great as the answer is, it only really points you in the right direction. And does not supply a final solution to fetch every result using PFQuery.Â
I came up with a little sollution using a recursive block, which will use a PFQuery object to query Parse until every result has been returned.
+ (void)findAllObjectsWithQuery:(PFQuery *)query withBlock:(void (^)(NSArray *objects, NSError *error))block { __block NSMutableArray *allObjects = [NSMutableArray array]; __block NSUInteger limit = 1000; __block NSUInteger skip = 0; typedef void (^FetchNextPage)(void); FetchNextPage __weak __block weakPointer; FetchNextPage strongBlock = ^(void) { [query setLimit: limit]; [query setSkip: skip]; [query findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) { if (!error) { // The find succeeded. Add the returned objects to allObjects [allObjects addObjectsFromArray:objects]; if (objects.count == limit) { // There might be more objects in the table. Update the skip value and execute the query again. skip += limit; [query setSkip: skip]; // Go get more results weakPointer(); } else { // We are done so return the objects block(allObjects, nil); } } else { block(nil,error); } }]; }; weakPointer = strongBlock; strongBlock(); }
So to use this method we can simply do the following:
PFQuery *query = [PFQuery queryWithClassName:@"myClassName"]; [ParseProxy findAllObjectsWithQuery:query withBlock:^(NSArray *objects, NSError *error) { if(!error) { NSLog(@"Loaded All Objects: %@",objects); } }];
Easy!

Anya is live and ready to show you everything. Watch her strip, dance, and perform exclusive shows just for you. Interact in real-time and make your fantasies come true.
Free to watch • No registration required • HD streaming
Wish i had found this post sooner in my Xcode 4 career, the tabs and behaviours setup is too good.Â
Liferaft: A Lighthouse iPhone App
A very long time ago i started working on an iPhone client for Lighthouse, a very useful bug tracking solution which i recommend you check out (no they are not paying me).
Last December i finally found some spare time to finish the app, which has been available on the app store since then. I wanted to keep it very simple and easy to use and will allow you to use Lighthouse while on the move, as they currently do not have a native iOS client.
Currently Liferaft allows you to do the following, all at the bargain price of ÂŁ1.49:
* Create and edit projects * Create tickets * Comment on and update tickets * Easily sort tickets by User, Milestone, Priority, Created and Modified date. * Assign users and milestones * Quickly and easily manage your lighthouse projects
Someday soon i will find some more time to add a ton of new features to it, even sooner if you go out and buy it! I'm currently waiting for an update with some minor bug fixes to be approved. But if you do find any bugs or have any feature requests, please drop me a line on the email address at the top of this page.
Generating your own UDID
Update:Â I've since stumbled upon OpenUDID which is an even better solution.
Now that Apple are phasing out the use of UDID's due to privacy reasons, developers are required to generate their own unique device identifiers. I've put together a quick method that you can utilize to generate a unique id and store it to the devices keychain using Apple's KeyChainItemWrapper.Â
- (NSString *)guid { KeyChainItemWrapper *keychain = [[[KeychainItemWrapper alloc] initWithIdentifier:@"UDIDData" accessGroup:@"crossbow.com.alexfish.GenericKeychainSuite"] autorelease]; NSString *guid = [keychain objectForKey:(id)kSecValueData]; if(guid.length == 0) { CFUUIDRef uuid = CFUUIDCreate(NULL); CFStringRef uuidStr = CFUUIDCreateString(NULL, uuid); CFRelease(uuid); guid = [(NSString *) uuidStr autorelease]; [keychain setObject:guid forKey:(id)kSecValueData]; } return guid; }
This method checks if a generated ID already exists on the device and if not simply generate one, store it to the keychain then return it. It's also worth noting that Apple's code has a memory leak at KeyChainItemWrapper.m:196
self.keychainItemData = [[NSMutableDictionary alloc] init];
Should be..
self.keychainItemData = [[[NSMutableDictionary alloc] init] autorelease];
Thanks Apple!
Minimal Calculator App
An extremely minimal gesture based calculator, looks like they’ve seen how well Clear has done and applied the same ethos to the calculator.
Xcode has a ton of environment variables which can come in very handy when writing custom bash scripts within Xcode's Run Script build phase. This stackoverflow answer has every single variable available, very handy!

Anya is live and ready to show you everything. Watch her strip, dance, and perform exclusive shows just for you. Interact in real-time and make your fantasies come true.
Free to watch • No registration required • HD streaming
We're now only one day away from the big iPad 3 announcement. Will it be called the iPad HD, will it even have a retina display? Which processor will it use? So many questions, so little time until we actually find out. Click the link for a nice iPad 3/HD/2S rumor roundup.Â
Pretty git logging
I've recently been doing quite a bit of work with git log due to working on getting our CI server up to scratch with git. One of git logs handy options is
--pretty
Which allows you to define how the log is presented to you. As well as having a number of pre defined formats which you can pass to --pretty, for example:
--pretty=oneline
Pretty also allows you to create your own format using:
--pretty=format:<format>
Below is a full list of all available placeholders:
%H: commit hash
%h: abbreviated commit hash
%T: tree hash
%t: abbreviated tree hash
%P: parent hashes
%H: commit hash
%h: abbreviated commit hash
%T: tree hash
%t: abbreviated tree hash
%P: parent hashes
%p: abbreviated parent hashes
%an: author name
%aN: author name (respecting .mailmap, see git-shortlog(1) or git-blame(1))
%ae: author email
%aE: author email (respecting .mailmap, see git-shortlog(1) or git-blame(1))
%ad: author date (format respects --date= option)
%aD: author date, RFC2822 style
%ar: author date, relative
%at: author date, UNIX timestamp
%ai: author date, ISO 8601 format
%cn: committer name
%cN: committer name (respecting .mailmap, see git-shortlog(1) or git-blame(1))
%ce: committer email
%cE: committer email (respecting .mailmap, see git-shortlog(1) or git-blame(1))
%cd: committer date
%cD: committer date, RFC2822 style
%cr: committer date, relative
%ct: committer date, UNIX timestamp
%ci: committer date, ISO 8601 format
%d: ref names, like the --decorate option of git-log(1)
%e: encoding
%s: subject
%f: sanitized subject line, suitable for a filename
%b: body
%B: raw body (unwrapped subject and body)
%N: commit notes
%gD: reflog selector, e.g., refs/stash@{1}
%gd: shortened reflog selector, e.g., stash@{1}
%gs: reflog subject
%Cred: switch color to red
%Cgreen: switch color to green
%Cblue: switch color to blue
%Creset: reset color
%C(...): color specification, as described in color.branch.* config option
%m: left, right or boundary mark
%n: newline
%%: a raw %
 %x00: print a byte from a hex code
This very handily allows you to format the log however you wish. So let's say we want output a very simple log that shows the commit's author, hash and email adress, we can do the following:
git log --pretty=format:'Hash:%H Author:%an Email:%ae' -n 1
The -n 1Â option simply means we only want to see the lastest commit logged, the above command outputs our log as we wished:
Hash:9af8acadf6739947114120e4cbe8a4bedd883c30 Author:Alex Fish Email:[email protected]
Nice!
Going to Harvard means I have the very unique opportunity to be around a lot of smart people. Now, when I say “smart people,” I don’t mean that guy who always wins trivia night. I mean, blazingly intelligent individuals who are regarded as the pre-eminent scholars in their field. It’s pretty...
Simulating connection speeds on OS X
A little known tool which i have discovered recently is the wonderful Network Link Conditioner. Many a time has arisen when simulating a slow 3G/Edge connection is required for testing purposes, which without building to a device with the current required connection is a lot of hard work.  This nifty tool can be found in /Applications/Utilities/Network Link Conditioner and will install to your system prefs pane.Â
Using the drop down menu you can select from a list of everything you require, from a good Wifi connection to a lossy Edge connection only pulling through 240kbps. Once you’ve enabled the connection throttle, fire up the simulator and test away, perfect. Just make sure you hit the off switch when you are done testing, as browsing the internet on an Edge connection isn’t much fun.
Because sometimes you miss TextMate.

Anya is live and ready to show you everything. Watch her strip, dance, and perform exclusive shows just for you. Interact in real-time and make your fantasies come true.
Free to watch • No registration required • HD streaming
Integration testing with KIF
Everybody loves a bit of testing, testing makes the heart grow fonder. BUT there is only so much testing you can do using unit tests. Don't get me wrong unit tests are awesome, although there comes a time when unit testing can only take you so far. This is where integration testing and KIF, comes in. Using KIF, you will be able to magically simulate user interactions such as tapping buttons and entering text into text fields, combining unit tests and integration tests, your app will be invincible.
Here is a video of KIF in action i put together with a sample app i quickly created, it magically fills out a demo login form and hits the login button.
If you want to get your hands dirty with KIF and bulletproof your apps, head over to the link below and get started yourself. Everything you need is explained in the readme to get started:
https://github.com/square/KIF
A very nice iOS form validation framework built by ustwo™'s very own Martin Stolz