drop-in solution to show routes directly inside your iOS App Now supporting the Google Maps SDK for iOS!

Did you ever wonder why Apple didn’t provide a way to show directions directly on top of MKMapView and force you to take your users to their built-in Maps.app just to guide them somewhere?
We too, that’s why we built MTDirectionsKit. MTDirectionsKit is an easy-to-use and easy-to-integrate framework for iOS that let's you do just that - guiding your users in the easiest and most professional way available!

Try out the free demo!

Get it now and save countless hours of development!

Purchase

MTDirectionsKit comes in three flavors.

  • Full
    Source Code

    € 499 EUR | $ 699 USD

    • Full Source Code
    • Precompiled Binary
    • Google, MapQuest & Bing APIs
    • Textual instructions
    • Hand-crafted turn type images
    • Alternative directions
    • Intermediate goals
    • MapKit support
    • Google Maps SDK support

    Purchase

  • MapKit+Google
    Binary

    € 299 EUR | $ 399 USD

    • Precompiled Binary
    • Google, MapQuest & Bing APIs
    • Textual instructions
    • Hand-crafted turn type images
    • Alternative directions
    • Intermediate goals
    • MapKit support
    • Google Maps SDK support

    Purchase

  • MapKit
    Binary

    € 199 EUR | $ 299 USD

    • Precompiled Binary
    • Google, MapQuest & Bing APIs
    • Textual instructions
    • Hand-crafted turn type images
    • Alternative directions
    • Intermediate goals
    • MapKit support

    Purchase

All 1.x updates of MTDirectionsKit are included.

The license is valid for a single app bundle id. Contact us to get a discount for additional licenses.

MTDirectionsKit is...

For a list of supported features visit the section Updates

Smart

MTDirectionsKit makes it as easy as possible for you to get the best results for your customers. It automatically detects whether the user preferrs the metric or the imperial measurement system as well as his preferred locale and does all computations in either kilometers or miles, depending on this preferrence. Of course you can overwrite these automatically determined values, if you want to.

Versatile

MTDirectionsKit can be used with 3 different APIs: Google Directions API, MapQuest Open Directions API and Bing Routes API. About every aspect of MTDirectionsKit is configurable and allows you to customize it the way you need to. MTDirectionsKit can be used with Apple's MapKit as well as the Google Maps SDK for iOS and can moreover specify intermediate goals along your route, request alternative routes or display textual instructions to your users.

Easy to use

MTDirectionsKit handles a lot of pitfalls you can encounter during development for you and helps you in every aspect possible. MTDirectionsKit makes it really hard for you to make it fail - but reports useful information in case you "succeed".

Beautiful

The directions drawn on top of MKMapView are beautifully handcrafted and look stunning on retina displays as well as regular ones, just take a look at the screenshots provided. You can easily tint the overlay in any color you want. MTDirectionsKit also features beautiful default turn type images for textual instructions, created by Manuel Maly (Creative Pragmatics).

Fast

MTDirectionsKit parses the data in the background by embracing the use of GCD to not slow down your App and to keep it as snappy as it always was.

Reliable

MTDirectionsKit is unit-tested to ensure it keeps working as you and your users would expect.

FAQs

Can I use MTDirectionsKit in combination with the Google Maps iOS SDK?

Starting with MTDirectionsKit 1.7 we have support for the Google Maps iOS SDK in addition to Apple's MapKit. This allows you to use all the great features of MTDirectionsKit while using tested and trusted Google map data in your app.

Which Features of MTDirectionsKit are supported by which APIs?

 MapQuestGoogleBing
Alternative Routes
Intermediate Goals
Route Optimization
Textual Instructions
Turn Type Images
Reverse Geocoding
Start and Destination
Intermediate Goals
Atomar Adresses

I want to provide my own routing data, can I use MTDirectionsKit with my custom API?

Starting with MTDirectionsKit 1.4 you can use your own routing data by providing a custom request and parser (MTDDirectionsAPIRegisterCustomRequestClass, MTDDirectionsAPIRegisterCustomParserClass). Have a look at the Demo to see it in action.

What are the exact Terms of Usage for the provided APIs?

