Difference between SKRoutingService(...customLocations) and SKViaPoint?

We've built a route planner using "SKRoutingService.sharedInstance().calculateRouteW ithSettings(route, customLocations: points)". It works like this:

1. The user draws the route by long-taping on nodes.
2. When he is done, the nodes drawn are used as to coordinates to plot a navigation-ready route.

Sometimes it gives back the expected route, but sometimes the result is a route that's broken/off.

Could someone please explain what would be the difference between using this, and using SKViaPoint for waypoints? Do they respond to different use-cases? What is the purpose of each and how are they different?