Speech框架自定义语言模型数据导出失败问题求助
Apple Speech自定义语言模型导出错误原因及解决方案
错误核心原因
你遇到的错误是iOS沙盒权限限制导致的:
- iOS应用被严格限制在自身沙盒目录内运行,无法直接访问系统级的
/var/tmp路径,应用没有该目录的写入权限,因此无法创建目标文件TestCustomModel.bin。 - 后续的归档写入错误都是初始文件无法打开引发的连锁问题。
修复步骤
将导出路径替换为应用沙盒内的可写目录,比如应用临时目录或文档目录:
- 通过
FileManager获取应用合法的可写目录URL - 拼接目标文件名生成有效路径
修改后的代码示例:
import Speech class DataHandler { // 避免使用系统类名Data作为自定义类名,防止命名冲突 func export() async throws { let data = SFCustomLanguageModelData( locale: Locale(identifier: "en_US"), identifier: "personal.TestCustomModel", version: "1.0" ) { SFCustomLanguageModelData.PhraseCount( phrase: "Play the Albin counter gambit", count: 10 ) SFCustomLanguageModelData.PhraseCountsFromTemplates( classes: [ "piece" : ["pawn", "rook", "knight", "bishop", "queen", "king"], "royal" : ["queen", "king"], "rank" : Array(1...8).map({String($0)}) ] ) { SFCustomLanguageModelData.TemplatePhraseCountGenerator.Template( "<piece> to <royal> <piece> <rank>", // 修正原代码中的全角符号‹为半角< count: 10000 ) } } // 获取应用临时目录(沙盒内可写) let tempDir = FileManager.default.temporaryDirectory let exportURL = tempDir.appending(path: "TestCustomModel.bin") try await data.export(to: exportURL) } }
额外提示:
- 原代码模板字符串中的
‹是全角符号,建议替换为半角<,避免可能的模板解析问题 - 不要使用系统类名(如
Data)作为自定义类名,避免潜在的命名冲突
内容的提问来源于stack exchange,提问作者Goran
相关产品推荐
相关产品推荐

