Błąd kompilacji ML dla Catalyst (Xcode 12 GM)

Sep 16 2020

Czy ktoś jeszcze ma problemy z wydaniem GM z modelami ML i ma na to rozwiązanie? Otrzymuję następujący błąd:

Type 'MLModel' has no member '__loadContents'

Wyczyściłem projekt + usunięte dane pochodne (jest to wygenerowany plik, który jest umieszczany w folderze danych pochodnych)

Zauważyłem, że metoda nie powinna być dostępna dla systemu Mac OS 10.15, którego używam, ale z jakiegoś powodu jest tam.

Zauważyłem również, że to API jest nadal w fazie beta, podczas gdy GM jest wersją produkcyjną? https://developer.apple.com/documentation/coreml/mlmodel

Czy powinienem zregenerować model ML?

Odpowiedzi

6 COzkurt Sep 28 2020 at 06:19

Podstawową przyczyną tego jest:

Kompilator CoreML w Xcode 12.0 GM generuje kod, który zawiera symbole dostępne tylko w macOS BigSur, powodując problem z kompilacją. Jeśli celem jest zbudowanie aplikacji Catalyst lub aplikacji tylko dla macOS z Xcode 12.0

Kroki do naprawienia:

  1. W ustawieniach kompilacji celów możesz ustawić COREML_CODEGEN_LANGUAGE na „Brak”
  2. Otwórz terminal, a następnie przejdź do folderu .mlmodel
  3. Wpisz „xcrun coremlcompiler generuje <YourModel.mlmodel> --language Swift”.
  4. Spowoduje to utworzenie pliku <YourModel.swift> w tym samym folderze.
  5. Otwórz Xcode i dodaj <YourModel.swift> do swojego projektu.
  6. Kliknij <YourModel.swift> i zakomentuj metodę, na którą skarży się kompilator.

W moim przypadku komentuję:

class func load(contentsOf modelURL: URL, configuration: MLModelConfiguration = MLModelConfiguration(), completionHandler handler: @escaping (Swift.Result<Nudity, Error>) -> Void)

i

class func load(configuration: MLModelConfiguration = MLModelConfiguration(), completionHandler handler: @escaping (Swift.Result<Nudity, Error>) -> Void)

metody naprawiania pliku Swift.