一个小型库,用于在其他流行的 iOS 导航应用中打开位置或路线。
当前支持:Apple Maps、Google Maps、Citymapper、Transit、Lyft、Uber、Navigon、Waze、DB Navigator、Yandex.Navi 和 Moovit。
知道任何其他可以通过 URL 方案或通用链接打开的导航应用吗?请打开一个问题/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()
有一些额外的参数,具有默认值,您可以根据需要更改。最重要的或许是起始位置,当然也可以指定。如果留空,则默认为大多数应用的当前位置。
还可以指定一种交通方式,这将对选择器中的不受支持的应用进行筛选。请注意,尝试直接使用特定的交通方式启动应用将验证该应用是否支持该方式,如果不支持,则抛出 Error.unsupportedMode
。
注意
请注意,为了使 .isInstalled()
、.presentPicker()
和 .createPicker()
正常工作,您需要事先将必要的URL方案添加到应用的 Info.plist
文件中。有关更多信息,请参阅 Apple 文档。必要URL方案可以在这里找到。您仍然可以选择通过 Karte.launch(app:to:)
启动应用程序,无论是否已注册URL方案,尽管如果应用不存在,自然不会发生任何事情。别忘了现在连 Apple Maps 都可以被“卸载”了。
您需要添加到 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 可以通过 Carthage/Punic 和 Cocoapods 获取,任选其一。
# Carthage
github "kiliankoe/Karte"
# Cocoapods
pod 'Karte'
致谢
本库基于 CMMapLauncher 开发。不幸的是,该库的开发似乎已经停止,因此这是用 Swift 重写的实现,包含了一些更改和其他应用程序,使使用更加愉快。
作者
Kilian Koeltzsch,@kiliankoe
“Karte”是什么意思?
这是德语中对“地图”的翻译,看起来挺合适