MapQuest Open Directions: Terms of Use
Google Directions: Terms of Service
Bing Routes: Terms of Use

Can I use the Google Directions API on iOS 6?

Starting with MTDirectionsKit 1.7 the Google Directions API can be used in combination with the Google Maps SDK for iOS.

Unfortunately Google's Terms of Service prohibit using their data in combination with other map data then Google‘s. That means you can use the Google Directions API on iOS 4 and iOS 5, but are not allowed to use it on iOS 6 as long as you are using MapKit to display your maps. You can easily switch to one of our other supported data providers - MapQuest as well as Bing can be used on iOS 6.

Is it possible to upgrade from the binary version to the full source version?

An upgrade is possible, contact us for more information.

I see the error '-[MTDWaypoint descriptionForAPI:]: unrecognized selector sent to instance', what can I do?

You most likely forgot to add -ObjC to your Other Linker Flags section in the Build Settings.

Who created the stunning looking turn type images for MTDirectionsKit?

The images were hand-crafted by Manuel Maly from Creative Pragmatics. Contact him if you need help with your graphics.

Updates

Version 1.7.0

Released on May 13th, 2013
  • NewSupport for the Google Maps SDK for iOS
  • NewChanged MTDDirectionsSupportsAppleMaps() to MTDDirectionsUsesAppleMaps() and changed semantics: returns NO, if the Google Maps SDK for iOS is present
  • FixFixed a possible crash when deallocating an instance of MTDMapView while directions are currently requested
  • FixFixed a bug affecting MTDDirectionsSetLocale() when called very early in the lifecycle of your app
  • FixNew protocol MTDMapView, changed delegate calls from (MTDMapView *) to (id)

Version 1.6.1

Released on February 6th, 2013
  • NewSupport for HTTPS when requesting directions
  • NewSupport for avoiding toll roads as well as highways when requesting directions
  • NewAdded -[MTDMapView distanceBetweenActiveRouteAndCoordinate:] to determine minimum distance between given point and active route
  • NewNew delegate call mapView:colorForRoute:ofDirectionsOverlay: to allow different colors for each route
  • NewNew delegate call mapView:shouldActivateRoute:ofDirectionsOverlay: to give fine-grained control whether a route can be activated by tapping on it
  • NewNew delegate call mapView:didUpdateUserLocation:distanceToActiveRoute:ofDirectionsOverlay: that includes the distance between the user location and the active route of the directions overlay
  • NewAdded -[MTDRoute containsTollRoad] property to check if a route contains toll roads
  • NewMTDManeuverTableViewController now contains a header/footer cell with information about departure, destination and the route
  • FixCalling MTDOverrideClass with Nil as classToUse removes a previously overridden class
  • Fix[MTDWaypoint coordinate] is now readonly
  • Fix[MTDWaypoint waypointForCurrentLocation] updates its coordinate property when user location gets updated

Version 1.6.0

Released on December 18th, 2012
  • NewBuilt-in images and UI for maneuvers with textual instructions
  • NewPossibility to override the overlay view class used for customized direction overlays
  • NewSupport for UIAppearance (iOS 5 and up)
  • NewPossibility to configure the list of supported locales via supported-locales.plist
  • NewPossibility to customize the padding when zooming to show an overview of the directions
  • NewAdded - [MTDMapView activateRoute:] to programatically activate a route
  • FixGreatly improved tap detection for selecting active route
  • FixFixed potention crash in - [MTDMapView setDelegate:] when called from dealloc
  • FixAdd missing delegate forward for - [MKMapViewDelegate mapView:didChangeUserTrackingMode:animated:]
  • FixFixed possible memory leak in MTDXMLElement
  • FixAdded more turn types (turn left/right to stay, roundabout) and improve turn type mapping from APIs
  • FixFixed Bing pedestrian mode
  • FixDynamically generate route name for Bing API from most significant maneuver
  • Fixcustom isEqual: methods now correctly work with null values

Special thanks to Ortwin Gentz from FutureTap for contributing to this release as well as to Manuel Maly for creating the turn type images for MTDirectionsKit!

Version 1.5.0

