Introducing ContactsAMI

Some say that the most useful apps are made to fulfill a need of their developers. That's certainly the case for ContactsAMI, a simple utility that I made to save myself a lot of time.

I've recently installed a VOIP PBX and phones at work (in the next few weeks I plan to write a brief tutorial about that, for beginners like I was 3 months ago), and finally something I've always wanted was within reach: dial a phone number without typing it on the phone, something we do with cell phones but seems so hard on desk handsets.

Enter ContactsAMI, a macOS app that lives in your menu bar with a complimentary plugin for your Mac's default Contacts app.

With ContacsAMI, you can initiate (originate, for Asterisk connoisseurs) VOIP phone calls using your existing PBX supporting AMI (Asterisk Manager Interface): just select who you want to call and your VOIP phone will start ringing; when you'll pick up, a new phone call will be made to the contact you selected.

ContactsAMI is now available to anyone who wants to leave the past behind and never type a phone number again.

You can try ContactsAMI for free for 7 days and experience its convenience while verifying that it is compatible with your setup; if the trial will convince you that typing phone numbers is archaic, and it absolutely is, you'll be able to purchase an unlimited license for just $ 9.99.

Never type a phone number again, let ContactsAMI make your calls!



Best of 2017

It's been a while since the last time I wrote here, so I thought to stop by and do something different for this New Year's Eve: instead of posting my favorite things of 2017 on Twitter, like I did last year, I thought about making my "best of" post a bit more permanent here on the blog. 

I'll start by saying that, as far as music, movies and TV, I believe my picks for 2016 where stronger and will resist to the passage of time better than this year's, and overall I think 2017 hasn't been the best year possible for entertainment. Or almost everything else.

On the other hand, this year I've listened to so many amazing podcasts, making a selection was terribly difficult and, while I believe I picked my favorites, there's so much good stuff out there, and so little time to listen to it, that I should probably write more about the podcasts I enjoy in the future.

But let's start. Please add drumrolls after reading every category.


Best song: Dear Hate, Maren Morris & Vince Gill


Best album: Melodrama, Lorde


Best book: Raven Rock, Garrett M. Graff


Best movie: Dogville (I know, I know, it is 14 years old... but I never saw it before; it would be really hard for me to pick a really good 2017 movie... maybe Gifted)


Best TV show (debut): Godless (I know, a western... who would have thought?)


Best TV show (continued): Halt and Catch Fire final season... it started slowly but concluded a great show perfectly


Best podcast: NPR's Up First


Best tech podcast: Welcome to Macintosh, and especially episode 15 The Orchard


Best investigative reporting podcast: I’m stretching the category a bit and choose What Trump Can Teach Us About Con Law


Best news article I read: How science found a way to help coma patients communicate


Best videogame: an easy one... Super Mario Odissey


Most moving TV moment: without a doubt, this MSNBC interview with Vice President Biden


And that’s all... here's to a great new year and best wishes!




The last few days were so exciting: Steve Troughton-Smith dug into a mysteriously early public release of HomePod's firmware and found proof that a new iPhone Pro - codename D22 - will have face unlock, Guilherme Rambo discovered the actual device icon confirming the very much speculated edge-to-edge design, and from there Allen Pike made some incredibly thoughtful mockups of how iOS could change to better suit the new form factor, and Mad Rudberg built upon his work with 4 hypothetical designs for the top notch and the bottom of the screen.

I've played along, retweeting and commenting. Federico Viticci is right:

"I haven’t felt this excitement around the new version of an iPhone from the design and developer community in years."

All this time, while appreciating the amazing investigative work and design skills displayed by the tweets and blog posts linked above, I also felt a little uneasy... I kept thinking about what Phil Schiller said to Gruber during The Talk Show Live from WWDC 2017:

"At the end of the day, it’s really great when your team has worked so hard... a couple years of your life on something... and you get the opportunity to have Craig, me or someone else present it..."

Craig Federighi was even more explicit:

"They get really angry when one of these [leaks] happens."

And now I wonder: what have I gained by knowing about this new design and exciting features 1.5 months earlier? Would I have been happier knowing most details of the iPhone on January 8, 2007? Is all this speculation fair to the people working so hard on these products we love so much?

