I need to add a .mlmodel file to my Unit Tests in order to check programmatic model compilation in my framework. But, since version 12, Xcode automatically compiles any .mlmodel file added to the project and replaces it with .mlmodelc which is unwanted in this context.
So, if I add a TestModel.mlmodel
to the project, I can't get a resource URL:
NSBundle *bundle = [NSBundle bundleForClass:ModelTest.class];
// modelURL is nil
NSURL *modelURL = [bundle URLForResource:@"TestModel"
withExtension:@"mlmodel"];
If I open the compiled bundle package I can see TestModel.mlmodelc
there.
How can I disable automatic CoreML model compilation in Xcode?
Xcode will try to compile the mlmodel
file, no matter in which build phase it is. To copy a non compiled model (which is useful for testing), you can:
mlmodel
file is present in the "Copy Bundle Resources" phase or in "Compile Sources",cp "${SCRIPT_INPUT_FILE}" "${BUILT_PRODUCTS_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/${INPUT_FILE_NAME}"
,${BUILT_PRODUCTS_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/${INPUT_FILE_NAME}
.Xcode will then copy CoreML models instead of compiling them. To restore the standard behavior, simply delete the build rule.