Google Maps SDK для iOS пытается запустить на iOS 4.3
Я успешно интегрировал sdk
с моим приложением. Мое приложение предназначено для запуска с Google Maps sdk for iOS6
и с Apple UIMapKit
за iOS
4.3 и 5.х. Так как я добавил google maps
Framework,
iOS 4.3 больше не будет работать. Я изменил GLKit.framework
а также GoogleMaps.framework
на "опционально", и я получаю dyld: Symbol not found: _NSFileProtectionCompleteUntilFirstUserAuthentication
еще до того, как приложение запустится. нужна ваша помощь:-)
2 ответа
Мое приложение работает нормально на iOS 4.3, с GLKit.framework
а также GoogleMaps.framework
установите опционально, и если я удалю все вызовы Google API.
Может ссылка на NSFileProtectionCompleteUntilFirstUserAuthentication
быть вызвано каким-то другим вашим кодом или другими фреймворками?
ОБНОВИТЬ:
На самом деле вышеупомянутое неправильно. Я забыл включить -ObjC
флаг компоновщика в шаге 7 инструкции. Без -ObjC
приложение может нормально работать на iOS 4.3. Без -ObjC
флаг на iOS 6 вызов [GMSServices provideAPIKey]
успешно, но призыв к [GMSMapView mapWithFrame:camera:]
молча терпит неудачу (возвращает ноль), так что это не вариант.
С -ObjC
флаг на месте, на iOS 4.3 я получаю ту же ошибку о _NSFileProtectionCompleteUntilFirstUserAuthentication
,
Я пытался изменить -ObjC
в -force_load $(PROJECT_DIR)/GoogleMaps.framework/GoogleMaps
, только для принудительной загрузки API Карт Google, а не других библиотек, но он все еще не работает на iOS 4.3.
Я предполагаю, что -ObjC
или же -force_load
переопределяют настройку, чтобы сделать GoogleMaps.framework
необязательный.
Также на iOS 5.0 я получаю похожую ошибку о _NSURLIsExcludedFromBackupKey
, Я предполагаю, что это будет работать на iOS 5.1, хотя. @tomeron11, с какой версией 5.х вы тестировали?
ОБНОВЛЕНИЕ 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.
I Foundation.framework и UIKit.framework(UIActivityViewController также потерпел крах в 1.5 GMSdk.....) установлены в режиме "option" (слабый a не виден в выпадающем списке). NSMutableOrdererSet и NSURLIsExcludedFromBackupKey, расположенные в этом компоненте платформы. Я не проверяю, как работает это решение на ios менее 5.0, но с 5.0 до 6.0 не происходит сбой, или, пожалуйста, не используйте Google Map SDK с 5 до 6 вместо этого MKMapView!
PS Извините мой плохой английский!