Categories
Cloud Indie iOS

Vesper: A Post Mortem

A wonderful bouquet of flowers.John Gruber: “What went wrong was very simple. We never made enough money. Why we didn’t make enough money, what we should have done differently to make more money — those are complex questions (which I’ll tackle below). But what actually sunk Vesper was not complicated. Even as a relatively popular app at a relatively high price (for iOS), revenue was never high enough. Brent took a job at the excellent Omni Group in September 2014, and from that point onward the writing was on the wall. We could have, and probably should have, shut Vesper down a year ago. But we loved it too much. Or at least I did.”

Brent Simmons: “This is the last app on the App Store where I wrote all (or almost all) of the code. Odds are excellent that there will never be another app written largely by me on any app store.”

It’s hard to make decisions like this. Vesper was the result of a lot of hard work by a small group of dedicated people. Vesper will be missed, by them the most.

The most fascinating part of this entire post mortem from John and Brent is the belief that creating a Mac App first may have lead to success. Obviously these guys know their Mac brethren better than I, but I always thought a subscription model was a better option for them, and I wrote about it in 2015.

I think the idea of a sustainable business is the right way to look at this, but pricing an app at $9.99 isn’t the proper solution. The proper solution is to charge for their “fast, reliable, unlimited sync.” That’s the value, the app is just a way to get to your data.

Obviously there are a few really great companies out there making a go of it but the market has changed so dramatically from the time Brent started Ranchero. At the time the Mac wasn’t nearly as popular as it is today and the App Store model didn’t exist. Sure, you still needed a great product and had to work hard to get the word out, but people still understood the value of software. Today iOS and Mac Apps have been reduced to commodities and commodity pricing. Most people expect free and get it from companies that make their money other ways, including services, which is why I think the service is the most valuable component. Does it mean you should only do services and not native clients, no. The client side provides the great experience and the service opens the door to the magic of data flowing from one point to another. Without both sides you can still have a great experience but it may not be as great as it could be.

Thanks John, Brent, and Dave for giving us Vesper.

Categories
Apple iOS Mac

Post Mac Apple

Recently Vivek Wadhwa of The Washington Post wrote:

Apple should release a version of iOS for non-Apple devices. This suggestion will seem like heresy to the brand’s loyalists, but it may be necessary for the success of the company.

Imagine those Samsung, LG, and Xiaomi smartphones having an original Apple operating system on them rather than the imitations they are presently running. Offered the choice, users would upgrade in droves. And those users would download new applications and sign up for Apple’s subscription services, giving the company a cut of everything they purchased, as well as valuable data and marketing opportunities. Google’s Android business would finally have a formidable rival.

First off, I don’t think Apple is in bad shape because they own less of the mobile market than Android. In fact, they make more money than all Android devices combined. So the thought of being a formidable rival is kind of moot, but that’s not what I wanted to write about, just an observation.

I think macOS would be a much better OS to OEM. Why? Well, Apple is paying so much attention to iOS based devices, the iPhone in particular, they’ve ignored their laptop and desktop computers for a very long time. In fact most of their computers are rated Don’t Buy by Mac Rumors.

Mac Rumors
Mac Rumors

Of course they’ve tried this before. Before Steve Jobs returned in 1997 Apple had OEM’d Mac OS to a few partners. Those partners were doing fine at the expense of Apple. When Jobs returned it was one of the first things he killed so Apple could focus on their core business, the Mac. Fast forward 20 years and Apple is as unfocused as ever. They’re building all kinds of stuff looking for the next iPhone. Here’s a hint Wall Street, I don’t think you’ll get another iPhone-like success for many, many, years.

Anywho, back to macOS on other hardware. Since Apple hasn’t shipped new Mac hardware for professionals in a long time professionals have either created their own solutions or switched to Windows or Linux. Yes, people are switching to Windows because their Macs are not up to the task. Those of us that live on the platform feel strongly about it. I love using the Mac and macOS to do my work but most people just see it as a hammer. They don’t have an attachment to the OS or the hardware. If you can get a PC with Windows that blows the doors off a Mac Pro and your production software runs fine on Windows, why not switch?

