During keynote of WWDC 2018, Apple announced third-party applications will be added to CarPlay ecosystem. We were excited, both personally and professionally. At that point, we were using MirrorLink and SDL and a couple of proprietary connectivity solutions (Bosch, Harman, Abalta etc.), but each of those technologies had their own limitations that prevented them from being widely used. By 2018, many new vehicles were shipped with support for CarPlay with a strong positive trend and there were already a billion compatible devices on the market so CarPlay was clearly the way to go.

The Wait

Mireo slang for WWDC keynotes is “the mass”, it is the single most important event for our iOS developers and fans of Apple technologies. For us in Croatia, it starts in the evening so we watch it at home and discuss it at the office next morning. WWDC 2018 was an exception as support for third-party navigation applications in CarPlay was announced. We got very excited and started looking at the new SDK as soon as Apple made it available. Documentation Apple provided was very basic and SDK didn’t reveal much either; however, we implemented everything we could related to CarPlay and tried to get it to work in one of our CarPlay enabled cars. No luck.

It seemed we had to wait for a few days to hear what Apple has to say in a session called “CarPlay Audio and Navigation Apps”. After watching video of the session we had basic understanding of how Apple intended navigation apps to implement CarPlay support, but we also found out that a special entitlement needs to be added to our app’s provisioning profile. We applied for the entitlement immediately and started implementing everything demonstrated in “CarPlay Audio and Navigation Apps” session. Luckily, our iOS application, Genius Maps, is based on our automotive grade navigation solution and has built in support for multiple displays, paired with our experience with other connectivity layers like Bosch mySpin, Weblink, SDL we were well equipped to take on CarPlay. We received the entitlement on June 18, full two weeks after the keynote. The wait was over, finally!

First Run

By the time we received the entitlement, we had the basic functionality in place. Apple provided additional documentation with the entitlement which answered some of our (many) questions. We prefer working with actual devices instead of simulators, so we identified a couple of head units with CarPlay support used in our automotive projects which were no longer actively developed for and we repurposed them as development units for CarPlay integration.

Our “first run” failed miserably, but it didn’t take us long to get the map projected and get basic turn-by-turn information to display in CarPlay. Team’s morale was high and we were all excited, but we knew we had a challenging task ahead.

We needed to test and understand each of the user interface elements provided by the CarPlay framework to be able to assemble a fully functional navigation user interface. To make things even more challenging, summer had just started which meant each team member was off for a couple of weeks. These circumstances combined with no prior announcement from Apple made our resource planning really difficult. Still, we were determined to have a working product by September when iOS12 was expected to officially launch. At the same time, we were cautious about the features we put in as we didn’t want to overstep Apple’s UI guidelines. The guidelines were vague and left a lot of room for interpretation, for example “The base view must be used exclusively to draw a map. Do not draw interactive user interface elements in the base view” or “Use each provided template for its intended purpose. For example, maneuver images must represent a maneuver and cannot represent other content or user interface elements“. CarPlay framework did not provide any means to display current speed limit, yet we wanted to have that feature as we found it very useful, looking at the guidelines it seemed like to could be allowed, but not quite. It turns out it is allowed. At least it is for now…

The Summer

Implementing all the workflows we designed proved to be more difficult than expected. We quickly realised that CarPlay frameworks were still under heavy development with quite a few bugs. We tried reporting those bugs but it took Apple months to respond. Those reports might have been useful for Apple, but they were of no use to us. There was no community to turn to with questions. We gathered there were a few teams like ours scattered throughout the world dealing with the same issues, but everyone was keeping quiet. To make things more interesting, Apple surprised us with changes to the SDK every few weeks which sometimes made us rethink our approach to some implementational details.

We were persistent and managed to push through those problems, and by the end of August, we had a fully functional CarPlay integration with turn-by-turn guidance, map control, search and basic settings. It was time to test it.

Our test drivers are passionate Apple users, so they happily embraced the task. After intense few weeks, we had ironed out whatever bugs we could find and verified the implementation on a number of cars from various manufacturers. We were ready and awaited official iOS12 release to publish our update in the week after iOS12 releases.

Cold Shower

The launch of iOS12 finally came and as we were preparing to release Genius Maps we realised that Apple only provided CarPlay entitlement for development purposes and that Genius Maps does not feature CarPlay support when uploaded to AppStore. We immediately contacted Apple and asked for their support. We didn’t get any response, so we tried again, and again, and again. We were desperate, after all the time and effort put into CarPlay integration we were missing the boat. After exploring all the options, we dug out an ancient contact we had in Apple, a Senior Partnership Manager for Worldwide Developer Relations. He forwarded our cry for help to the right person and within a few days we received distribution CarPlay entitlement. We submitted Genius Maps for review and cautiously awaited results. We were quite pleased as Genius Maps was approved within a few days and we finally released it about a month and a half after iOS12 was launched.

Lessons Learned

Working with new technologies is always challenging, specially so when they are targeted at a very small number of developers competing be the first to implement it. On the other hand, we are extremely proud of how our team navigated through those difficult circumstances.

When working with something that almost feels like an experimental technology it’s good to be close to the source. We had very little support from Apple, at least in “real time”. We believe that reaching Apple and having their support would have been much easier if we were a Silicon Valley based company.

Implementing support for CarPlay was an empowering experience and we are happy the opportunity arose when it did. Many of us drive CarPlay enabled cars and use CarPlay on a daily basis. Apple is strongly invested in CarPlay and it seems they have a full pipeline of improvements for CarPlay in both software and hardware. We are happy to be onboard.