Я успешно интегрировал sdk
в свое приложение. Мое приложение предназначено для работы с Google Maps sdk for iOS6
и с Apple UIMapKit
для iOS
4.3 и 5.x. Поскольку я добавил фреймворк google maps
, ios 4.3 больше не запустится. Я изменил GLKit.framework
и GoogleMaps.framework
на «необязательно», и я получаю dyld: Symbol not found: _NSFileProtectionCompleteUntilFirstUserAuthentication
еще до запуска приложения. нужна ваша помощь :-)
Google Maps SDK для iOS пытается работать на iOS 4.3
Ответы (2)
Мое приложение работает нормально на iOS 4.3, если GLKit.framework
и GoogleMaps.framework
установлены как необязательные, и если я удалю все вызовы API Google.
Может ли ссылка на NSFileProtectionCompleteUntilFirstUserAuthentication
быть вызвана каким-то другим вашим кодом или другими фреймворками?
ОБНОВЛЕНИЕ:
На самом деле вышесказанное неверно. Я забыл включить флаг компоновщика -ObjC
на шаге 7 инструкций . Без -ObjC
приложение может нормально работать на iOS 4.3. Без флага -ObjC
в iOS 6 вызов [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
Я не уверен, есть ли способ обмануть компоновщика, чтобы он увидел фиктивную версию NSMutableOrderedSet на iOS 4.3.
ОБНОВЛЕНИЕ 3:
В документации SDK указано, что минимальная поддерживаемая платформа — iOS 5.1.
Google закрыл отчет об ошибке как WontFix, так что, похоже, не получится заставить его работать на 5.0 или ниже.
ОБНОВЛЕНИЕ 4:
Компания Google повторно открыла ошибку как улучшение.
ОБНОВЛЕНИЕ 5:
Последняя версия 1.1.0 SDK больше не вылетает при запуске на iOS 5.0.
Однако Google не будет исправлять сбой на iOS. 4.x.
Поскольку SDK официально поддерживает только iOS 5.1+, хотя он больше не вылетает при запуске на iOS 5.0, при попытке создать GMSMapView
он вылетает с сообщением об ошибке:
Google Maps SDK для iOS поддерживает только iOS 5.1+
Если вы используете хак, который использовался для того, чтобы он не вылетал при запуске на 5.0, то есть это:
NSString* const NSURLIsExcludedFromBackupKey = @"NSURLIsExcludedFromBackupKey";
Тогда SDK будет работать на iOS 5.0. Кажется, это работает, но, вероятно, это не очень хорошая идея, так как официально Google не поддерживает.
pod 'Google-Maps-iOS-SDK', '~> 1.4.3'
- person Adam Waite; 29.01.2014
Я Foundation.framework и UIKit.framework (UIActivityViewController тоже разбился в 1.5 GMSdk.....) установил в режиме «опция» (слабый, не отображается в поле со списком). NSMutableOrdererSet и NSURLIsExcludedFromBackupKey расположены в этом компоненте фреймворка. Я не проверяю, как работает это решение на ios меньше 5.0, но с 5.0 до 6.0 не вылетает, или пожалуйста не используйте Google Map SDK с 5 по 6 вместо этого MKMapView!
P.S. Извините за мой плохой английский!