¿Cómo puedo usar swift en Terminal?


108

Leí Novedades de Xcode 6 . El artículo presenta algunas características nuevas sobre Xcode 6 y dice:

Línea de comando

El depurador de Xcode incluye una versión interactiva del lenguaje Swift, conocido como REPL (Read-Eval-Print-Loop). Utilice la sintaxis Swift para evaluar e interactuar con su aplicación en ejecución o escribir código nuevo en un entorno similar a un script. El REPL está disponible desde LLDB en la consola de Xcode o desde Terminal.

¿Quiero saber cómo obtener el REPL?


3
Aquí hay un artículo que escribí sobre esto. medium.com/swift-programming/…
Santosh

También puede usarlo en línea si le gusta repl.it/languages/swift
Amjad Masad

Respuestas:


135
sudo xcode-select -switch /Applications/Xcode.app/Contents/Developer

entonces puedes hacer uno de estos:

xcrun swift 
lldb --repl

A partir de Xcode 6.1, al escribir swiften la terminal también se inicia el REPL.


2
... y para salir, escriba Ctrl+ d.
arve0

57

Alternativamente, si no desea estropear su entorno de desarrollo actual, puede ejecutar:

/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/swift

30
O incluso podría dar un paso más y agregar esto a su ~/.bash_profile:alias swift="/Applications/Xcode6-Beta.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/swift"
David Beck

6
Para poder usar OS X SDK, también debe especificar la ruta:/Applications/Xcode6-Beta.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/swift -sdk /Applications/Xcode6-Beta.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.10.sdk
Linus Unnebäck

Gracias por la idea David. Agregué eso al perfil, pero sigo obteniendo No tal archivo o directorio, a pesar de que está allí, y los permisos están -rwxr-xr-x@ 1 mark2 admin 33557440 31 May 14:43 swift. No soy tan fuerte en unidad. ¿Alguien puede ver lo que está mal?
MarkAurelius

Usar xcrun --find swiftpara obtener el camino será mucho más a prueba de futuro
Mike Weller

1
xcrun --toolchain com.apple.dt.toolchain.Swift_2_3 swiftes mucho mejor. Respuesta de origen aquí: stackoverflow.com/a/36254848/5768974
Puttin

42

Paso 1: Abra la terminal
Paso 2: Escriba "swift"
Paso 3: No hay paso 3

Ejemplo:

GoldCoast:~ macmark$ swift
Welcome to Swift!  Type :help for assistance.
  1> println("Hello, world")
Hello, world
  2> var myVariable = 42
myVariable: Int = 42
  3> myVariable = 50
  4> let myConstant = 42
myConstant: Int = 42
  5> println(myVariable)
50
  6> let label = "The width is "
label: String = "The width is "
  7> let width = 94
width: Int = 94
  8> let widthLabel = label + String(width)
widthLabel: String = "The width is 94"
  9> :exit

GoldCoast:~ macmark$ 

Aunque puede seguir utilizándolo xcrun swift, desde Swift 2.1 en adelante, simplemente puede ejecutarlo swiftdesde la línea de comandos.
timbo

Mi ejemplo es de Swift 1.0 en julio de 2014. Estuvo funcionando sin xcrun desde siempre para mí.
MacMark

15

De la misma manera que ejecuta Swift desde la Terminal, también puede ejecutar scripts. Simplemente use el siguiente shebang y ejecute su script. ( Según Chris Lattner , creador de Swift)

#!/usr/bin/env xcrun swift -i

6
Según XCode 6 Beta 5, la -ibandera se ha eliminado y provocará un error. Déjelo ir y úselo #!/usr/bin/env xcrun swiften su lugar.
Jeehut

Cualquiera que quiera jugar con Swift 2.3 en Xcode 8 no debe perderse stackoverflow.com/a/36254848/1298043
Puttin

15

En Xcode 6.1.1 con las herramientas de línea de comandos instaladas, puede ejecutar scripts haciendo referencia directamente a /usr/bin/swiftla siguiente forma:

#!/usr/bin/swift

let variable: String = "string"
print("Test \(variable)")

Confirme que esto funciona con swift 2.1.1 (instalación de xcode 7.2)
thibaut noah

1
Cualquiera que quiera jugar con Swift 2.3 en Xcode 8 no debe perderse stackoverflow.com/a/36254848/1298043
Puttin

10

Si a alguien le importa un simple guión Swift:

#!/usr/bin/env xcrun --sdk macosx swift

Si se requiere una versión de destino específica

#!/usr/bin/env xcrun --sdk macosx swift -target x86_64-macosx10.11

Si se requiere una cadena de herramientas específica (como si desea usar Swift 2.3 pero está usando Xcode 8)

#!/usr/bin/env xcrun --toolchain com.apple.dt.toolchain.Swift_2_3 --sdk macosx swift -target x86_64-macosx10.11

Si desea utilizar Swift 2.2 en su Xcode 7.3.1, supongamos que Xcode 7.3.1 se encuentra en /Applications/Xcode7.app

sudo xcode-select -s /Applications/Xcode7.app/
xcrun --sdk macosx swift

a partir de ahora, el directorio de desarrollador activo predeterminado cambió, puede verificarlo usando:

xcode-select -p

Si desea utilizar instantáneas proporcionadas por Swift.org , no debe perderse la instalación aquí .


como respondí por primera vez en Ejecutar script rápido del proyecto Xcode iOS como fase de compilación


8

** actualización a partir de xcode6 beta 4 **