Let me be clear: I don't criticize Steve, Guilherme, Allen and Mad for what they have posted in the last few days. I absolutely don't. I have retweeted their work, thought about it more than it was reasonable and publicly commented their findings as facts (I believe they are), so if there's guilt in this process, I'm no innocent.

The fact is, Apple events are so well crafted that, if you're into tech and don't know about a product in advance, they feel like magic. Honestly, I felt a little less magic and excitement in the last few years, because I knew so much in advance. Boy, in 2014 I told a friend a new programming language was coming days before WWDC, and I'm not good at predicting things...

I know it's impossible to avoid leaks, both from Apple's standpoint - no matter how hard they try, it's still a huge operation with thousands of people involved and tens of millions of devices manufactured before launch - and from mine as a devote user (should I disconnect from the Internet for three months? Stop reading the websites I enjoy the most?). I am also aware that this scrutiny comes from a deep love for Apple... it's doubtful things will change in the future, I don't have a solution to suggest and probably most people would not like more secrecy.

Still, I really feel for Apple's Teams working on new products (just think at the poor guy who published the HomePod firmware 😱), and it would be so nice to feel the same magic again during a keynote...



Nǐ hǎo Walk More 1.2

After an amazingly quick Sunday app review, Walk More 1.2 is here. Download it for free and tell your friends about it!

This new version introduces two localizations, Simplified Chinese and Italian, and the possibility to brag about your steps count via the iOS share sheet.

A quick note that will probably be of interest only for other fellow developers: before submitting, I've noticed a warning in iTunes Connect regarding my in-app purchases. Turns out that consumable IAPs that remove ads need to be replaced, since Apple wants that kind of behavior to be restorable and available across devices, which completely makes sense.
So, I kept the good and great "tip" in-app purchases (changing their tiers to the alternate categories with round values in the process) and replaced the "small tip" with a new "remove ads" non consumable IAP before submitting version 1.2. The approval process went smoothly, even though after submitting I worried about the lack of a restore button, usually requested for restorable purchases (I'll add it in the next version, just to be safe).

After this minor update, I have quite a few ideas for Walk More's future, but they'll be put in the parking lot™️ for a while: my August will be completely focused on the development of Tasktic 2.0.



Core Data + cloud sync = dilemma

My friend Becky recently wrote a post about the dilemma she's facing with a new, interesting app she's making.

She likes Core Data, and would like to use it for her project; she also wants to add sync capabilities, as that's a requirement for most modern apps. 

Here lies her dilemma. And my dilemma. And many developers' dilemma... There's no clear path towards a Core Data app with cloud sync.

Becky doesn't want to use Core Data + iCloud since it's deprecated. I might add, I don't want a friend to use it, because I value her sanity... when I was setting up Tasktic's sync mechanism, I spent 4 months and 3 complete rewrites before realizing my code wasn't the problem: it was the actual API that was an almost un-debuggable black box that sometimes, very rarely but still too often, lost an object during the sync process with apparently no reason, and no way to get it back.

A few weeks ago, I suggested Ensembles to Becky, since it was the solution I adopted for Tasktic and given how well it behaved for me, restoring my sanity after those awful 4 months. But the free version of Ensembles still uses Core Data + iCloud under the hood*, so it's not very future proof given the deprecation mentioned above, and on top of that there's a more modern, faster solution provided by Apple that everybody want to use: CloudKit.

CloudKit is very tempting because everyone has experienced how fast and reliable it is with and for macOS and iOS; the most important thing for an app that sync is to never, ever lose users' data, and CloudKit passes that test with flying colors.
It is also very modern, with private/public data, web support via CloudKitJS, and most important, it is what Apple has chosen for the future, and following Apple's lead is always a good idea.

The thing is, in order to get CloudKit to play nice with Core Data, you have to write most of the sync logic yourself, converting NSManagedObjects to CKRecords, handling updates, reacting to duplication, etc. It can be done, and many developers do it "by hand".

As Becky notes, it can also be done via libraries like Seam3, which is currently the best open source implementation I found (and I looked really long and hard) of a Core Data - CloudKit bridge, albeit only if you don't have many-to-many relationships in your schema...

The fact is, I really don't want a dependency for my sync code anymore, especially when starting a new project. If I were willing to accept the risk of my sync code being abandoned someday in the future, I might as well look into Realm (not that such a loved mobile stack is going anywhere, but as we've seen in the past, companies get acquired, or sometimes move on to different projects...).

