我正在使用 Swift 4.0 开发 Cocoa 应用程序,并且正在尝试使用 xetex 编译器渲染 LaTeX。我的应用程序的主要优点是它应该能够使用不同的 .ttf 进行渲染,所以这就是为什么我认为我需要 xetex(甚至是 luaLaTeX)。
这是我尝试过的
我考虑使用基于云的 LaTeX 渲染器,这样我就不必担心为每个系统安装 Xetex,但这并没有很好地完成,因为我只能在 Node.js 中找到一个付费服务,而我没有'认为我不能使用。
接下来,我假设用户已按照说明在线下载 xetex,并且我使用 /Library/TeX/texbin/xetex 命令通过 Process() 使用了系统调用,这几乎可以工作,但 Xcode 抱怨安全性给了我消息
compileLatex.sh: line 3: /Library/TeX/texbin/xetex: Operation not permitted
有什么我可以做的已知解决方法吗?如果我能以某种方式将 xetex 编译器与我的应用程序捆绑在一起,我认为那会很好,但我不知道如何做这样的事情。
相关代码
Process() 调用的 compileLatex.sh 的内容
#!/bin/bash
/Library/TeX/texbin/xetex "$1"
open "$2"
调用 bash 脚本的 ViewController 的内容。
let file = "TemplateMODIFIED.tex"
if let dir = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first {
var env = ProcessInfo.processInfo.environment
var path = env["PATH"] as! String
path = "/Library/TeX/texbin:" + path
env["PATH"] = path
let task = Process()
task.launchPath = "/bin/bash"
task.environment = env
task.arguments = [dir.path + "/compileLatex.sh", dir.path + "/TemplateMODIFIED.tex", dir.path + "/TemplateMODIFIED.pdf"]
task.launch()
}
任何关于我应该使用的解决方法或最佳实践的建议都值得赞赏。谢谢!
更新:我刚刚了解了 Cocoa 项目的 project.entitlements 文件,因此通过将沙盒模式切换为关闭,我能够执行系统调用并克服Operation not permitted
错误。所以我能够让它工作,但我仍然对这个解决方案并不完全满意,因为用户必须在使用这个应用程序之前下载并安装 xetex。