Rust 1.4.0(或更高版本)cargo/rustc在Xcode中使用NSTask在AppKit应用程序中运行时崩溃
带multirust的Rust 1.4.0安装在命令行上运行良好,但如果由Apple AppKit中的NSTask执行,则会在信号11下崩溃 我写了一些测试用例来复制它们。目前的状态是Rust 1.4.0(或更高版本)cargo/rustc在Xcode中使用NSTask在AppKit应用程序中运行时崩溃,xcode,cocoa,rust,appkit,rust-cargo,Xcode,Cocoa,Rust,Appkit,Rust Cargo,带multirust的Rust 1.4.0安装在命令行上运行良好,但如果由Apple AppKit中的NSTask执行,则会在信号11下崩溃 我写了一些测试用例来复制它们。目前的状态是 带有NSTask的命令行程序。这个很好用 带有NSTask的AppKit应用程序。这总是崩溃 AppKit应用程序仅链接到AppKit。应用中没有实际的应用套件代码。也会崩溃 AppKit应用程序在Objective-C中编写。也会崩溃 使用BSD级别pty而不是NSTask运行货物的AppKit应用程序。很好
- 带有NSTask的命令行程序。这个很好用
- 带有NSTask的AppKit应用程序。这总是崩溃
- AppKit应用程序仅链接到AppKit。应用中没有实际的应用套件代码。也会崩溃
- AppKit应用程序在Objective-C中编写。也会崩溃
- 使用BSD级别pty而不是NSTask运行货物的AppKit应用程序。很好
NSTask
之前,请执行以下操作
var envs = NSProcessInfo.processInfo().environment;
envs["DYLD_LIBRARY_PATH"] = nil
// print(NSProcessInfo.processInfo().environment["DYLD_LIBRARY_PATH"])
_remoteTask = NSTask()
_remoteTask.environment = envs
解释
有时,Xcode会将DYLD\u LIBRARY\u PATH
环境变量覆盖到非系统目录(类似于“/Users/Eonil/Workshop/Temp/Xcode/Derivations/EditorOnly hfhkxuguplpqvdcinldyuivhucp/Build/Products/Debug:/usr/lib/system/introspection”
)
这个环境变量被继承到NSTask
实例,因为.environment
没有被设置,并且保持为nil
最干净的解决方案是仔细设置所有需要的环境变量
我找不到关闭此Xcode行为的开关