Released on October 12th, 2012
  • NewSupport for Maneuvers with textual instructions
  • NewChange the language of the instructions with MTDDirectionsSetLocale
  • NewNew delegate call mapView:didActivateRoute:ofDirectionsOverlay: to inform about changes of the active route
  • NewNSCopying support for MTDDistance, MTDAddress and MTDWaypoint
  • NewQuery the version of the framework with MTDDirectionsKitGetVersionString()
  • NewShortcut for creating a waypoint from an address string with +[MTDWaypoint waypointWithAddressString:]
  • FixFurther improved gesture recognizer support, fixed a problem on iOS 6
  • FixHighly improved parsing performance for MapQuest and Bing API - now matching Google performance

Version 1.4.0

Released on September 29th, 2012
  • NewSupport for Bing Maps Routes API
  • NewSupport for custom APIs with MTDDirectionsAPIRegisterCustom(Request|Parser)Class
  • New Support for armv7s (iPhone 5), dropping support for iOS < 4.3 and armv6 (write us if you need armv6 support)
  • NewFully tested under iOS 6
  • NewMTDDirectionsOpenInMapsApp was adjusted foriOS 6 and supports [MTDWaypoint waypointForCurrentLocation]
  • NewAdded - [MTDAddress addressDictionary] - is used when opening directions in the built-in Maps App
  • Fix zoomToShowRegionAnimated now shows a region including all routes, when alternative routes are requested
  • FixAddress parsing now works when the waypoint doesn't have a valid coordinate
  • Fix Custom gesture recognizer on MapView is only enabled, when alternative directions are visible
  • Fix Custom gesture recognizer doesn't interfere with other gesture recognizers of the MapView

Version 1.3.1

Released on September 3rd, 2012
  • NewSupport for Google Maps API for Business
  • NewThe current location can be specified as a goal and gets automatically resolved, if not yet known

Version 1.3.0

Released on August 8th, 2012
  • NewSupport for alternative Routes!
  • New Addresses of intermeidate goals now get parsed as well
  • NewIntermediate goals now get reordered and appear in the same order returned by the API, if the order got optimized
  • FixEven greater code coverage (Unit Tests)

Version 1.2.1

Released on July 17th, 2012
  • NewGoogle Directions now supports Transit Directions
  • NewBetter address parsing (reverse geocoding) for Google and MapQuest
  • New MTDDirectionsOverlay now has information about intermediate goals
  • Fix New Google API URL

Version 1.2.0

Released on July 1st, 2012
  • NewPossibility to specify the thickness of the route overlay
  • NewOptimizing the route when providing intermediate goals is now optional
  • Fix Turned on a lot of warnings in the compiler and make sure none of them exists in MTDirectionsKit
  • Fix More AppleDoc Documentation

Version 1.1.1

Released on June 4th, 2012
  • Fix MapQuest API calls now support optimizing the route to allow for reordering of intermediate goals

Version 1.1.0

Released on June 3rd, 2012
  • NewSupport for intermediate goals along a route
  • NewMTDWaypoint can wrap a CLLocationCoordinate2D or an address string
  • FixSeveral checks for more defensive coding, more logging
  • FixReplace CLLocationCoordinate2D/NSString APIs with MTDWaypoint APIs
  • FixRemoved mapView:willStartLoadingDirectionsFromAddress:toAddress:routeType: delegate call and changed API of other delegate calls to use MTDWaypoint instead
  • FixAdjusted NSNotification userInfo dictionary to match new delegate protocol

Version 1.0.0

Released on June 1st, 2012
  • New Initial release of MTDirectionsKit supporting Google Directions API and MapQuest Open Directions API

Screenshots

MTDirectionsKit for Google Maps iOS SDK
MTDirectionsKit showing textual instructions
Screenshot of 2 iPhones
Directions to NSConference, from Reading
MTDirectionsKit gives you alternatives as well
Vienna University of Technology
Vienna
Screenshot of directions on MapView and textual instructions
Code example

Documentation

Code Documentation

All public classes of MTDirectionsKit are fully documented using AppleDoc.
See the MTDirectionsKit Documentation for further information.

Integration

