On Content Blockers

With the release of iOS 9, Apple made it easy to download and install a new category of apps called Content Blockers. These are extensions that run in Safari that tell the browser not to load parts of a website. Some can be used to stop a site from tracking you, some stop comments from ever being displayed, but the most controversial are Content Blockers that block ads.

Marco Arment, a fellow iOS dev who I deeply respect, launched his own Content Blocker called Peace earlier this week. He's since removed the app from sale. Read about Marco's decision.

There is nothing nice about blocking ads on a website. With an ad-blocking extension enabled, ads are never loaded when you view a webpage. For the site owner, that's ad revenue they will never receive.

While terrible for publishers, Content Blockers are a win-win for users. With ads disabled, pages load faster, use less data to fully load, and their activities on a site can't be tracked using conventional methods. In my testing with Peace, pages in Safari loaded noticeably faster. In fact, the difference was staggering, especially at the Verge and iMore - 2  of the worst tech blog offenders.

The content publisher/reader relationship has always been free content with ads. Ads used to be lightweight objects. Today, they're frequently larger than the website and all original content combined. That's disgraceful.

For the relationship to work, each side must trust each other. With massive ads, constant tracking, and poor performance, content publishers have lost the trust of readers. With iOS 9, readers now have the power to fight back against an ad/tracking industry that's become too big for its britches.

As a result of Content Blockers becoming widely adopted, some sites will shut down and that's a damn shame. Sites will, and have already, lose money. Worse, the more publishers lash out at their readers, the more they run the chance of those readers never coming back.

The ball is now with content publishers and site owners. My advice? Don't blame your readers. Take responsibility for your tracking shenanigans, slowing user's devices, and having no regard for their bandwidth/data caps. Switch to an ad provider that serves lightweight, ethical ads (they exist). Be an example to the rest of the industry and let your readers know you're leading the charge!

It is the content publisher's responsibility to regain the trust of their readers. Until then, we'll continue to say no to the status quo.

Developing for iOS 9 - canOpenURL: changes

I ran into an issue earlier this evening when my new iOS 9 app was sending me to twitter.com instead of opening the Twitter app. There doesn't seem to be much mention about it in either the WWDC sessions or online.

This used be perfectly safe code (pardon my obj-c):

