I am a sucker for an interesting set of playing cards, despite actually being terrible at Las Vegas.
I ordered a pack of these programming language cards few days ago to add to my collection. Each class of card uses a different programming language to represent its value. It’s criminal they don’t include Swift, but at least Objective-C is represented.
Buy at Varianto:25
A short note to let you know that if RSS isn’t your thing, you can now get updated on new posts to this site via Twitter.
Follow @carpeaqua on Twitter.
I’ll eventually get around to putting out an email version of the site as well, but that’s not a short-term goal.
This is probably one of the most engaging and interesting talks I’ve sat through. If you want to have a really good idea of the size of business the Gang of Four (Facebook, Amazon, Apple, and Google) are doing I doubt you’re going to find a better resource.
There’s so many quotable things in it as well.
On their growth as a media company:
Advertising is becoming a tax only poor people pay.
On generating profits and why Amazon doesn’t:
Profits are heroin to investors. They love them. They get addicted to them. And when you take them away, they get very irritable.
We truly are living in Larry, Mark, Jeff, and Tim’s world.
If you can read this, then everything has moved successfully. I’m now hosting the site on a server at DigitalOcean rather than on Azure. Why? Predominantly performance. Azure is notoriously slow when it comes to MySQL, apparently because it’s outsourcing the database to a third-party company rather than hosting it themselves. I was faced with either running my own virtual machine instance of MySQL myself or moving somewhere else. I used that as my opportunity to evaluate other options.
I settled on DigitalOcean based off referrals from friends, but also their one-click WordPress install and ample documentation. I haven’t run my own VPS in a while, so I was a bit rusty in remembering all the nooks and crannies I needed to cover to secure a Linux system. Thankfully, there are plenty of first-party tutorials provided.
Hopefully the speed increase of carpeaqua will motivate me to write more than I do. Every time I sat down to write something before, I’d get annoyed at how long it was taking for a request to process. Now things are instantaneous. I’m running out of excuses.
If you want to check out DigitalOcean, click or tap on this referral link. You get $10 in credit and I get a little kickback too.
If you surveyed me annually, you’d likely find that my toolkit for building Mac and iOS applications changes a bit year over year. This year, however, the changes seem to be even bigger than before. With Swift 2’s release, I made the full transition from Objective-C to Apple’s new language du jour.
The transition has not been without growing pains (hello, constantly crashing debugger!), but overall I am writing better, more idiomatic code. And this is coming from someone who spent the last decade happily writing Objective-C. Since I’m making the transition, I’ve also used it as an opportunity to re-evaluate the third-party libraries I am using in my client applications.
I tend to have a fairly reserved stance on third-party dependencies. I am not vehemently against them like some, but I also don’t want to turn my app into a Lego set where I’m merely piecing together library after library that I don’t fully understand. The tools below are things I have used and successfully deployed to production.
In the Dependency Wars, I have tried them all. I started with vanilla Git submodules, and did a brief tour of duty with Cocoapods. Submodules didn’t offer nearly enough wins for the management overhead I seem to have. Cocoapods worked for the most part, but I have fundamental disagreements with how they package and build their products.
Carthage seemed like a happy medium for me. I get the wins of using some sort of dependency management system, and it sticks with using the shared Xcode schemes that are bundled with the project itself.
This is the most recent addition to my list, but it’s one I’m growing to enjoy most. Functional programming is what all the hipster developers are doing these days, so I am trying to wrap my head around it. I may not understand why they wear wood framed glasses, tight jeans, and so much flannel, but I am starting to come around to the idea of building things functionally.
RxSwift is from the same folks who do Rx.net, RxJava, and a host of other implementations, which may or may not be appealing to you. When learning something new, documentation is important and I’ve found the docs for RxSwift to be pretty well done. There’s still cases where the generic ReactiveX documents are “TBD” in terms of RxSwift, but having the header docs fills in many of those gaps.
My biggest complaint with RxSwift isn’t so much a complaint with the library as it is with the idea of functional programming. It is a major change in how you think, so I spent most of my first few weeks re-reading docs, cursing and trying to understand what was actually happening. Eventually it will click, and when it does it’s a really nice way to build iOS libraries.
RxSwift includes a library for making UIKit more reactive, but I’m shying away from it presently. Right now I have limited RxSwift mostly to integration with network modules I build. I reserve the right to change my mind about this in the future, but right now delegates and data sources don’t bother me that much.
It is a toss-up whether there are more Swift JSON parsing libraries or Republican presidential candidates in the US. I don’t really have anything negative to say about SwiftyJSON. It works and saves me from writing JSON parsing code over and over again.
You can likely choose one of the other 107 libraries and it will do pretty much the same thing: just like a Republican presidential candidate!
I have used Core Data since it was introduced way back in OS X 10.4. I have never loved Core Data, but it has always gotten the job done and proved better than raw SQLite queries (I’m that much of a masochist).
I interviewed the Realm folks way back when on my CocoaRadio podcast and found it to be an interesting project. I just didn’t have anything to implement it in since I was already successfully deploying Core Data in my existing client projects. With a new project that ramped up early last year, I decided to give it a shot.
I’m having a hard time convincing myself to go back to Core Data for anything right now. Core Data has always felt bloated to me, especially when trying to bring up the stack in an application. I also have many battle wounds to show for Core Data threading issues over the years. All things of the past with Realm. I can query the same Realm from any thread and bringing up a new one is at most three lines of code.
Apple is working to improve Core Data each year, but I’m starting to believe they should just reboot the framework like a comic book movie and start over. Or keep it as is, and I’ll keep using Realm.
I was a longtime user of CocoaLumberjack, but was running into a issues when starting to migrate an existing client application to use Swift in some places. I also started having issues where there updates to the library would just fail to work in the application without me spending a few hours each release debugging things.
I decided to use that as a chance to write my own clean room logging implementation that does everything I need: which isn’t that much. I call it Aspen, and you probably shouldn’t use it.
It works for me and is deployed on millions of iOS devices, but it’s also something that I don’t really see growing beyond the scope of the project as is. I’d like to add log rolling and ASL support, but after that there’s not much else I need in a logging framework. If your needs are greater, any other solution will probably work better for you.
The newest piece of my kit is Fastlane, a suite of Ruby scripts from Twitter’s development folks. I am using Fastlane to help run unit tests from the command line, build releases and automatically upload them to TestFlight. The suite can do a lot more, but my needs are fairly simple.
The next piece to my Fastlane puzzle will be getting some sort of continuous integration component. Maybe next year.
Plain Old NSURLSession
You’ll notice that I’m not using a networking library like AlamoFire or similar. For most of the projects I am working on, I don’t need the extra overhead those libraries offer me. I tend to put each network request in its own Swift class and make them return an RxSwift Observable. I then have a parent class that will vend those request classes out. I may write about this more in the future, if enough people ask nicely.
The iPad Pro went on sale this week. I picked one up at my local store, though my Pencil and keyboard case won’t ship for another few weeks.
I haven’t been this fascinated by a new device since the original iPad was released back in 2010. That is the device that got me re-energized to build my own iOS products after frustrations with the original incarnations of the iPhone App Store. My mind has been racing for weeks about ideas for this thing. There’s just one problem: I don’t understand why the device exists.
I use my iPad mini 4 every single day in the morning and evening as my primary method for reading, watching TV in bed, and sniping at people on Twitter. I keep no work-related apps on it. It is my personal device that is designed to let me focus on things that don’t involve my day-to-day duties as a software developer.
According to interviews with Tim Cook over the last few days, Apple is positing the iPad Pro as a full-on replacement for a PC or Mac for “many, many people.”
“I think if you’re looking at a PC, why would you buy a PC anymore? No really, why would you buy one?”
“Yes, the iPad Pro is a replacement for a notebook or a desktop for many, many people. They will start using it and conclude they no longer need to use anything else, other than their phones.”
Apple wants to cast the larger iPad as where the puck is going when it comes to knowledge workers. The days of carrying around a laptop or having an iMac or Dell on your desk to do your job are a thing of the past with the powerful iPad Pro.
No doubt if you are someone at the executive level who spends most of his or her time in email or browsing the web, the iPad Pro will likely be a great product. With anyone outside of that email and browser bubble, I struggle with seeing how the device fits without a tanker ship of compromises.
The Legacy Problem
I went home a few weeks ago, and my brother showed me his new MacBook he purchased for his online classes. His day job is managing a retail store, so his computing needs aren’t that heavy. An iPad sounds like it could be a great fit for him, right? Sadly, it was a nonstarter when he found out that the course required Silverlight in the browser.
I’ve looked at this software. All of it could be rebuilt on iOS and likely offer a better experience for students. Apple has provided all the APIs you need. What’s the financial incentive, however? iPad sales have been sluggish the last few quarters, and the iPad Pro has a giant question mark over it as to whether or not the general public will embrace it.
This isn’t a new problem. Apple faced something similar with the transition from MacOS to OS X in the late ‘90s and early 2000s. The biggest difference between then and now is that OS X isn’t going anywhere. Convincing someone who is getting by building web apps in Silverlight they should scrap all their existing code and build something natively on the iPad is a much harder sell than telling Adobe they need to embrace Carbon to get Photoshop running on Mac OS X.
The Ecosystem Problem
The majority of productivity apps that I have on my iPad Pro fall into three camps: first-party tools from Apple, a productivity suite from Microsoft, or $5 apps from hobbyist developers.
This is likely where you expect to read the same excuses about app sustainability and the lack of trials and upgrade pricing on the App Store. I’ll spare you rehashing those arguments for the millionth time.
The overarching reality is that, like any business, selling software is hard. The mythical App Store — where just building something means you will be swimming in a pool of money — still hasn’t surfaced after seven years of people promising it was coming.
What has shown up, however, is a world where the top grossing apps on the store are free-to-play games from two or three major game publishers. Game of War and Candy Crush have dominated the top grossing chart of the App Store for years at this point. They are likely raking in six figures (or more) a day just from the App Store. Add Google Play on to that, and now you know who actually has the swimming pool of money.
Compare that to the podcast app market, which is now switching to the tip cup model — used by panhandlers around the world for decades. These are “premium” apps that used to sell for the outrageous price of $4.99 and now have now switched to the “pay if you can be bothered” model because getting people to pay for software today is an even more difficult proposition than it was a decade ago.
Trials and upgrades aren’t going to solve the problem of developers shooting themselves in the foot or continuing to refuse to understand fundamental business concepts like marketing.
As a thought exercise recommend your favorite paid app to someone that is not a nerd. I have friends who are allergic to exercise that will run for the first time ever to avoid paying even $.99 for something on their phone. You’re telling me those folks are going to spend $39.99, even if the app can make them more organized and likely help them do their job better?
Omni makes it work, though. They have dozens of employees and don’t sell their software at bargain basement prices. The sad reality is there aren’t enough Omnis in the ecosystem right now to make the iPad Pro a viable productivity platform for anyone but those executives, retired folks, and masochist bloggers who jump through more hoops than a circus elephant to use an iPad instead of a Mac.
The app ecosystem isn’t the only problem. As I mentioned previously, iOS looks somewhat out of place on the iPad Pro. Visual oddities like the amount of spacing between app icons on a 13” screen seem like something that has to be resolved in iOS 10 with a re-imagined home screen of some sort.
Split-screen support doesn’t solve any of the interconnectivity problems apps still have where it’s not a trivial task to move a chart or spreadsheet from one document and insert it in another. These are problems that a mouse and drag-and-drop solved decades ago but are still a chore to do on iOS.
New features like extensions, app groups, and enhanced URL scheme support have helped make iOS a better overall platform. Having links from Twitter open directly in the Twitter app versus Safari is a great experience.
A lot of those improvements to iOS are related to helping individual apps be more extensible versus enabling Vendor A’s app to talk to Vendor B’s in a sane way.
To improve this sharing, iOS 8 added the concept of document providers. The feature has been available for nearly a year, and I can count on my left hand the number of apps I’ve used that have implemented it in a meaningful way. Even my favorite Omni apps consider document providers “beta” in favor of their own OmniPresence sync solution.
The apps that I have used a document picker with haven’t exactly been easy to use either. Most have copied the file from the document picker into their own app sandbox, which now gives me two different versions of a document in two different places. The future!
Smart people have worked out ways around a lot of these issues using apps like Workflow or writing scripts in apps like Editorial. To argue that writing scripts is a viable solution for anyone but the hairiest of neckbeards is insane.
I have no doubt Apple is aware of iOS’s limitations, and presumably working on solutions for it. As of today, however, I can’t imagine doing more than the most basic things on iOS without feeling like I am paddling upstream.
Why Does the iPad Pro Exist?
Like the Apple Watch, I’m having a hard time understanding why the iPad Pro exists right now. In a lot of ways, it feels like they threw this out as a reactionary tactic to slumping sales to see what happens.
Each new platform or device Apple releases is met with the same “We can’t wait to see what you develop for this” message to developers. With the iPad Pro, that invitation is feeling more hollow than ever, given the state of everything I’ve outlined above.
It’s possible that I’m overanalyzing all of this and the target is really schools or enterprise deployments. Selling 50,000 iPad Pro tablets to someone like IBM so they can load their own in-house software on the device makes a lot of sense.
I’m fine with the fact that I will always be a “Mac person.” I build software for a living, so I am someone who will likely always need all that OS X affords me to do my job. It’s for people like my brother, who just dropped nearly $2,000 on that new MacBook just for his online coursework, that I want to see something like an iPad Pro succeed — and become what technology is for the majority of people.
With all the legacy software out there, the lack of financial incentive to rebuild it for a new platform, and iOS’s current limitations, I am hesitant to say that is going to happen anytime soon.
P.S. I wrote and published this on my 27” iMac with 32GB of RAM, a 1TB SSD, and a 4GB GPU.
. . . I like Apple Music. It works for me.
. . . the Apple Watch is pretty neat. I wear it daily.
. . . the new Apple TV is pretty good.
This is how I’ve described Apple’s three new products released this year when asked. I like them, but I’m hesitant to recommend others buy them because of frustrating flaws or the absense of essential features.
If you ask me to describe my iPhone 6s Plus, iPad mini 4, or Retina 5K iMac, I have nothing but gushing praise. Admittedly, they are more mature products, but I’d also argue my review of the original iPhone and iPad was much more positive than my reviews of any “Version One” Apple has put out this year.
The original iPhone not only changed the industry, but it changed my life — from the first day. The original iPad showed me the future of computing. Even if I only use my iPad for watching video and reading, I use it for hours a day. And the iMac and OS X are so mature at this point, niggling bugs are really all I can complain about.
So what’s changed from those products to these new ones? I refuse to believe or use the “Steve Jobs” excuse. Apple is filled with brilliant people at all levels of the organizational chart. You don’t become the biggest corporation in the world being run by dummies.
I’d entertain the idea that Apple is stretching itself too thin. Despite being the biggest company in the world, they have gone from a single platform (OS X) to managing six (OS X, iOS, tvOS, watchOS, iCloud, and CarPlay). Apple has always struck me as a company that does more with less, but even this amount of annual innovation seems like an insane amount of work for one company to do without more than a few hiccups along the way.
My guess is our expectations for these products have grown exponentially from nearly a decade ago when Apple started really pressing the gas pedal on mobile and technology in general. The original iPhone was compared to a Blackberry or Nokia. The original iPad’s biggest competitor was a Windows PC Tablet. The only place I ever saw one of those was a university classroom.
Compare that to Apple Music, running up against Spotify, which is really damn good. The Apple TV is competing against Roku, TiVo, Xfinity X1, and a variety of other incumbents. I’m really not sure who or what the Apple Watch is competing against. FitBit? Android Wear? Omega?
When the bar is raised by existing competition, the flaws of a 1.0 product stick out far more than they did when you’re revolutionizing and changing a market that is either dormant or nonexistent. The piss-poor performance of apps on the Watch is hard to ignore. The clusterfuck of an interface that Apple Music has compared to Spotify is hard to justify. The lack of an update to the Remote app or Bluetooth Keyboard support on the Apple TV makes me curious how Apple prioritizes features; that truly seems like a glaring omission.
The Watch, Music, and TV products will continue to evolve over the next few years and see continued improvement, but I can’t deny I’m longing for the days of an original Apple product putting my jaw on the floor and giving me zero hesitation recommending it to others.
In tribute to Alex King, this is a re-released version of his geeky & meta tee. The HTML5 canvas code on the shirt draws a Colorado state flag. We think of it as a celebration of an amazing person and one of his many great creations. See Alex model the original shirt himself.
I have the original blue shirt, and am wearing it today even. I’ve ordered a new one as well as a tribute to my friend. You might consider purchasing one too.
In their current incarnations, I believe that Windows 10 is better suited to the Surface than iOS is to the iPad Pro.
Now, with that quotable hot take out of the way, let me explain. I have every intention of dropping some serious coin on the highest end iPad Pro, keyboard, and a don’t-call-it-a-stylus Pencil this November. I use my iPad Air 2 every single day for reading my Pocket queue, Kindle books, and watching video from a variety of different source apps. Occasionally I will even do some “real” work on it too.
During the Apple event this week, the company brought on stage various partners to showcase apps they had built to take advantage of the hardware and accessories of the new iPad Pro. They showed someone annotating an email attachment and then sending it back (something I believe has never happened in the history of mankind outside of a technology demo). Microsoft came on stage to show how you can get business done with an iPad Pro and Office. Adobe showcased a few different apps for touching up photos.
What was not highlighted nearly enough, however, is how awkward iOS looks on such a seemingly large device.
This is a 13″ screen using the same grid of icons as its other iPad counterparts. On the Pro, however, there is so much space in between each icon that you could rush for a touchdown on every play.
Compare this with the Surface 3 and Windows 10. You can organize your apps on a full screen view that has its icons closer together and in grouped with a far better visual metaphor than a folder. Your most frequently used apps are surfaced (sorry) along the left edge of the screen as well. Is it more complex than iOS? Yeah, but I wouldn’t say it’s too complex to understand. Windows still has the same concept of press and hold to move icons around and swiping left and right to page between different parts of the screens.
And we haven’t even started talking about the third-party ecosystem for the iPad. I can count the number of apps on my left hand that are thoughtfully designed for the iPad screen size. Most are, for lack of a better phrase, blown-up iPhone apps. Just this week, Twitter updated their iPad app to be exactly like the iPhone version but with a bit more padding on the edges to make up for the larger screen size. That’s fine for the iPad mini and mostly tolerable for the Air. On the iPad Pro? That’s approaching clown shoes territory.
A lot of this thinking is thanks to Apple and the invention of size classes in iOS 8. With size classes, you are able to more easily adapt your interface to work with a variety of different screen sizes and orientations. This is a great thing. I’m currently in the middle of converting a rather large legacy project from having two different interfaces (iPhone and iPad) to using a single storyboard and size classes.
Most developers for whatever reason (time and/or money I presume) don’t bother thinking of the iPad beyond throwing their iPhone views into a split view and calling it a day. The majority of users are on the iPhone after all. The iPad has always been somewhat of an afterthought as a destination. Size classes help alleviate that since it’s so easy to now build universal apps, but that doesn’t mean you’re building an app that is going to feel at home on a 13″ tablet. It’ll feel bigger at least?
You will not see any defense by me of Windows software, especially modern Windows apps designed for 8 and 10. It’s also mostly hot garbage, and likely for all the same time and financial constraint reasons as the iPad. Software in this new app era is even harder than it used to be.
Side-by-side apps, a new feature of iOS 9 can help with some of the multitasking issues that have always plagued the iPad. For instance, try writing a paper on an iPad using Pages while looking up research in Safari. There is a lot of double-tapping of the Home button to jump between apps. Now you can at least pin both of them side-by-side, which helps. It’s still fairly rudimentary, especially compared to the types of Window management you can achieve on OS X or Windows. On the iPhone this sort of limitation makes sense. You don’t need to run multiple apps side-by-side on a phone. On the iPad though, the window management story is not that simple. There has to be something better between the bare minimum features of iOS and the window management hell you can theoretically get into on a desktop.
All of this so far and we aren’t even touching on the problems Apple and the iPad have as a software ecosystem. There’s been more than enough pixels spilt over how difficult it is to build a sustainable software business in today’s app economy where $4.99 is considered premium, trials are a thing of the past, and Apple keeps printing money off the back of Smurf Berries and other in-app purchases. The iPad Pro is a device that is begging for great third-party software from both large companies like Adobe and Apple, as well as the smaller guys like Gus at Flying Meat. A larger screen, keyboard case, and a Pencil aren’t going to solve those problems. You can’t have a Pro tablet without pro apps to go with it. There are a few great iPad apps out there, but most of them feel like minimum viable products at best.
And for the record, I don’t think OS X on these devices is the answer. I want a forward-thinking, touch-powered device this size. The iPad Pro is close, but iOS is going to hold it back. iOS could be a great operating system for professional computing, but right now the iPad remains to me a great device that is being held back by its OS being primarily for phones.
But, man. Imagine how fast the Kindle app is going to fly with 4GB of RAM!
Last year I released a book based on all my speaking engagements around Auto Layout called Achieving Zen With Auto Layout. The book was very well received when it was announced and it made me realize I enjoyed writing about technical topics again (with the absence of a publisher, everything is wonderful!).
I’m pleased to announce that I’ve spent the last few months updating the book for a second edition. This new edition of the book contains a ton of new content and converted nearly every piece of code from Objective-C to Swift.
New topics covered include:
- Working with size classes
- Active and inactive constraints
- Using layout guides effectively
- Layout anchors
- Debugging constraints using Swift (which is harder than it should be!)
- Much, much more.
If you’re new to iOS and Auto Layout or just want to learn about what’s new with layout in iOS 9 and El Capitan, this is the book for you.
Purchase Achieving Zen With Auto Layout.