What if there were another solution to the problem? What if Apple selected a single OEM and allowed them to create high end hardware that runs macOS? That’s what I’d prefer to OEM’ing iOS to other mobile phone makers. The professional market may appreciate it too.

I know the iPhone and iOS are killing it revenue wise. That idea seems to be the driving force behind Mr. Wadhwa’s piece, but it would be really nice to have alternative hardware designs that don’t focus purely on thinness and lightness. I still love my SUPER FAT 15in 2011 MacBook Pro. It’s perfectly suitable for people creating iOS Apps or small Mac Apps. Folks editing Audio and Video or making movie magic the likes of Pixar and ILM need powerful computers. I’m sure they’d appreciate faster Macs every year or an OEM that could deliver faster, specialized, expandable, repairable, Mac alternatives running macOS.

Categories
Development iOS

Mobile Cross Platform in C++

Will write C/C++ for foodPSPDFKit Blog: “PSPDFKit started in 2010 as an iOS-only project. Back then there was just one person working on it. 6 years later, we’re 28 people, have frameworks for iOS, Android and the Web, and our core framework even runs on OS X and Windows.”

Great piece on cross platform development using C++ and a tool from Dropbox called Djinni to help make things look native.

I’ve been toying with the idea of making RxCalc run on Android and the first thing I want to do is rewrite our Pharmacokinetics Math Library (PkMath) in C++, which ironically began life in C++ and was ported to Objective-C.

Categories
Development iOS Uncategorized

It doesn’t matter

Medium: “It surprised me to find that the vast majority of the apps in the top 100 are still building without any Swift.”

This shouldn’t be a surprise. In the end nobody cares what language you use to build your app, especially if it does what you want, performs well, and has a good design. 

Some may say I’m an old guy, so I shouldn’t be taken seriously. I will tell you this. If it ain’t broke, don’t fix it. That’s the proper attitude to have when developing software. I’m not saying you should never rewrite a section of code. On occasion that’s necessary, but if code works and doesn’t need to be touched as part of a new feature, just let it ride. You’ll be fine. 

In the end it just doesn’t matter.

Categories
Apple iOS

IT MUST BE FREE FOREVER!

A wonderful bouquet of flowers.Developing software is time consuming and challenging no matter how big or small the application. When the iPhone SDK arrived developers rejoiced. Not only did we get a great SDK, we also got the App Store. Sure, the rules were a bit arcane, but as an Indie developer you didn’t have to create and manage your own store and Apple guaranteed a safe distribution mechanism. It’s still a great thing to this day, but it could use some improvement.

Upgrade Pricing

I’m going to focus this post on upgrade pricing because it may be the single biggest improvement we could get from Apple.

There are a lot of things to like about the Apple App Store as a user. Once you find an application it’s easy to install and keep updated. Most of the time applications updates are free. It just works. As a developer, however, there have been a couple horrible expectations set during the early years. In a race to the bottom apps became extremely cheap and updates were expected to be free for the lifetime of the application. Free forever. Think about that for a minute.

A lot of applications in the App Store are native clients to a service. It’s clear services are the best way to create a viable, long term, product, but there are a lot of applications that run native and don’t use a service, don’t understand the value of their own service, or are clients to a third-party service.

One such client is Tweetbot, from the fine folks at Tapbots. It’s a very popular iOS and Mac client for Twitter. If you visit the Tapbots homepage you’ll discover the company is not operated by robots, it’s operated by three human beings. I know, crazy, right?

The reason I bring up Tapbots is the recent release of Tweetbot 4.0. This is where that whole it has to be free for life expectation comes into play.

Tapbots has managed to create another beautiful and functional version of Tweetbot. This release introduces some new features as well as being a Universal Application. I’ll let MacWorld and MacStories give you the feature lowdown.

