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

tom*_*n11 5 ios google-maps-sdk-ios

我成功整合了sdk我的应用程序.我的应用程序旨在Google Maps sdk for iOS6与Apple UIMapKitiOS4.3和5.x一起运行.由于我添加了google maps框架,ios 4.3将不再运行.我改变了GLKit.framework,并GoogleMaps.framework为"可选",我也得到dyld: Symbol not found: _NSFileProtectionCompleteUntilFirstUserAuthentication了应用,甚至开始之前.需要你的帮助 :-)

Sax*_*uce 3

如果我删除对 Google API 的所有调用,并且将GLKit.framework和设置为可选,我的应用程序可以在 iOS 4.3 上正常运行。GoogleMaps.framework

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

更新:

其实上面的说法是错误的。我忘记在说明-ObjC的第 7 步中包含链接器标志。如果没有该应用程序,则可以在 iOS 4.3 上正常运行。如果没有iOS 6 上的标志,调用会成功,但是调用-ObjC-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";
Run Code Online (Sandbox Code Playgroud)

这似乎不会在 iOS 6.0 上引起问题,尽管该符号已被定义两次,但我不确定它是否可信。

对于 iOS 4.3,我尝试做同样的事情,添加:

NSString* const NSFileProtectionCompleteUntilFirstUserAuthentication = 
    @"NSFileProtectionCompleteUntilFirstUserAuthentication";
Run Code Online (Sandbox Code Playgroud)

这会停止有关 的错误_NSFileProtectionCompleteUntilFirstUserAuthentication,但随后我收到以下错误:

dyld: Symbol not found: _OBJC_CLASS_$_NSMutableOrderedSet
Run Code Online (Sandbox Code Playgroud)

我不确定是否有办法欺骗链接器在 iOS 4.3 上看到 NSMutableOrderedSet 的虚拟版本。

更新3:

SDK文档说最低支持的平台是iOS 5.1

谷歌已将错误报告关闭为 WontFix,因此似乎无法让它在 5.0 或更低版本上工作。

更新4:

谷歌已重新开放该错误作为增强功能

更新5:

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

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

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

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

如果你使用 hack 来让它在 5.0 上启动时不会崩溃,即:

NSString* const NSURLIsExcludedFromBackupKey = @"NSURLIsExcludedFromBackupKey";
Run Code Online (Sandbox Code Playgroud)

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