Google Maps SDK for iOS 尝试在 iOS 4.3 上运行

5

我成功地将sdk与我的应用程序集成。 我的应用程序旨在与iOS6的Google Maps sdk和Apple的UIMapKit一起运行, 并且适用于iOS 4.3和5.x。 由于我添加了google maps框架,iOS 4.3将不再运行。 我将GLKit.frameworkGoogleMaps.framework更改为“可选”, 但是在应用程序启动之前就会出现dyld: Symbol not found: _NSFileProtectionCompleteUntilFirstUserAuthentication错误。 需要您的帮助 :-)


你好,你是否按照这份文档 https://developers.google.com/maps/documentation/ios/start 集成到你的应用程序中了? - DD_
当然。它已经在iOS6上运行,并且不会在iOS5上崩溃。 - tomeron11
但是我申请了API密钥后还没有收到任何回复!!有什么想法为什么会这样? - DD_
只是出于好奇,为什么你还在支持4.3?如果你看一下当前的使用情况,几乎没有人在使用它。 - Dancreek
@Dancreek:在过去的一个月中,大约有8%的用户使用4.x版本,所以如果可能的话,我不想切断他们的服务。 - Saxon Druce
2个回答

阿里云服务器只需要99元/年,新老用户同享,点击查看详情
3
我的应用程序在iOS 4.3上运行良好,使用可选的GLKit.frameworkGoogleMaps.framework,并且如果我删除对Google API的所有调用,则此应用程序可以正常运行。可能是由于您的其他代码或其他框架引起了对NSFileProtectionCompleteUntilFirstUserAuthentication的引用吗? 更新:实际上上面的说法是错误的。我忘记在说明书的第7步中包含-ObjC链接器标志。没有-ObjC,应用程序能够在iOS 4.3上正常运行。在iOS 6上没有-ObjC标志,调用[GMSServices provideAPIKey]成功,但调用[GMSMapView mapWithFrame:camera:]会静默失败(返回nil),因此这不是一个选项。有了-ObjC标志,在iOS 4.3上我得到了与_NSFileProtectionCompleteUntilFirstUserAuthentication相关的相同错误。

我尝试将-ObjC更改为-force_load $(PROJECT_DIR)/GoogleMaps.framework/GoogleMaps,以仅强制加载Google Maps API而不是其他库,但它仍在iOS 4.3上失败。

我认为-ObjC-force_load正在覆盖使GoogleMaps.framework成为可选的设置。

此外,在iOS 5.0上,我遇到了关于_NSURLIsExcludedFromBackupKey的类似错误。我猜它会在iOS 5.1上工作。@ tomeron11,您测试的是哪个版本的5.x?

更新2:

感觉像一个可怕的hack,但是将以下内容添加到项目中的一个.m文件中可以使其在iOS 5.0上运行:

NSString* const NSURLIsExcludedFromBackupKey = @"NSURLIsExcludedFromBackupKey";

这似乎不会在iOS 6.0上造成问题,即使该符号已被定义两次,但我不确定是否可以信任。

对于iOS 4.3,我尝试着做了等效的操作,通过添加:

NSString* const NSFileProtectionCompleteUntilFirstUserAuthentication = 
    @"NSFileProtectionCompleteUntilFirstUserAuthentication";
这样可以解决关于_NSFileProtectionCompleteUntilFirstUserAuthentication的错误,但是接下来我会得到以下错误:
dyld: Symbol not found: _OBJC_CLASS_$_NSMutableOrderedSet

我不确定在iOS 4.3上是否有一种方法可以欺骗链接器,让它看到NSMutableOrderedSet的虚拟版本。

更新3:

SDK文档表示最低支持平台为iOS 5.1

谷歌已经关闭了该错误报告,认为无法修复, 因此似乎没有办法在5.0或更低版本上使其正常工作。

更新4:

谷歌已将错误重新归类为增强需求

更新5:

SDK的最新版本1.1.0现在在iOS 5.0上启动时不再崩溃。

然而,Google不会修复iOS 4.x上的崩溃问题

由于SDK只正式支持iOS 5.1+,虽然在iOS 5.0上启动时不再崩溃,但如果您尝试创建一个GMSMapView,它会崩溃并显示以下错误信息:

Google Maps SDK for iOS仅支持iOS 5.1+

如果您使用了以前用于使其在5.0上启动时不崩溃的hack,即:

NSString* const NSURLIsExcludedFromBackupKey = @"NSURLIsExcludedFromBackupKey";

然后SDK将在iOS 5.0上运行。看起来可以工作,但这可能不是一个好主意,因为它并未得到Google的官方支持。


我在Google的问题跟踪器上提出了这个错误报告,链接在这里:http://code.google.com/p/gmaps-api-issues/issues/detail?id=4750 - Saxon Druce
在5.0版本上它无法工作。我收到了“dyld: Symbol not found: _NSURLIsExcludedFromBackupKey”的错误信息。对于错误的信息抱歉。 - tomeron11
iOS6现在已经推出,对于那些有固执客户的人来说很不幸。 - Adam Waite
随着SDK版本1.5的发布,不再支持iOS5。向后兼容版本在这里:pod 'Google-Maps-iOS-SDK', '~> 1.4.3' - Adam Waite

0

我 Foundation.framework 和 UIKit.framework(UIActivityViewController 在1.5 GMSdk 中也会崩溃.....) 设置在 "option" 模式下 (weak a no seen in combobox)。NSMutableOrdererSet 和 NSURLIsExcludedFromBackupKey 位于这个框架组件中。 我没有测试过这种解决方案在iOS 5.0以下的工作情况,但从5.0到6.0没有崩溃,或者请不要使用谷歌地图SDK从5到6而是使用MKMapView!

P.S. 对不起,我的英语不好!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,