这是一个简单的快速脚本:
#!/usr/bin/env xcrun swift
import Foundation
let task = NSTask()
task.launchPath = "/bin/echo"
task.arguments = ["farg1", "arg2"]
let pipe = NSPipe()
task.standardOutput = pipe
task.launch()
let data = pipe.fileHandleForReading.readDataToEndOfFile()
let output: String = NSString(data: data, encoding: NSUTF8StringEncoding)
print(output)
Run Code Online (Sandbox Code Playgroud)
我在iOS项目中添加了这个脚本作为构建阶段(在'编译源阶段之前),但是XCode无法构建项目,错误'undefined NSTask()...'当我在OSX项目中添加相同的脚本时,XCode构建项目没有任何错误.
问题是为什么XCode在iOS框架中寻找NSTask(在哪里不存在)而不是以平台脚本(如bash)的形式运行swift脚本?
只是添加:swift脚本不包含在项目中,其他文件要编译.它只是在构建阶段,甚至在编译之前添加到其他源文件(它们是objective-c文件)来运行它.
当脚本包含不属于iOS框架的类时,如何从iOS XCode项目运行自定义swift脚本的任何想法?
Mat*_*ats 20
在为iOS构建时,xcrun的隐式SDK是iOS SDK,因此您可以使用命令行参数将其更改为Mac OS X SDK.将脚本中的第一行更改为:
#!/usr/bin/env xcrun --sdk macosx swift
Run Code Online (Sandbox Code Playgroud)
+1给@Mats的答案.
对于任何得到错误的人*** is only available on OS X 10.11 or newer.
您可以:
#!/usr/bin/env xcrun --sdk macosx swift -target x86_64-macosx10.11
Run Code Online (Sandbox Code Playgroud)
更新1:
如果您没有为Swift 3做好准备,但是您使用的是Xcode 8,您还可以控制工具链版本:
xcrun --toolchain com.apple.dt.toolchain.Swift_2_3 -f swift
Run Code Online (Sandbox Code Playgroud)
所以:
#!/usr/bin/env xcrun --toolchain com.apple.dt.toolchain.Swift_2_3 --sdk macosx swift -target x86_64-macosx10.11
Run Code Online (Sandbox Code Playgroud)
还有结帐答案:https://stackoverflow.com/a/36254848/1298043