Xcode应用Playground中Core ML模型类无法生成的问题
解决Xcode Playground中CoreML模型无目标无法生成类的问题
手动生成CoreML模型类
- 在普通Xcode项目中添加
.mlmodel文件,勾选对应目标触发模型类生成 - 定位生成的Swift类文件:
前往Xcode项目的DerivedData文件夹,路径一般为~/Library/Developer/Xcode/DerivedData/[项目名]-[随机字符串]/Build/Intermediates.noindex/[项目名].build/Debug-iphonesimulator/[项目名].build/DerivedSources/CoreMLGeneratedSources,找到对应模型的.swift文件(如SqueezeNet.swift) - 将该Swift文件复制到Playground的
Sources目录(Swift Playground App需通过文件导入功能添加到项目) - 在Playground中直接调用这个手动生成的类,无需依赖
.mlmodel文件的目标关联
直接加载编译后的模型文件
如果不想手动生成类,可通过模型URL直接加载:
import CoreML guard let modelURL = Bundle.main.url(forResource: "SqueezeNet", withExtension: "mlmodelc") else { fatalError("模型文件不存在") } do { let model = try SqueezeNet(contentsOf: modelURL) // 执行模型预测逻辑 } catch { fatalError("加载模型失败:\(error)") }
注意:需将Xcode项目Products目录下编译好的.mlmodelc文件夹添加到Playground资源中,保证Bundle能读取到。
Swift Package Manager适配(满足WWDC提交要求)
因为提交仅接受.swiftpm文件,需确保资源和代码都纳入Package:
- 在
Package.swift中添加资源声明:
let package = Package( name: "YourProjectName", products: [ .library(name: "YourLibrary", targets: ["YourTarget"]), ], targets: [ .target( name: "YourTarget", resources: [.process("SqueezeNet.mlmodelc")] ), .testTarget( name: "YourTargetTests", dependencies: ["YourTarget"] ), ] )
- 将手动生成的模型类放在Package的
Sources目录下,确保Playground能正常引用
内容的提问来源于stack exchange,提问作者Dhanush
相关产品推荐
相关产品推荐