if ([[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"twitter://user?screen_name=screenshot_app"]]) {
[[UIApplication sharedApplication] openURL: [NSURL URLWithString:@"twitter://user?screen_name=screenshot_app"]];
} else {
[[UIApplication sharedApplication] openURL: [NSURL URLWithString:@"http://www.twitter.com/screenshot_app"]];

In fact, it still is with one gotcha via use your loaf. Apps linked against iOS 9.0 and later will have to white list app schemes they want to use with a new LSApplicationQueriesSchemes key in their Info.plist (That key maps to an array of strings).

In theory, this new block will stop apps from building a list of apps already installed on a device by querying through a lost of known URL schemes using canOpenURL. Presumably, if you can't explain why you're including over 100 schemes in LSApplicationQueriesSchemes, you'll be rejected during app review.

iOS 8 apps running on iOS 9 will apparently work as expected until they cross a 50 scheme threshold at which point canOpenURL: will return an error.

When updating to iOS 9, be sure to add LSApplicationQueriesSchemes to your Info.plist. A 'Find in Workspace...' for canOpenURL will show every instance where you're calling a url scheme.

Screenshot++ and new Apple Hardware

I'm currently finishing development on Screenshot++ 2.0. I decided this version will also support iPad Pro sized screenshots and be available before the new iPad actually ships to customers in November.

Its important that Screenshot++ users be able to interact with the iPad Pro's massive screenshots from day 1. It's also a little frightening that I won't be able to properly test this feature on an actual device before official launch day. Chicken or the egg?

I'm looking into whether screenshots from the new Apple TV can be supported in the app. Can you take screenshots of the Apple TV's output without the simulator? If so, where do the files go? Screenshots from Apple Watch worked out well because a screenshot taken on the Watch is moved to the user's iPhone soon after creation. I'll have more info about screenshots from Apple TV in a later post.

Because I don't want to cause major delay in shipping Screenshot++ 2.0 with iOS 9 support, I'll be adding iPhone 6s features in a 2.1 release later this fall.


Screenshot++ 1.2 Now Available

I'm pleased to announce that Screenshot++ 1.2 is now available on the App Store! It includes support for screenshots from Apple Watch, Quick Actions for automating complex actions, keyboard shortcuts, and UI enhancements.

A big thank you to all our beta testers for their valuable feedback! If you would like to help the next version of Screenshot++, we'll be running another beta for our next version soon.

Screenshot++ 2.0 is already in development with support for new features in iOS 9 as well as a new Dashboard. Stay tuned for more info!

If you love Screenshot++, please take a moment to rate and review us in the App Store. It really helps!

Learn more about Screenshot++

Bug Trackr 2.1 with Tip Jar

Bug Trackr 2.1 shipped recently and with it comes a very different revenue model.

Previous to this version, Bug Trackr was free with an in-app purchase to unlock premium content known as the "Pro Upgrade". The reason for this was to let customers download and try the app before purchasing it. Sales were higher than if I charged the same amount upfront for the app but I felt I could do better.

New Beta Homepage


A quick note to announce a new page devoted to betas.

When apps enter public beta they'll be posted there instead of on respective product pages.

I began offering Screenshot++ 1.0 as a beta through TestFlight earlier this year to a small group of testers. It went extremely well and I'll continue to use Apple's beta distribution service. A full write-up of my TestFlight experience will follow at some point.

Right now, you can join the Screenshot++ 1.1 beta which includes new features I think you'll love!


Thoughts on Apple's 2015 Macbook

While Apple Watch was the headline product of yesterday's keynote, the new Macbook is by far the most interesting news.

It's been many years since we had a proper 'MacBook'. The white plastic MacBook was discontinued in July 2011 and since then, Apple's line has consisted of the MacBook Pro and MacBook Air. The MacBook was always positioned as the entry level portable Mac and it's important to remember when looking at the 2015 Macbook.

Many expected the new MacBook to replace the MacBook Air. It shares many characteristics as the current Airs as well as a few great updates including a retina display, thinner body, and a better trackpad and keyboard. But the MacBook Air line has continued to live on albeit with faster processors.

Here in lies the difference. The Air is now positioned between the MacBook and the MacBook Pro. The Air offers upgrades like adding more RAM, faster CPU, and more storage. The new MacBook comes in 2 basic models with limited upgrades available. It's the iPad of the Mac world. In fact, it's positioned so much like an iPad that it comes in 2 colors and 2 configurations.

The addition of the new MacBook makes the MacBook Air line look antiquated and bulky. The Air is for people who want a faster processor than the basic M-class included in the MacBook as well as more than 8GB RAM or a larger display than 12 inch. The MacBook Air is also the only Apple product remaining that ships without a retina display. It's low-hanging fruit and I'll bet 2015 will be the year Apple completes the Retina transition.

The new MacBook is positioned as the future of Apple portables. The 13-inch MacBook Pro received the tactic trackpad upgrade and faster CPUs but the 15-inch curiously didn't. Apple has purposely left room for a future announcement with a new generation of MacBook Airs and larger MacBook Pros. Your guess is as good as mine but I think these future devices are dependant on new software features in OS X 10.11 or 10.10.4.

And then there's USB-C port. The new MacBook includes the new connector which promises to replace USB 3, Display, and HDMI. In fact, there are no other ports on the device which has allowed it to be so thin. In fact, the M-class chipset in this MacBook doesn't support Thunderbolt. This isn't a sign of Apple killing Thunderbolt, it strictly isn't supported by Intel.

The new MacBook isn't for people who are plugging in storage devices or external displays. The new MacBook is for users who love iPad but want a traditional desktop. It's perfect for writers and casual Safari browsing. This isn't a machine you'll be running Xcode on all day. This is for your mom, a student, a blogger.

The MacBook Air isn't going anywhere; the next generation will blow the MacBook away.

Apple Watch Band Combinations

If you're planning on buying an Apple Watch when it launches this Spring, check out mixyourwatch.com and browse the different body/band configurations.

I'm leaning towards the lighter bodies with the metal bands.

Such a great resource!