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

Модернизированная Firebase - теперь получение быстрой ошибки компиляции

Я обновил Firebase вчера, и теперь у меня очень необычная проблема. Когда я запускаю симулятор, я получаю быструю ошибку компиляции "Ошибка сегментации: 11". Сотни строк кода, описывающих ошибку, но они абсолютно не помогают. Из ошибки единственное, что я вижу, может дать подсказки внизу. В нем говорится:

  1. While loading members for 'ProfileTableViewController' at <invalid loc>
  2. While deserializing decl #101 (PATTERN_BINDING_DECL)
  3. While deserializing decl #2 (VAR_DECL)

Как ни странно, ошибки, которые я только что напечатал, несовместимы. Указанный контроллер просмотра вращается между тремя диспетчерами, в которых я использую Firebase.

Чтобы попытаться решить проблему, я прокомментировал весь код в классе ProfileTableViewController, но у меня все еще есть ошибка, ссылающаяся на этот контроллер представления. Единственный код, запущенный в контроллере представления, был:

  import UIKit
  import Firebase
  import FirebaseDatabase

(Я также использую FirebaseAuth в других контроллерах представлений).

Что работает, чтобы исправить проблему, это нажать "чистый", перезапустить xcode, снова очистить при запуске, а затем запустить программу. Все будет работать нормально, если я не внем изменения в код программы. Даже если все, что я делаю, это добавить комментарий, ошибка снова появится.

Я не хочу закрывать xcode и перезапускать каждый раз, когда пишу пару строк кода, и я беспокоюсь, что у меня возникнут проблемы при загрузке в магазин приложений.

Я использую XCode 7.3.1, и моя цель развертывания - 9.3

Любое понимание, которое вы можете дать, очень ценится! Спасибо!

4b9b3361

Ответ 1

Я смог понять это! Мои подмастеры Cocoa не были в курсе последних событий. Как только я вернулся и установил последние Cocoa Pods в терминале, а затем обновил podfile для этого приложения, эта ошибка исчезла.

процесс:

Открыть терминал

  sudo gem install cocoapods

(Обновление Cocoapods) В терминале перейдите в папку приложения, затем:

  open -a xcode podfile

При необходимости внесите изменения в podfile. Мне не нужно было вносить какие-либо изменения. Сохранить и выйти.

В терминале

  pod update

Откройте файл .xcworkspace и ta da!

Ответ 2

Это/действительно заставляло меня заигрывать.

Этот код вызывает вышеупомянутый сбой:

func ref() -> FIRStorageReference {
    return FIRStorage.storage().reference()
}

Если я просто использую его в функции, все работает:

FIRStorage.storage().reference().dataWithMaxSize(...

Взял часы, чтобы понять это. Сообщение об ошибке указывает на другое место. Это, вероятно, самый неприятный отладочный опыт за всю мою карьеру.

Ответ 3

Я тоже тянул свои волосы с этой проблемой в течение некоторого времени. Я попробовал ответить Эрик Даффет, но не повезло.

Я понял, что это проблема с FirebaseAuth. Я сделал это:

  • Удалить FirebaseAuth из подфайла
  • Обновление пакетов с обновлением pod
  • Загрузите фреймворки Firebase из их сайта (внизу)
  • Следуйте за файлом README для импорта FirebaseAuth вручную в проект (необходимо импортировать FirebaseAuth.framework и GoogleNetworkingUtilities.framework)
  • Очистить - Сборка и ошибка сегментации 11

Надеюсь, это поможет кому-то.

Ответ 4

В вашем podfile вы можете попытаться раскомментировать use_frameworks!

use_frameworks!
pod 'Firebase'
pod 'Firebase/Database'
pod 'Firebase/Auth'

Затем запустите 'pod update' в терминале. Перезапустите проект Xcode.

Это сделало это для меня после битвы в течение двух дней с ошибкой сегментации 11

Ответ 5

Удаление DerivedData и ModuleCache, тогда Clean>Build работал у меня.

Ответ 6

У меня также была эта проблема с Firebase.

Xcode будет жаловаться на определенный класс. Также как ваш "ProfileTableViewController" Что я сделал для этого: Комментировать все связанные с Firebase импорты в этом классе → Clean → Build (очевидно, получили некоторые ошибки) → Uncomment → Clean → Build successed

Ответ 7

Я выяснил другое решение, которое сработало для меня. У меня было несколько пользовательских функций, которые возвращали переменные типа Firebase, такие как FIRUser, в файлы, у которых не было import Firebase или import FirebaseAuth вверху. Мне нравится поддерживать мои методы службы данных в отдельном файле, поэтому я просто изменил функции, чтобы они вернули Strings, например FIRUser.uid. Это окончательно избавилось от предупреждений/сбоев компилятора навсегда.

Ответ 8

Проблема для меня возникла, когда я явно задавал типы параметров блока завершения для setValue.

FIRDatabase.database().reference(withPath: "test").childByAutoId().setValue("test1") { (error: Error?, ref: FIRDatabaseReference) in }

Все работает отлично, когда типы для error и ref удаляются.