AHHHHHH!The flip side is a bit ugly. A lot of Tapbots own customers turned on them, over the price. That’s right, Tapbots is charging $10 for their venerable Twitter client, but for a limited time you can get it for %50 off that price.

I got a lot of laughs out of the outrage over the price. It’s completely ridiculous to believe a company that sells you a quality piece of software will continue to support it for absolutely nothing.

This one is particularly great. How dare the Tapbots crew charge for their software! It’s a plot to generate revenue! The nerve!

How about the awful behavior displayed by Tapbots?

How about a little disgust over paying for an upgrade?

The upside to all of this is Tapbots will weed out an entire set of folks that don’t really care about the survival of the Independent Developer and add customers that do care. That’s a good thing.

A couple things to keep in mind as you, the customers we so desperately need, purchase our products. While Apple has given us all a great App Store it doesn’t provide a great way to offer upgrade pricing to our valued customers. It’s something I hope they change in the future. The App Store is ever evolving so I hope we’ll see this at some point.

As for Tapbots. I think they will be fine, but they do have another noose around their collective necks; Twitter. Believe it or not, Twitter limits third-party developers to 100,000 application tokens (I am aware Iconfactory and Tapbots were given more than 100,000 based on a rule that grandfathered their apps.) That said, there will be an end point in the lifetime of Tweetbot and all other third-part clients driven by that limit. Once their token limits are hit, the app should no longer be sold, and it will stop being a source of revenue for these companies. They will have to adapt.

Some parting tweets for you. The first from John Gruber that shows how customers attempt to hold App Developers hostage with horrible ratings because of certain features they — the customer — believe they’re entitled to.

Don’t hold developers hostage. It’s dumb. Remember, this is a brand new release, developed over the past 8-months. The latest version of iOS has been out for a couple weeks. Give these guys some time. They’ll give you a bunch of 3D touch love, as a free upgrade. The point is, reach out to the developer and request your favorite feature, don’t hold them hostage with a crappy review.

A few Tweets from Mark Jardine, a Tapbots co-founder, and the man that gives Tweetbot Apps their unique look and feel.

How about the classic comparison to a cup of coffee. Yes, their app is only $5.

Oh, and one from Paul Haddad, the other co-founder and the guy that brings Mark’s designs to life. This is a classic. A “celebrity” asking for a free copy of a $5 product. Nice.

You can expect free forever from VC backed companies or companies that offer services for a fee, but don’t expect everything to be free for life. People have to make a living.

Categories
Indie iOS

@FiftyThree’s Paper

Fast Company: “In the interest of simplicity, the team finally settled on two key gestures: Swipe left to turn a line of text into a bold subheading. Right to turn it into a bulleted list item. Reasoning that the most popular use case for text entry would be the creation of shopping lists and other to-do lists, they chose these two gestures to start with. Users can also hold their finger down on an item to “grab” it and change the order of the list, eliminating the need for traditional (and far more tedious on a touchscreen) copy-and-paste functionality. Other gestural formatting, they figured, could come in time, once people were used to the new gestural formatting paradigm. It is, after all, an admittedly ballsy move to tinker with how people have worked with text since the dawn of personal computing.”

This is one of the most useful and most beautifully designed iOS Apps you will ever use. Folks probably think of Paper as an application for illustrators and designers, but it’s so much more than that. If you’ve ever used Visio or Omni Graffle you can use Paper to create similar drawings. With Paper for iPhone they’ve added text to the mix to make it a world class citizen for taking notes of all kinds, think Evernote, Notes, or Vesper.

It’s definitely worth a download.

Categories
Development iOS Mac

Swift, REST, and JSON

I’m fond of a site called The Pastry Box Project. It’s a collection of thoughts and stories by a bunch of great writers, but that’s not why I mention it. I mention it because I noticed they had a nice, simple, REST API. Nifty!

PastryKit

