Использование неразрешенного идентификатора GGLContext и GAI
У меня проблемы. Я пытаюсь установить Google Analytics в приложение и постоянно получаю сообщение об ошибке неразрешенного идентификатора GGLContext
и GAI
. Я получаю ту же ошибку, использую ли я CocoaPods или нет. Расположение ошибки в AppDelegate.swift
здесь:
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
// Override point for customization after application launch.
var configureError:NSError?
GGLContext.sharedInstance().configureWithError(&configureError)
assert(configureError == nil, "Error configuring Google services: \(configureError)")
// Optional: configure GAI options.
let gai = GAI.sharedInstance()
gai.trackUncaughtExceptions = true // report uncaught exceptions
return true
}
Ничего дополнительного не может быть импортировано в AppDelegate.swift
(например, Google), только стандартный UIKit
.
Я прошел через множество обучающих программ и других вопросов, которые все были безрезультатными. Я полагаю, что есть небольшая вещь, которую я пропускаю, но не могу ее найти.
Что я сделал:
У меня есть файлы .h
в моем проекте, а также libGoogleAnalyticsServices.a
, libsqlite3.0.tbd
, libz.tbd
, libsqlite3.tbd
(все из которых связаны с библиотекой, а также с CoreData и SystemConfiguration).
Здесь вы можете увидеть расположение всех этих файлов:
![введите описание изображения здесь]()
и здесь:
![введите описание изображения здесь]()
Я создал -Bridging-Header.h
и включил в него эти .h
импорт.
#import "GAI.h"
#import "GAIDictionaryBuilder.h"
#import "GAIEcommerceFields.h"
#import "GAIEcommerceProduct.h"
#import "GAIEcommerceProductAction.h"
#import "GAIEcommercePromotion.h"
#import "GAIFields.h"
#import "GAILogger.h"
#import "GAITrackedViewController.h"
#import "GAITracker.h"
-Bridging-Header.h
связан в настройках сборки, и я не получаю никаких ошибок. Это основное решение, которое я нашел во время моих исследований, что не помогло мне в этой ситуации.
Я попытался начать с нуля дважды с CocoaPods и без него (я сделал копию своего проекта перед запуском), и каждый раз я получал ту же ошибку.
Любая помощь, безусловно, будет оценена. Спасибо заранее.
Ответы
Ответ 1
Хорошо, похоже, что я смог получить его в квадрате.
Было несколько проблем со всеми попытками этого.
-
Cocoapods установлены неправильно. Я переустановил, а затем успел импортировать правильные файлы.
-
Выполнение этого вручную, поскольку я опубликовал выше, не самый лучший вариант.
-
После того, как Cocoapods переустановили и начали с новой копии моего проекта, я смог import Google
в AppDelegate.swift
.
Ключевые моменты для тех, кто может оказаться в той же лодке, в которой я был:
-
Обязательно добавьте правильный каталог для -Bridging-Header.h
. Вы можете найти это в разделе Project - Build Settings - Swift Compression Code Generation. Используйте это, чтобы легко настроить целевой файл заголовка $(SWIFT_MODULE_NAME)-Bridging-Header.h
-
В -Bridging-Header.h
, не #import <Google/Analytics.h>
, вместо этого импортируйте файлы по отдельности. Вот образ файлов, доступных для импорта.
![введите описание изображения здесь]()
-
Если вы сомневаетесь, переустановите Cocoapods
-
Не доверяйте учебным пособиям Google, чтобы предоставить наиболее эффективную инструкцию и использовать много сообщений SO по этой теме.
Я действительно надеюсь, что это поможет кому-то не тратить 10 часов на проблему, как я.
Ответ 2
Swift 4.0 и xcode 9.0.1, наконец, я решил.
Для меня через 2 дня я решил.. Не следуйте старой документации Google, #import <Google/Analytics.h>
- Перейти к типу терминала
pod init
- Повторно открыть проект как рабочее пространство, очевидно, после создания рабочей области pod, открыть podfile. пишите
pod 'GoogleAnalytics'
в свой файл pod перед target 'GoogleAnalytics' do
- Вернитесь к Terminal
pod install
, вы найдете фреймворки GAI.h
, а другие файлы будут находиться в папке pods
- Создайте файл
Header.h
для вашего корня. Не добавляйте #import <Google/Analytics.h>
, а импортируйте отдельно в мостовом файле заголовка
например. в мостовом файле заголовка удалите #import <Google/Analytics.h>
#import GAI.h
#import "GAITracker.h"
#import "GAIFields.h"
#import "GAIDictionaryBuilder.h"
-
Направьте свой мост в разделе "Параметры сборки" для целевого Swift-компилятора - общий → Objective-C "Мостовой заголовок". напишите Header.h
вашего имени файла моста
-
Добавить код из google для быстрого перехода на didFinishLaunchingWithOptions
Не забудьте заменить свой идентификатор отслеживания на странице Google Analytics
guard let gai = GAI.sharedInstance() else {
assert(false, "Google Analytics not configured correctly")
}
gai.tracker(withTrackingId: "YOUR_TRACKING_ID")
// Optional: automatically report uncaught exceptions.
gai.trackUncaughtExceptions = true
// Optional: set Logger to VERBOSE for debug information.
// Remove before app release.
gai.logger.logLevel = .verbose;
Tada.... Запустите проект...
Ответ 3
Моя ошибка заключалась в использовании неразрешенного идентификатора, когда я использовал singleton GAI.sharedInstance()
.
Мои шаги, чтобы заставить это работать:
- добавить
pod 'Google/Analytics'
- pod install
- перезапустить xcode
- создать класс objc в моем проекте, чтобы получить заголовок с мостом
- добавлен
#import "GAI.h"
в заголовок заголовочного файла
все работает отлично.
Ответ 4
Это работает для swift 2.3, swift 3.0 и swift 4:
- добавьте файл GoogleService-Info.plist в корень вашего проекта
-
добавьте это в подфайл:
pod 'Google/Analytics'
- выйдите из Xcode, запустите "pod install" в терминале и снова откройте Xcode
-
создайте файл заголовка в корне проекта с именем Bridging-Header.h, в настройках сборки убедитесь, что заголовок моста определен, как на рисунке ![enter image description here]()
-
убедитесь, что ваш Bridging-Header.h выглядит так:
#ifndef Bridging_Header_h
#define Bridging_Header_h
#import <Google/Analytics.h>
#endif /* Bridging_Header_h */
-
добавить в AppDelegate:
import Google
-
добавьте этот код в AppDelegate в методе didFinishLaunchingWithOptions:
// Configure tracker from GoogleService-Info.plist.
var configureError: NSError?
GGLContext.sharedInstance().configureWithError(&configureError)
assert(configureError == nil, "Error configuring Google services:\(configureError)")
// Optional: configure GAI options.
guard let gai = GAI.sharedInstance() else {
assert(false, "Google Analytics not configured correctly")
}
gai.trackUncaughtExceptions = true // report uncaught exceptions
gai.logger.logLevel = GAILogLevel.Verbose // remove before app release
Если есть ошибки, может помочь удаление DerivedData и очистка проекта.
Ответ 5
Единственный способ заставить меня работать для меня - это понизить версию Google Analytics до версии 2.0.4.
pod 'Google/Analytics', '~ > 2.0.4'