Xcode生成的CoreData文件无法通过副本捆绑资源构建阶段进行处理

Rei*_*ner 4 xcode warnings core-data build swift

我将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')  
Run Code Online (Sandbox Code Playgroud)

这3个文件未在MY_APP目标/构建阶段/副本捆绑资源下列出。

我的问题:
构建设置有什么问题,即这些警告的原因是什么,我该如何避免?

备注:此问题与其他框架(核心数据)有关,但与框架相似,尚无答案。

编辑:
我的项目有2个目标,用于iOS和watchOS。到目前为止,核心数据仅在iOS上使用。
我现在尝试也为watchOS启用它,但出现错误,因为.xcdatamodeld尚未在Build Phases / Copy Bundle Resources中。
我在其中添加后,核心数据就在手表上正确执行了。

但是: 我得到了与上面提到的相同的3条警告,这次是针对手表扩展目标(总共6条警告)。
也许这是一个有用的提示。

Rei*_*ner 6

编辑:

我联系了苹果公司,他们提供了一个解决方案:

在启用coreData选项的情况下创建Xcode项目“ xxx”时,将创建核心数据模型文件“ xxx.xcdatamodeld”,并将其添加到目标“构建阶段”编译源中。

比方说,有人在其中添加了实体“ Entity”和属性“ attribute”。

如果在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”,可以选择“手动/无”。

如果选择此选项,则不会从xcdatamodeld自动生成任何代码,即,可以手动(通过使用editor命令)创建NSManagedObject子类,并根据需要将其添加到目标“编译源”部分。

先前的答案:

显然,有两种使用CoreData的方法,一种是:仅使用PROJECT.xcdatamodeld文件,然后将其添加到“ 编译源构建阶段”,或者2)NSManagedObject使用Xcode的Editor / Create NSManagedObject Subclass命令创建子类

如果使用1),则一切正常,但没有人可以访问所使用的实体。

如果使用2),Xcode将创建2个文件ENTITY+CoreDataClass.swiftENTITY+CoreDataProperties.swift。这两个文件已添加到“ 编译源构建”阶段PROJECT.xcdatamodeld一定不能。如果有人这样做,则会出现构建错误“意外的重复任务”。但是,如果没有,则该项目的构建不会出现错误和警告。
但是,运行时,指令

let entity = NSEntityDescription.entity(forEntityName: "MyEntity", in: managedContext)! 
Run Code Online (Sandbox Code Playgroud)

失败,因为它找不到数据模型。
一种解决方法是添加PROJECT.xcdatamodeld目标/构建阶段/副本捆绑资源。然后,代码可以正常执行,但是将收到我在问题中描述的警告。