Since I really enjoy writing code that communicates with services, and I needed a little project to learn some Swift, I thought I’d write a couple classes, I call PastryKit, that implement the Pastry Box REST API in Swift.

PastryKit is just two classes:

  1. PastryKit – Allows you to communicate with the Pastry Box REST API.
  2. Pastry – This is an entry returned by a call to PastryKit.

You can read more about The Pastry Box API on their site.

private func showPastryBaker() {
     var pastryKit = PastryKit();
     pastryKit.thoughtsByBaker("mike-monteiro", completionHandler:{(pasteries, error) in
          if (nil != error) { println(error) }
          if (nil != pasteries) { println(pasteries) }
     });
}

The Heavy Lifting

Most of the “heavy lifting” is performed in one place in PastryKit.swift in the private getWithIngredient function. It makes use of NSURLSession, which was introduced in iOS 7. Go find that function if you’d like to see how to do an HTTP GET in Swift. This is a simple case, it doesn’t require any authentication, or messing around with headers, and it only does GET’s. Doing a POST, PATCH or DELETE would, of course, require some changes, but you get the idea.

    /// getWithIngredient - worker method that does all gets
    private func getWithIngredient(ingredient: String?, completionHandler: (([Pastry]!, NSError!) -> Void)?) {
        let url = ((ingredient) != nil) ? NSURL(string: PastryBoxUrl + ingredient!) : NSURL(string: PastryBoxUrl)
        let request = NSURLRequest(URL: url!)
        let configuration = NSURLSessionConfiguration.defaultSessionConfiguration()
        let session = NSURLSession(configuration: configuration, delegate: self, delegateQueue: nil)
        let task : NSURLSessionDataTask = session.dataTaskWithRequest(request, completionHandler:{(data, response, error) in
            if (error == nil) {
                var conversionError: NSError?
                var ingredientsArray: NSArray = NSJSONSerialization.JSONObjectWithData(data, options:NSJSONReadingOptions.AllowFragments, error:&conversionError) as NSArray
                if (conversionError == nil) {
                    var pasteries = Pastry.pastryArrayFromNSArray(ingredientsArray)
                    if (completionHandler != nil) {
                        completionHandler!(pasteries, nil)
                    }
                }
                else {
                    println(conversionError)
                    if (completionHandler != nil) {
                        completionHandler!(nil, conversionError)
                    }
                }
            }
            else {
                println(error)
                if (completionHandler != nil) {
                    completionHandler!(nil, error)
                }
            }
        });
        
        task.resume()
    }

Go Get It!

The code is available on GitHub if you have need to get stuff from The Pastry Box Project in your Swift or Objective-C app.

Enjoy!

Categories
Development iOS

Sigh

Sigh: “Because you would rather spend your time building stuff than fighting provisioning.”

Just putting this here for later. Provisioning is one of the most frustrating chores I’ve ever had to do as a developer. Just Google “provisioning profile problems” and read the frustration it causes.

This is the one thing I wish Apple would spend some time on.

Categories
#twitter Development Indie iOS Mac

What happened to Twitterrific 5 for Mac?

Ollie! The Twitterrific Bird9TO5Mac: “By limiting the ability of third-party developers to create unique and useful clients for its service, Twitter is ensuring that new users will be forced to use one of its first-party solutions, whether that’s Twitter for Mac, TweetDeck, or the web. Unfortunately, none of these products are really worth using, and Twitter is shooting itself in the foot by attempting to drive users to these subpar experiences.”

There’s the problem in a nutshell. Twitter has been less than friendly to developers who can help them make a better experience for their users. Let’s say Twitter changed their rules to allow folks to develop clients that they don’t consider their bread and butter. What if you could create a client, free of limits, that wasn’t for web or mobile? This would open the door to a great update from The Iconfactory and allow other indie developers to create great native experiences for Windows or Linux. Seems like good business to me.

Categories
Apple Core Labs Business Development Indie iOS Life

Into the Fray

I Have Failed

