Ответ 1
При создании для iOS неявного SDK для xcrun является SDK iOS, поэтому вы можете изменить его на SDK Mac OS X с параметром командной строки. Измените первую строку в script на:
#!/usr/bin/env xcrun --sdk macosx swift
Вот простой быстрый script:
#!/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)
Я добавил эту script как фазу сборки (до "фазы источников компиляции" ) в проекте iOS, но XCode не смог построить проект с ошибкой "undefined NSTask()..." Когда я добавил такой же script в проект OSX, проект сборки XCode без каких-либо ошибок.
Вопрос в том, почему XCode ищет NSTask внутри рамки iOS (где не существует) вместо этого запускает swift script в качестве платформы script (например, bash)?
Просто добавьте: swift script не входит в проект с другими файлами для компиляции. Он просто добавлен в фазу сборки, даже до компиляции, других исходных файлов (которые являются objective-c файлами) для ее запуска.
Любые идеи о том, как запустить пользовательский swift script из проекта iOS XCode, когда script содержит классы, которые не входят в структуру iOS?
При создании для iOS неявного SDK для xcrun является SDK iOS, поэтому вы можете изменить его на SDK Mac OS X с параметром командной строки. Измените первую строку в script на:
#!/usr/bin/env xcrun --sdk macosx swift
+1 для ответа @Mats.
Для тех, кто получает ошибку, например *** is only available on OS X 10.11 or newer
.
Вы можете:
#!/usr/bin/env xcrun --sdk macosx swift -target x86_64-macosx10.11
ОБНОВЛЕНИЕ 1:
Если вы не подготовитесь к Swift 3, но используете Xcode 8, вы также можете управлять версией toolchain:
xcrun --toolchain com.apple.dt.toolchain.Swift_2_3 -f swift
Итак:
#!/usr/bin/env xcrun --toolchain com.apple.dt.toolchain.Swift_2_3 --sdk macosx swift -target x86_64-macosx10.11
также ответы на проверку здесь: fooobar.com/questions/57398/...
Если вы отключите переменную среды SDKROOT
перед вызовом swift script, она затем будет использовать OS X sdk.