Модернизированная 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
Любое понимание, которое вы можете дать, очень ценится! Спасибо!
Ответы
Ответ 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
удаляются.