There are basically 2 ways to integrate MTDirectionsKit into your App:

  • 1. Include the binary framework MTDirectionsKit.framework

    This is the easiest way to integrate MTDirectionsKit into your App and therefore the recommended one. Just drag MTDirectionsKit.framework onto the Frameworks-group of your App, you don't need to setup a User Header Search Path or a Target Dependency.

    Next add the import statement

    #import <MTDirectionsKit/MTDirectionsKit.h>

    everywhere you want to use MTDirectionsKit and you are good to go. See the image for visual hints on how to integrate MTDirectionsKit.framework:

    MTDirectionsKit framework

  • 2. Add MTDirectionsKit.xcodeproj as a dependency

    First copy the whole MTDirectionsKit project into your App's root folder. Then locate the "MTDirectionsKit.xcodeproj" file inside your App's root folder and drag it onto the root of your Xcode project's Frameworks-group.

    Add MTDirectionsKit as target dependency of your target under the tab Build Phases and drag libMTDirectionsKit.a onto the section 'Link Binary with Libraries' of your target.

    Next add the import statements

    #import <MTDirectionsKit/MTDirectionsKit.h>

    everywhere you want to use MTDirectionsKit and you are good to go. See the image for visual hints on how to integrate MTDirectionsKit.framework:

    MTDirectionsKit Dependency

Independent of which way to integrate MTDirectionsKit you choose, you have to add

  • CoreLocation.framework
  • MapKit.framework
  • libxml2.dylib

to your target's linked libraries found under Build Phases. Moreover open the Build Settings of your project and add -ObjC to the Other Linker Flags section. If you want to use the built-in images for the textual instructions make sure to alse add MTDirectionsKit.bundle to your projects resources. You can find MTDirectionsKit.bundle under the Resources folder of MTDirectionsKit.


MTDirectionsKit.bundle

Google Maps SDK for iOS

If you use the Google Maps SDK version of MTDirectionsKit be sure to checkout Google's guide for integrating their SDK at https://developers.google.com/maps/documentation. Official support is currently provided for the Google Maps SDK version 1.2.2, other versions may be unstable or buggy.

Sample Usage

Requirements

The source code version of MTDirectionsKit needs Xcode ≥ 4.5, iOS Base SDK ≥ 6.0 and Clang LLVM >= 3.1 to compile, because it uses handy new features provided by Clang. It doesn't work with the old LLVM GCC compiler. MTDirectionsKit works on a deployment target of ≥ iOS 4.3 (≥ iOS 5.1 for Google Maps SDK version) on armv7 and armv7s and can be used in ARC as well as non-ARC applications.

License

Disclaimer

What our clients say

  • “Where To? uses MTDirectionsKit to display directions to all places found using the app. It was a pleasure to use and very easy to integrate.”

    Ortwin Gentz, FutureTap futuretap.com →
  • “My time is limited but I still want to create Apps with the best possible experience for the user. If you use MapKit in your App, MTDirectionsKit is a must!”

    Manuel “StuFF mc” Carrasco Molina objcgn.com →
  • “Funny, almost every time I mail you about a feature you are about to release it. This is amazing customer service!”

    Bernhard Obereder atob-pro.at →
  • “A lot of our customers want features that separate their apps from the boring mass. By using MTDirectionsKit we were able to enhance our apps that utilize MapKit and delight their users.”

    Susanne Lehner, NOUSGuide Inc. nousguide.com →
  • “We're extremely happy with MTDirectionsKit. It saved us a ridiculous amount of time and it helped a lot making our app complete.”

    Martin Zehetner, Tailored Media GmbH tailored-apps.com →
  • “I really enjoy working with MTDirectionsKit. I love the level of customization offered and the code is very clean and of very high quality.”

    Christoph Lederer lederersoftware.at →
  • “I've integrated MTDirectionsKit within a few minutes and everything works like a charm. Thank you for this great framework!”

    Manfred Scheiner, PocketScience pocketscience.com →
  • “MTDirectionsKit is the perfect fit for our upcoming iOS App. It's the easiest way to help our students find the lecture halls in time.”

    Vienna University of Technology tuwien.ac.at →