Karte

Travis GitHub tag (latest SemVer)

用于在其他流行的 iOS 导航应用中打开位置或路线的小型库。

目前支持的应用包括 Apple 地图、Google 地图、Citymapper、Transit、Lyft、Uber、Navigon、Waze、DB Navigator、Yandex.Navi 和 Moovit

知道任何其他可以通过 URL scheme 或通用链接打开的导航应用吗?请提交 issue 和/或 PR 🙃

快速开始

检查应用是否已安装。

if Karte.isInstalled(.citymapper) {
    print("Citymapper is installed 🎉")
}

启动带有导航的特定应用。

let coordinate = CLLocationCoordinate2D(latitude: 52.5162746, longitude: 13.3755153)
let berlin = Karte.Location(name: "Brandenburger Tor Berlin", coordinate: coordinate)
Karte.launch(app: .googleMaps, destination: berlin)

或者直接向用户展示一个操作表,其中列出了所有已安装的导航应用以供选择。

Karte.presentPicker(destination: location, presentOn: viewController)

如果你需要更多地控制如何呈现操作表(例如在 iPad 上),你可以从 Karte 获取一个已配置的操作表,而无需直接呈现它。

let alert = Karte.createPicker(destination: location)

.launch().presentPicker().createPicker() 有一些额外的参数,这些参数都设置了默认值,你可以根据自己的喜好更改它们。最重要的是要注意起始位置,当然也可以指定。留空则在大多数应用中默认为用户的当前位置。

也可以指定交通方式,这将从选择器中过滤掉不支持的应用。请注意,尝试使用特定的交通方式直接启动应用将验证该应用是否支持该模式,否则会抛出 Karte.Error.unsupportedMode 错误。

注意事项

请注意,为了使 .isInstalled().presentPicker().createPicker() 工作,你必须事先在你的应用的 Info.plist 中添加必要的 URL schemes。有关此的更多信息,请参阅 Apple 的文档。必要的 URL schemes 可以在这里找到。你仍然可以自由地尝试通过 Karte.launch(app:to:) 启动应用,而无需考虑注册的 URL schemes,尽管如果应用不存在,这显然可能导致没有任何反应。别忘了,即使是 Apple 地图现在也可以“卸载”了 😉

要添加到你的 Info.plist 中的部分应该如下所示

<key>LSApplicationQueriesSchemes</key>
    <array>
        <string>comgooglemaps</string>
        <string>citymapper</string>
        <string>transit</string>
        <string>lyft</string>
        <string>uber</string>
        <string>navigon</string>
        <string>waze</string>
        <string>dbnavigator</string>
        <string>yandexnavi</string>
        <string>moovit</string>
    </array>

安装

Karte 可以通过 SwiftPM 获取。只需将 https://github.com/kiliankoe/Karte 复制到 Xcode 中即可 ✌️

鸣谢

这个库基于 CMMapLauncher。不幸的是,该库的开发似乎已经停止,所以这是用 Swift 重新实现的版本,包括一些更改和其他应用,以使使用更加愉快 😊

作者

Kilian Koeltzsch, @kiliankoe

“Karte”?

它是德语中“地图”的意思,看起来很贴切 🤷‍♀️