Where does this leave us? To Apple, of course.

Apple made such an amazing object graph and persistence framework with Core Data, and a fantastic syncing backend with CloudKit. They never connected those dots officially, though.

Becky's post reminded me of something I really wanted (needed) for a really long time: an Apple sample project showing their idea of the best, most modern and Swifty implementation of Core Data for local persistence + CloudKit for sync implementation.

This is a step they really should take: while it's great that they provide sample projects for ARKit, data persistence and sync is top priority for a lot of developers, and it would only be appropriate for Apple to show how they think a "great" implementation should look like.

So, if you have a friend who works at the best fruit company in the world, pass along the message: the indie developer community, and especially us beginners, would love some help in this area!


* This is true only if you want to stick with native cloud solutions, like I prefer, otherwise you can also pair Ensembles with your own backend or use Dropbox: the great thing about Ensembles is that it's actually backend agnostic, but for CloudKit you need Ensembles 2, which isn't free and so it's not an option for most indie developers like myself.



An iPad, multiple users

This year Apple gave *a lot of love* to iPads: we're all in awe for how well they've implemented drag and drop, and I'm personally even happier for system-wide markup. 

The new iPad Pro 10.5" is probably the best incarnation of the most versatile tablet form factor, and the combination of a Dock and an app switcher that both feel very Mac-like and platform native at the same time made this WWDC one of the best Apple events ever for iPad users.

There is one thing, though, that iOS still misses, and it's something the operating system always had under the hood: the ability to allow multiple users to use the same device with a separate environment, giving each person in a family access to her own data, apps and settings.  They made something last year for education, but it was pretty limited in scope and a bit different from regular users' needs.

I am not saying that adopting multiple logins would be an easy feat for Apple, nor that it would be viable on all devices: since iOS apps save data inside their own app containers, I guess it would be a serious challenge for Apple engineers and app developers, and many devices haven't enough disk space to allow the comfortable coexistence of different people on one device. The list of problems wouldn't stop there: Touch ID would certainly be a requirement for quick user switching, inter-user document sharing would soon emerge as a need... the list of challenges would be long indeed.

Maybe more important than the technical reasons, which I believe Apple would be able to overcome in a reasonable amount of time if they decided to put their technical resources at work, I've read in the past that our favorite fruit company would never allow multiple users on the same iOS device, since iPhone and iPads are very personal appliances, and it's also good for business to have each family member to buy a separate one. This is an argument I don't buy: while it actually makes perfect sense for every person who can afford it to have a personal smartphone, for many households a tablet covers completely different needs, and actually most families can get by with just one iPad, and they are doing it right now.

I actually believe allowing multiple users on iPads would be great business for Apple, given how many old tablets are still around since they are already so good people don't see the need to update: make iOS 12 accept multiple users just on iPad Pros (they started at 32 gigs from the beginning and all have Touch ID and a lot of processing power), and you'll give families the most compelling reason to buy a much more expensive device (the 10.5" Pro costs almost twice as much as the new iPad, which by the way is almost too good for that price point, posing a challenge right there for Apple revenue, since it could be very tempting for most users to renounce Pencil support and some other advanced features in order to spend significantly less money).

This ship has sailed for iOS 11, but the silver lining is that now Apple has almost a year to make it happen the right way, just like they did with drag and drop.



App Store reviews, no authentication required

 A few weeks ago I've realized that Apple made a huge improvement to the App Store user review system, and I haven't seen it mentioned anywhere: we can now leave ratings and reviews without authentication! No password required, no Touch ID... just tap Write a review or simply the stars.

Maybe this has been around for a while and I didn't notice, but if you haven't realized this was possible too, there's never been a better time to leave a review for your favorite apps!