如何将未编译的 .mlmodel 添加到 Xcode UnitTests 包

Posted

技术标签:

【中文标题】如何将未编译的 .mlmodel 添加到 Xcode UnitTests 包【英文标题】:How to add uncompiled .mlmodel to Xcode UnitTests bundle 【发布时间】:2021-01-25 14:47:03 【问题描述】:

我需要将 .mlmodel 文件添加到我的单元测试中,以便检查我的框架中的编程模型编译。但是,从版本 12 开始,Xcode 会自动编译添加到项目中的任何 .mlmodel 文件,并将其替换为 .mlmodelc ,这在此上下文中是不需要的。

所以,如果我在项目中添加TestModel.mlmodel,我将无法获取资源 URL:

NSBundle *bundle = [NSBundle bundleForClass:ModelTest.class];

// modelURL is nil
NSURL *modelURL = [bundle URLForResource:@"TestModel" 
                           withExtension:@"mlmodel"];

如果我打开已编译的捆绑包,我可以在那里看到TestModel.mlmodelc

如何在 Xcode 中禁用自动 CoreML 模型编译?

【问题讨论】:

【参考方案1】:

项目导航器中选择项目后,所有已编译的文件都可以在构建阶段选项卡的编译源部分中找到。你能找到那里的文件吗?如果是,您可以将其删除。

当在 Project navigator 中选择文件时,您可以在 File InspectorTarget Membership 部分执行相同操作:如果目标名称旁边的框已选中,取消选中它。

最后,如果您希望将此文件添加到应用程序的资源中,您可能必须将其添加到 Build Phase 选项卡的 Copy Bundle Resource 部分(或者您可以创建一个特定的为它复制文件阶段)

【讨论】:

这不起作用。如果我从 Compile Sources 中删除 TestModel.mlmodel 并将其添加到 Copy Bundle Resources 它最终会被编译为 .mlmodelc,无论如何。 Xcode 似乎将该文件识别为可编译资源(就像它对 XIB 所做的那样)。您应该尝试从 Copy Bundle Resources 中删除该文件,并将其添加到新的 Copy Phase 部分(将 Resources 用作目标)。如果它不起作用,您也可以使用一个小的 bash 脚本“手动”复制它。目标是防止 Xcode 处理该文件。

以上是关于如何将未编译的 .mlmodel 添加到 Xcode UnitTests 包的主要内容,如果未能解决你的问题,请参考以下文章

隐藏 CoreML 模型 (.mlmodel) 文件

贝宝订阅,将未结余额添加到订阅按钮的下一个账单

将未版本的文件添加到svn存储库

Git存档将未版本控制的文件添加到子目录

ejabberd 不将未确认的消息存储到离线存储

将未包含的头文件添加到 Visual Studio 项目中的最新检查