适用于iOS的Google Maps SDK尝试在iOS 4.3上运行

时间:2012-12-25 11:55:49

标签: ios google-maps-sdk-ios

我已成功将sdk与我的应用集成。 我的应用程序旨在与Google Maps sdk for iOS6一起运行, 对于UIMapKit 4.3和5.x,使用Apple iOS。 自从我添加了google maps框架, ios 4.3将不再运行。 我将GLKit.frameworkGoogleMaps.framework更改为“可选”, 在应用程序开始之前我得到dyld: Symbol not found: _NSFileProtectionCompleteUntilFirstUserAuthentication。 需要你的帮助:-)

2 个答案:

答案 0 :(得分:3)

我的应用在iOS 4.3上运行正常,GLKit.frameworkGoogleMaps.framework设置为可选,如果我删除了对Google API的所有调用。

NSFileProtectionCompleteUntilFirstUserAuthentication的引用是否可能是由您的某些其他代码或其他框架引起的?

<强>更新

其实上面的错误。我忘了在the instructions的第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:

感觉就像一个可怕的黑客攻击,但是将以下内容添加到项目中的一个.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文档说明了minimum supported platform is iOS 5.1

Google有closed the bug report as WontFix,因此似乎没有办法让它在5.0或更低版本上运行。

更新4:

Google有reopened the bug as an Enhancement

更新5:

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

然而,Google will not be fixing the crash on iOS 4.x

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

  

适用于iOS的Google Maps SDK仅支持iOS 5.1 +

如果您使用的hack在5.0上启动时不会崩溃,即:

NSString* const NSURLIsExcludedFromBackupKey = @"NSURLIsExcludedFromBackupKey";

然后SDK将在iOS 5.0上运行。它似乎有效,但它可能不是一个好主意,因为它没有得到谷歌的正式支持。

答案 1 :(得分:0)

我的Foundation.framework和UIKit.framework(UIActivityViewController在1.5 GMSdk中也崩溃了......)设置在模式“选项”中(在组合框中没有看到弱点)。 NSMutableOrdererSet和NSURLIsExcludedFromBackupKey位于此框架组件中。 我不会检查这个解决方案在ios上的工作情况如何5.0,但从5.0到6.0没有崩溃,或者请不要使用5到6的Google Map SDK代替这个MKMapView!

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