Will code for...Back in June I decided I’d jump back out into the Freelance iOS world and make a go of it. I had a couple contracts lined up so it seemed like a good time to make another run at it. Boy, was I wrong. About that time a number of well known Indie software developers were writing about their experiences in the App Store. The market for Indie work has kind of collapsed and I can tell you the Freelance market has bottomed out in many ways. It’s difficult to get folks to understand a mobile application is a real application. I hope someone is studying the psychology surrounding this phenomenon. I know every freelance developer has experienced this in their field. You give an honest estimation of time and an associated dollar value, and you never hear from them again. I hear fellow developers saying “Yep, been there, done that.” It’s just how things work.

Some of the contract work I’ve taken over the past couple of months are jobs I should not have taken. The pay was substantially less than it should have been and at least one of the applications was so substantial in size I really should have walked away, but I didn’t. That’s a big mistake on my part, something I regret, and a mistake I cannot make again. I took the work because I needed it. It’s a horrible position to negotiate from. You have zero power.

I also had a contract that went about as sideways as one could go. That is a cautionary tale and one I hope to tell someday, but not now.

All of this is, of course, a self made disaster. I chose to take the work, it’s something I’ll have to struggle out of, in the meantime I’m back out on the market, looking for a full-time gig.

What Do I Offer?

I’m a seasoned developer. You can call me old, that’s fine, I am not a 20-something. I have a wealth of experience shipping software. I’ve lead teams of developers and I’ve been an individual contributor. I know how to ship software. I’ve been there many times.

Most of my experience lies on the client side of the world. Windows desktop and iOS primarily. I’ve written code in C, C++, Objective-C, and C#. I have had a couple of stints writing software that ran on the server; Paramount Farms and LEVEL Studios come to mind. Both times the server side code was developed using a full Microsoft stack; C#, .Net, and SQL Server.

I believe connected services are the obvious thing to be doing. Along those lines I have experience developing and consuming services. REST and JSON based services are where it’s at today, but I’ve also consumed SOAP/XML based services. It’s all data, but I really do like the simplicity of REST/JSON.

I still like writing software but I’d also be more than happy to take on a Development Lead or Program Manager role. My last full-time position, with Pelco, was leading a team of 8-12 folks (it fluctuated in size and I’m counting contracted developers) developing a C++ and C# SDK for use with the Pelco VMS and I really loved what I was doing. I didn’t leave because I was unhappy, I left because iOS was calling me.

I’d love to continue working on iOS Applications, if possible, but I’d be equally happy working on desktop or server side software. I will warn folks up front. My SQL skills are pretty crude, but doing application logic and user interface isn’t a problem and is something I quite enjoy.

Career Highlights

I’m not much of a salesman. I don’t interview well (Whiteboard code? Instant fail, test anxiety.) I say this because I’ve had some of these moments recently. That’s the bad side of me.

I thought I’d share some things I have done and are in use by millions of people worldwide.

  1. Visio – I worked on Visio for over 10-years. QA, Setup Developer, Developer Support, and Visio Engine Development. When I left in 2003 Visio was used by over 9-million people worldwide.
  2. Pelco Endura – I worked on the Pelco line of Decoders for five years. This included the Workstation, VCD, and our shared pipeline component framework; MPF (Media Processing Framework.)
  3. Pelco SDK – I worked with a talented group of folks to create a reimagined SDK. We were able to design a new object-oriented C++ and C# SDK. I love creating code for others to use.
  4. LEVEL Studios – While at level I contributed to web services used by a large Android handset manufacturer. At the time the project was handed off our client it was supporting over 8-million people worldwide.
  5. Freelance – While freelancing I helped with a few applications, some are no longer in the store, and I have created a couple apps of my own (both in desperate need of a facelift, I know.)

If I were to sum up what I can offer I’d say this. I know how to ship software, how to make those tough decisions, and I can see the big picture. I know, and understand, that business needs play a big role in product development. I can lead or follow.