Подтвердить что ты не робот

Использование неразрешенного идентификатора 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 и без него (я сделал копию своего проекта перед запуском), и каждый раз я получал ту же ошибку.

Любая помощь, безусловно, будет оценена. Спасибо заранее.

4b9b3361

Ответ 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"
  1. Направьте свой мост в разделе "Параметры сборки" для целевого Swift-компилятора - общий → Objective-C "Мостовой заголовок". напишите Header.h вашего имени файла моста

  2. Добавить код из 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:

  1. добавьте файл GoogleService-Info.plist в корень вашего проекта
  2. добавьте это в подфайл:

      pod 'Google/Analytics'
    
  3. выйдите из Xcode, запустите "pod install" в терминале и снова откройте Xcode
  4. создайте файл заголовка в корне проекта с именем Bridging-Header.h, в настройках сборки убедитесь, что заголовок моста определен, как на рисунке enter image description here

  5. убедитесь, что ваш Bridging-Header.h выглядит так:

      #ifndef Bridging_Header_h
      #define Bridging_Header_h
      #import <Google/Analytics.h> 
      #endif /* Bridging_Header_h */
    
  6. добавить в AppDelegate:

    import Google        
    
  7. добавьте этот код в 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'