Google Maps SDK для iOS пытается работать на iOS 4.3

Я успешно интегрировал 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 еще до запуска приложения. нужна ваша помощь :-)


person tomeron11    schedule 25.12.2012    source источник
comment
привет, вы интегрировали его в свое приложение в соответствии с этой документацией developers.google.com/maps/ документация/ios/start ?   -  person DD_    schedule 26.12.2012
comment
конечно. уже работает на ios6 и не крашится на ios5   -  person tomeron11    schedule 27.12.2012
comment
но я еще не получил ответа после подачи заявки на ключ API! любая идея, почему это так?   -  person DD_    schedule 28.12.2012
comment
Просто из любопытства, почему вы до сих пор поддерживаете 4.3? Если вы посмотрите на текущее использование, его почти никто не использует.   -  person Dancreek    schedule 28.12.2012
comment
@Dancreek: Около 8% моих пользователей (за последний месяц) использовали 4.x, поэтому я бы предпочел не отключать их, если смогу.   -  person Saxon Druce    schedule 29.12.2012


Ответы (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 не поддерживает.

person Saxon Druce    schedule 28.12.2012
comment
Я поднял это как отчет об ошибке в системе отслеживания проблем Google здесь: code.google.com/p/gmaps-api-issues/issues/detail?id=4750 - person Saxon Druce; 29.12.2012
comment
на 5.0 не работает. я получаю dyld: символ не найден: _NSURLIsExcludedFromBackupKey. извините за отсутствие информации. - person tomeron11; 30.12.2012
comment
iOS6 теперь, к сожалению, для людей с упрямыми клиентами - person Adam Waite; 29.01.2014
comment
Поддержка iOS5 была прекращена с выпуском SDK версии 1.5. Версия с обратной совместимостью здесь: 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. Извините за мой плохой английский!

person Роман Матвеев    schedule 27.09.2013