was PHP for a long time • Originally involved to ‘just’ set up the site (a single day of work he said) • Sucked in to maintain it and write posts • Do it out of the goodness of my soft heart And You Are...? Tuesday 12 March 13
I’ve heard it all) • Spun out of another app that required WordPress integration • Dev time ~week • Generalised the library and released on GitHub as TTWordPress Brand New Retro Tuesday 12 March 13
couple of months • Adding/Removing 2011 Election • Some bug fixing • Adding Flurry for some metrics • 20K downloads (http://karlmonaghan.com/ app-stats/stats.html? apple_identifier=413093424) • Dead since then despite bugs/feature requests Tuesday 12 March 13
February 2012 to 28th February 2013 2.3 million mobile visitors to the Broadsheet.ie website 1% 27% 1% 71% iOS Blackberry Android Windows Phone • Missing Android market in full effect Tuesday 12 March 13
• API provided by the JSON API plugin (http://wordpress.org/extend/plugins/json- api/) • Own fork to provide some additional fields and clean up output (https://github.com/ kmonaghan/wp-json-api) Tuesday 12 March 13
centric • Searchable • Navigate between posts from post screen • Comments are threaded • Change font size • Submit photos • Fullscreen mode Tuesday 12 March 13
as much as possible without buttons • Can swipe between post list, a post and comments • Not completely obvious so put in help screens • Few seem to have read the help Tuesday 12 March 13
well hidden •Inspired by Summly’s hidden buttons •Always available where your thumb is sitting •Quick access to everything you need Tuesday 12 March 13
a dynamically resizing UIScrollView • Your favourite Pull-to-refresh solution probably works out of the box • Dragging from the bottom on the other hand... Tuesday 12 March 13
UIViews first • Add the UIWebView which has a transparent background • This is so the scroll bar overlays our next/ previous UIViews Tuesday 12 March 13
| NSKeyValueObservingOptionOld | NSKeyValueObservingOptionPrior context:NULL]; • Grab the UIWebView’s UIScrollView property • Set the delegate • Add an observer for changes to the content offset Tuesday 12 March 13
ordinate of the next UIView to be -height and for the previous UIView the height of the containing UIView if (self.scrollView.contentOffset.y == 0) { self.loadNextView.frame = CGRectMake(0, -50.0f, self.view.frame.size.width, 50.0f); self.loadPreviousView.frame = CGRectMake(0, self.view.frame.size.height, 320.0f, 50.0f); return; } Tuesday 12 March 13
y co-ordinate of the next UIView to be - (height + contentOffset) • If the contentOffset is greater than the height of the next UIView, y is be set to 0 Tuesday 12 March 13
than the height of the contentSize less the contentOffset, set the y co- ordinate of the previous UIView to the difference between the frame height and the frame height less the difference between the contentSize and contentOffset Tuesday 12 March 13
[self loadNext]; } else if ((self.view.frame.size.height - self.loadPreviousView.frame.origin.y) >= 75.0f) { [self loadPrevious]; } } • The appropriate action is performed when the UIScrollView stops being dragged Tuesday 12 March 13
downloads • Minor spike in downloads (triple the average to an entire 90 on day of release) • 4,603 active users (92% returning) • 56,796 sessions (3:02 minutes a session) • 329,121 screen views (33K to 41K a weekday) • 91% using iOS 6 Tuesday 12 March 13