esto también se puede hacer en las preferencias de xcode. simplemente vaya a xcode -> preferencias -> ubicaciones.

para las herramientas de línea de comandos, simplemente seleccione la versión que desee de las opciones de la lista desplegable, consulte la imagen a continuación. (Swift requiere que la ruta sea la ruta de xcode6).

pantalla de herramientas de línea de comandos

Dejaré mi respuesta anterior a continuación también.


lo que dijo Kaan y también puede usar un script de Apple para hacer una aplicación simple para que pueda usarla para alternar.

abra el script de Apple> pegue este código a continuación y expórtelo como una aplicación para que con solo un clic pueda cambiar a la ruta predeterminada o la ruta beta (para usar swift)

set xcode6Path to "xcode-select -switch /Applications/Xcode6-Beta.app/Contents/Developer"
set xcodeDefaultPath to "xcode-select -switch /Applications/Xcode.app/Contents/Developer"

display dialog "set xcode sdk path to " buttons {"xcode 6", "default"} default button 1
copy result as list to {buttonPressed}
if buttonPressed is "default" then
    try
        do shell script xcodeDefaultPath with administrator privileges
    end try
else
    try
        do shell script xcode6Path with administrator privileges
    end try
end if

luego ejecuta> xcrun swift

Descargo de responsabilidad

  1. el script asume que tiene instalados xcode6-beta y xcode5.
  2. Si es un desarrollador nuevo que está probando solo xcode6beta, no necesitará ningún script o ruta de configuración manualmente. simplemente ejecute xcrun swiftya que la ruta ya está establecida para usted.
  3. cuando finalmente se lance xcode6, deberá restablecer su ruta a la predeterminada desde esta aplicación simple y nunca volver a usarla.

Tenía XCode 5 instalado y ahora lo he "actualizado" (= reemplazado) a XCode 6. ¿Hay alguna manera de recuperar 5.x ahora? ¿Con esta solución?
Matthias Max

¿Qué quieres decir con traer de vuelta 5.x? xcode6 GM o la versión de la tienda de aplicaciones reemplazarán a xcode5.
nsuinteger

6

Después de instalar la versión oficial de Xcode 6.1, hay un swiftcomando en /usr/bin/swift.

Tenga en cuenta que si tiene un Python diferente del Python proporcionado por Apple en la ruta, swiftpuede fallar con ImportError: No module named site. En ese caso, asegúrese de hacerlo export PATH=/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/sbinantes de llamar swift.


5

El comando xcrun usará la variable de entorno DEVELOPER_DIR para anular la instalación de Xcode actualmente seleccionada (como se establece con xcode-select). Puede usar eso para construir un solo comando que se ejecutará rápidamente en la línea de comando y lo colocará en el REPL. Eso se ve así:

/usr/bin/env DEVELOPER_DIR=/Applications/Xcode6-Beta.app/Contents/Developer xcrun swift 

y puedes alias eso simplemente 'rápido':

alias swift="/usr/bin/env DEVELOPER_DIR=/Applications/Xcode6-Beta.app/Contents/Developer xcrun swift"

Como nota al margen interesante, puede usar el mismo tipo de invocación para ejecutar un script rápido como usaría bash o python agregando un -i:

#!/usr/bin/env DEVELOPER_DIR=/Applications/Xcode6-Beta.app/Contents/Developer xcrun swift -i

println("Hello World!")

Por supuesto, una vez que Xcode 6 sea lanzado oficialmente y cambie a eso como sus herramientas de desarrollador predeterminadas, puede eliminar los bits DEVELOPER_DIR = .. y simplemente usar "xcrun swift".


4

asegúrese de instalar xcode 6.0 , pero no 6.1

Si recibe un error:

<unknown>:0: error: the SDK 'MacOSX10.9.sdk' does not support Swift

solo corre

xcrun --sdk iphonesimulator8.0 swift

o tu puedes

export SDKROOT="iphonesimulator8.0" 

y entonces

xcrun swift

Utilice " xcodebuild -showsdks" para enumerar los nombres de SDK disponibles.

si instala xcode 6.1 , simplemente

sudo xcode-select -s /Applications/*your-Xcode-6.1-path.app*/Contents/Developer
xcrun swift

2

Para XCode6, ejecute estos comandos:

$ sudo xcode-select -s /Applications/Xcode.app/Contents/Developer/

$ xcrun swift

Si recibe un error:

<unknown>:0: error: the SDK 'MacOSX10.9.sdk' does not support Swift

tratar:

xcrun swift -sdk /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator.sdk

1

terminal abierta

PSsudo xcode-select -switch /Applications/Xcode6-Beta6.app/Contents/Developer

Aviso: La Xcode6-Beta6.appconviene sustituir a la versión apropiada que ha instalado

Entonces pon esta línea alias swift='xcrun swift'a~/.bash_profile

Y,

PSsource ~/.bash_profile

PSswift

¡Ahí tienes!


1

Con la ayuda de Swift REPL (Read Eval Print Loop).

Los desarrolladores familiarizados con los lenguajes interpretados se sentirán cómodos en este entorno de línea de comandos, e incluso los desarrolladores experimentados encontrarán algunas características únicas.

Inicie Terminal.app, escriba swift y presione enter. Entonces estarás en Swift REPL.

        1> print("Hello Swift REPL")
     Hello Swift REPL
        2> 10 + 20
     $R0: Int = 30
        3> var name = "Yogendra Singh"
     name: String = "Yogendra Singh"
        4> print(name)
     Yogendra Singh
        5>
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.