«NSInvalidArgumentException», причина: «+ [FIRInstanceIDCheckinPreferences preferencesFromKeychainContents:]:« нераспознанный селектор отправлен в класс » - PullRequest
2 голосов
/ 12 апреля 2020

Когда я пытаюсь использовать MLModelInterpreter из Firebase для загрузки tflite-файла в моем проекте Xcode, я получаю следующую ошибку после того, как Launchsreen полностью виден:

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '+[FIRInstanceIDCheckinPreferences preferencesFromKeychainContents:]: unrecognized selector sent to class 0x10235ca58

Мой код основан на учебник от Firebase, поэтому я удивлен, что он не работает. Вот код:

import Firebase


    var interpreter: ModelInterpreter?

    func convertTheModel(){


        guard let modelPath = Bundle.main.path( forResource: "model", ofType: "tflite", inDirectory: ""
            )
            else {
                print("not able to load model")
                return

        }

        let localModel = CustomLocalModel(modelPath: modelPath)
        interpreter =  ModelInterpreter.modelInterpreter(localModel: localModel)

        let ioOptions = ModelInputOutputOptions()
        do {
            try ioOptions.setInputFormat(index: 0, type: .float32, dimensions: [1, 22])
            try ioOptions.setOutputFormat(index: 0, type: .float32, dimensions: [1, 1])
        } catch let error as NSError {
            print("Failed to set input or output format with error: \(error.localizedDescription)")
        }



    let inputs = ModelInputs()
    var inputData = Data()

        do {
            for _ in 0 ..< 22 {

              // require fixed-point values or the original bytes.
              var RandomNumber = Float.random(in: 0 ..< 1)

              // Append normalized values to Data object.
              let elementSize = MemoryLayout.size(ofValue: RandomNumber)
              var bytes = [UInt8](repeating: 0, count: elementSize)
              memcpy(&bytes, &RandomNumber, elementSize)
              inputData.append(&bytes, count: elementSize)
          }
          try inputs.addInput(inputData)
        } catch let error {
          print("Failed to add input: \(error)")
        }


        interpreter!.run(inputs: inputs, options: ioOptions) { outputs, error in
            guard error == nil, let outputs = outputs else { return }

            print(outputs)
        }

    }


После некоторой отладки у меня есть смутное предположение, что ошибка вызвана этой строкой кода: interpreter = ModelInterpreter.modelInterpreter(localModel: localModel)

Дополнительная информация

До описанной выше проблемы у меня была другая проблема: при сборке проекта компилятор показывал эту ошибку:

/Users/Path/Application_Name/Update/Pods/GoogleMobileVision/Detector/Frameworks/GoogleMobileVision.framework/GoogleMobileVision(VisionExtension.pbobjc_0848a2b53cac8a49ea32ab4e6cb931d4.o)
ld: 46 duplicate symbols for architecture arm64
clang: error: linker command failed with exit code

Вот краткое изложение того, что я сделал:

  1. Я очистил папку здания
  2. Переустановите все модули: pod deintegrate, а затем pod install
  3. установите Нет общих блоков на
  4. удалить все -Obj C как описано в Pods > Targets Support Files > Pods-{TARGET-NAME} find "OTHER_LDFLAGS" and remove only -ObjC in these two files 2. Go to project main target > Build Settings > Other Linker Flags: Make sure no -ObjC is left in the value I deleted the build/Build folder in ios and run your project again."> этой ссылке .

Мой подфайл:

platform :ios, '13.0'

target 'My Project' do
  # Comment the next line if you don't want to use dynamic frameworks
  use_frameworks!

  # Pods for My Project
  pod 'Firebase/Database'
  pod 'Firebase/Auth'
  pod 'GoogleMobileVision/FaceDetector'
  pod 'Firebase/Firestore'
  pod 'Firebase/MLModelInterpreter'


end


Буду признателен, если кто-нибудь сможет помочь

Edit

Если у кого-то есть другое решение для загрузки tflite-файла (или h5-файла: посмотрите мой предыдущий Вопрос) в проект Xcode, это также будет полезно

@ Paul Beusterien

Это место, где я вставил -ObjC: enter image description here

1 Ответ

0 голосов
/ 12 апреля 2020

-Obj C должно быть в Other Linker Flags приложения для корректной работы Firebase. См. https://github.com/firebase/firebase-ios-sdk/issues/4776 для получения дополнительной информации об этой проблеме.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...