使用 Cocoa 命令行工具中的特定坐标打开 OS X Apple 地图

Opening OS X Apple Maps with specific coordinates from Cocoa command line tool

我正在尝试启动本机地图应用程序并在我的命令行工具中显示 OS X 中的特定坐标。

我找到了三个选项:

我试过第一个:

NSString *url = [NSString stringWithFormat:@"http://maps.apple.com/?q=%@&ll=%f,%f", user[@"realName"], geo.latitude, geo.longitude];
[[NSWorkspace sharedWorkspace] openURL:[NSURL URLWithString:url]];

(生成完全有效的字符串)

但是没用。它什么都不做。没有打开,没有错误,没有警告。然后我去了第二个选项。我不知道如何做第二个,所以我找到了 NSTask。我找到了这个答案: 并且我已经将这个 URL 作为参数传递了:http://maps.apple.com/?q=Example&ll=12.345,23.456 但我得到了:

如何从 Cocoa 命令行工具打开带有特定点的地图?

这是 Apple 提供的一些 documentation about Map Links

当我输入 http://maps.apple.com/?ll=12.345,23.456 时,地图应用程序会打开一个空白的米色屏幕(因为坐标似乎位于苏丹的沙漠中央)。

从命令行,我能够做到 open "http://maps.apple.com/?q=Cupertino 并且效果很好。

显然,您的 URL 字符串无效,因为其中包含 space。因此,[NSURL URLWithString:url] 返回 nil

不要使用字符串格式来构建 URLs。不要构建可能无效的 URL 字符串,然后尝试通过调用 -stringByAddingPercentEscapesUsingEncoding: 来修复它。您无法正确地对整个 URL 字符串进行百分比转义编码。每个组件都有不同的 valid/invalid 个需要转义的字符。

最好的方法是使用 NSURLComponents 从零件构建您的 URL。

如果您不能这样做,请在 URL 的每个组件上使用 -stringByAddingPercentEncodingWithAllowedCharacters:,然后再将它们连接在一起。对于查询组件,您将使用 URLQueryAllowedCharacterSet.