Сгенерированные Xcode файлы CoreData не могут быть обработаны на этапе сборки Copy Bundle Resources - PullRequest
0 голосов
/ 13 декабря 2018

Я добавил CoreData в свое приложение MY_APP:

  • Я определил модель данных, создав файл xcdatamodeld, содержащий одну сущность XXX с несколькими атрибутами.
  • Используя Xcode / Editor / Create NSManagedSubclass, Xcode создал 2 файла, XXX+CoreDataClass.swift и XXX+CoreDataProperties.swift.
  • Я написал небольшой код для тестирования хранилища и извлечения данных из ядра, и все работает нормально.

Проблема:
В началена этапе сборки я получаю 3 предупреждения:

warning: The Swift file "/Users/reiner/Library/Developer/Xcode/DerivedData/  
MY_APP/Build/Intermediates.noindex/MY_APP.build/Debug-iphonesimulator/  
MY_APP.build/DerivedSources/CoreDataGenerated/MY_APP/XXX+CoreDataClass.swift"  
cannot be processed by a Copy Bundle Resources build phase (in target ‚MY_APP‘)  

warning: The Swift file "/Users/reiner/Library/Developer/Xcode/DerivedData/  
MY_APP/Build/Intermediates.noindex/MY_APP.build/Debug-iphonesimulator/  
MY_APP.build/DerivedSources/CoreDataGenerated/MY_APP/XXX+CoreDataProperties.swift"  
cannot be processed by a Copy Bundle Resources build phase (in target 'MY_APP')  

warning: The Swift file "/Users/reiner/Library/Developer/Xcode/DerivedData/  
MY_APP/Build/Intermediates.noindex/MY_APP.build/Debug-iphonesimulator/  
MY_APP.build/DerivedSources/CoreDataGenerated/MY_APP/MY_APP+CoreDataModel.swift"  
cannot be processed by a Copy Bundle Resources build phase (in target 'MY_APP')  

Эти 3 файла не перечислены в разделе MY_APP target / Build Phases / Copy Bundle Resources.

Мои вопросы:
Что-то не так с моей настройкой сборки, то есть в чем причина этих предупреждений и как я могу избежать этого?

Примечание: Этот вопрос относится к другой структуре (базовые данные), но похож на этот , на который пока нет ответа.

РЕДАКТИРОВАТЬ:
Мой проект имеет 2 цели, для iOS и для watchOS.До сих пор основные данные использовались только на iOS.
Я пытался включить их также для watchOS, но получил ошибку, поскольку .xcdatamodeld еще не было в фазах сборки / ресурсах копирования комплекта.
Asкак только я добавил его, основные данные были правильно выполнены на часах.

НО: Я получил те же 3 предупреждения, упомянутые выше, на этот раз дополнительно для цели расширения часов (всего 6 предупреждений).
Возможно, это полезный совет.

Ответы [ 3 ]

0 голосов
/ 15 декабря 2018

РЕДАКТИРОВАТЬ:

Я связался с Apple, и они предоставили решение:

Когда создается проект Xcode «xxx» с включенной опцией coreData, ядроФайл модели данных «xxx.xcdatamodeld» создается и добавляется к целевым источникам компиляции этапов сборки.

Скажем, каждый добавляет туда сущность «Сущность» с атрибутом «атрибут».

Если в навигаторе проекта Xcode выбрать этот файл модели и открыть инспектор файлов, появляется запись «Генерация кода», которая по умолчанию установлена ​​в Swift.При этом автоматически создаются 2 файла Entity + CoreDataClass.swift и Entity + CoreDataProperties.swift, но они не отображаются в навигаторе проекта.
Сборка проекта завершается успешно, и можно использовать свойство Entity.attribute, как обычно в коде.,

Однако:
Если в навигаторе Xcode выбрать файл xcdatamodeld, в меню редактора Xcode есть пункт «Создать подкласс NSManagedObject…».Если выбрать эту запись и указать модель данных xxx, 2 файла Entity + CoreDataClass.swift и Entity + CoreDataProperties.swift будут созданы снова и показаны в навигаторе проекта и добавлены по умолчанию к цели.

Это означает, что эти файлы добавляются дважды, поэтому появляются предупреждения.

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

РЕДАКТИРОВАТЬ 2:

Моя вина;Я искал не в том месте:

  • Откройте xcdatamodeld в навигаторе проекта.
  • В правой части панели выберите объект.
  • В правом верхнем углу откройте панель инспектора.
  • В правом верхнем углу выберите инспектор модели данных.
  • Существует запись «Codegen», в которой можно выбрать Manual / None.

Если выбрана эта опция, из xcdatamodeld автоматически не генерируется код, т. Е. Можно вручную (с помощью команды редактора) создать подклассы NSManagedObject, которые можно добавить в целевой раздел источников компиляции, кактребуется.

Предыдущий ответ:

Очевидно, что есть два способа использования CoreData, либо 1), используя только файл PROJECT.xcdatamodeld, который затем добавляется в Скомпилируйте источники Фаза сборки или 2) путем создания подкласса NSManagedObject с помощью команды Xcode Editor / Create NSManagedObject Subclass .

Если используется 1), все работает нормально, но никто не имеет доступа к свойству.

Если используется 2), Xcode создает 2 файла ENTITY+CoreDataClass.swift и ENTITY+CoreDataProperties.swift.Эти 2 файла добавляются в этап сборки исходных текстов , , но PROJECT.xcdatamodeld не должен .Если кто-то все равно это делает, он получает ошибку сборки «неожиданное дублирование задачи».Но если это не так, проект создается без ошибок и предупреждений.
Однако при запуске инструкция

let entity = NSEntityDescription.entity(forEntityName: "MyEntity", in: managedContext)! 

не выполняется, поскольку не находит модель данных.
Обходной путьдобавить PROJECT.xcdatamodeld к target / Build Phases / Copy Bundle Resources .Затем код выполняется нормально, но вы получите предупреждения, которые я описал в своем вопросе.

0 голосов
/ 05 января 2019

Для меня причиной проблемы было наличие файла .xcdatamodeld с шагом Copy Bundle Resources в пределах Build Phases для цели, указанной в предупреждении: в вашем случае, MY_APP.Я удалил этот файл с шага Copy Bundle Resources, и все предупреждения исчезли.

0 голосов
/ 13 декабря 2018

Подход к работе с Xcode, который с каждым выпуском в последние годы все больше и больше глючит:

  • Выйдите и перезапустите Xcode.
  • Если это не такработать, сделать Показать содержимое пакета на пакете .xcodeproj и открыть файл .pbxproj в текстовом редакторе.Поиск в файле для случаев XXX+CoreDataClass.Поиск в файле для вхождения другого файла .swift, который не создает это предупреждение.Сравните два результата поиска.Возможно, потребуется вручную отредактировать файл .pbxproj.
...