我的应用程序在iOS 4.3上运行良好,使用可选的GLKit.framework
和GoogleMaps.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的官方支持。