¿Las aplicaciones basadas en Swift funcionan en OS X 10.9 / iOS 7 y versiones posteriores?


¿Funcionarán las aplicaciones basadas en Swift en OS X 10.9 (Mavericks)/iOS 7 y versiones anteriores?

Por ejemplo, tengo una máquina ejecutando OS X 10.8 (Mountain Lion), y me pregunto si una aplicación que escriba en Swift se ejecutará en ella.

Author: Peter Mortensen, 2014-06-02

18 answers

Acabo de probarlo para usted, las aplicaciones Swift se compilan en binarios estándar y se pueden ejecutar en OS X 10.9 e iOS 7.


Aplicación Swift simple utilizada para las pruebas:

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: NSDictionary?) -> Bool {
    self.window = UIWindow(frame: UIScreen.mainScreen().bounds)

    var controller = UIViewController()
    var view = UIView(frame: CGRectMake(0, 0, 320, 568))
    view.backgroundColor = UIColor.redColor()
    controller.view = view

    var label = UILabel(frame: CGRectMake(0, 0, 200, 21))
    label.center = CGPointMake(160, 284)
    label.textAlignment = NSTextAlignment.Center
    label.text = "I'am a test label"
    controller.view.addSubview(label)

    self.window!.rootViewController = controller
    self.window!.makeKeyAndVisible()
    return true
}
 509
Author: Leandros,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-04-04 07:50:58

El código Swift se puede implementar en OS X 10.9 e iOS 7.0. Por lo general, se bloqueará en el lanzamiento en versiones anteriores del sistema operativo.

 196
Author: Greg Parker,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-06-03 08:25:37

Apple ha anunciado que las aplicaciones Swift serán compatibles con iOS 7 y OS X Mavericks. La aplicación WWDC está escrita en Swift.

 102
Author: Ben Gottlieb,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-06-03 00:03:37

Actualización-Según Xcode 6 Beta 4

Destino mínimo de implementación de IOS 7 y OS X 10.9

El compilador Swift y Xcode ahora imponen un objetivo de implementación mínimo de iOS 7 o OS X Inconformista. Establecer un destino de implementación anterior resulta en un error de compilación.

De Xcode 6 nota de lanzamiento

Por lo tanto, mi respuesta anterior(que se muestra a continuación) no será aplicable a ningún desarrollo posterior. Swift ya no estará disponible para iOS6 y abajo


Una aplicación Swift se puede ejecutar en iOS 6. A pesar de que muchas personas dicen que Swift solo admitirá iOS 7+ y OS X 10.9+, desde mi experiencia no lo es.

He probado una aplicación simple escrita completamente en Swift en un dispositivo iOS 6. Funciona perfectamente bien. Como dice Apple, el código Swift es binario compatible con el código Objective-C. Utiliza el mismo compilador y tiempo de ejecución para crear el binario.

Aquí está el código que tengo probado:

import UIKit

class ViewController: UIViewController {

    override func viewDidLoad() {

        super.viewDidLoad()

        let button   = UIButton.buttonWithType(UIButtonType.System) as UIButton
        button.frame = CGRectMake(100, 100, 100, 50)
        button.backgroundColor = UIColor.greenColor()
        button.setTitle("Test Button", forState: UIControlState.Normal)
        button.addTarget(self, action: "buttonTapped:", forControlEvents: UIControlEvents.TouchUpInside)

        self.view.addSubview(button)
    }

    func buttonTapped(sender: UIButton!) {
        println("buttonTapped")
    }
}

Es una aplicación sencilla, simplemente añadiendo un botón mediante programación. Mi aplicación contiene solo dos archivos, AppDelegate.swift y ViewController.swift.

Por lo tanto, si no está utilizando ninguna API nueva agregada como parte del SDK de iOS 8 o algunas API específicas de Swift (la API correspondiente no está disponible para Objective-C), su aplicación funcionará sin problemas en iOS 6 o posterior (probado y funcionando), incluso en iOS 5 (no probado). La mayoría de las API de Swift son solo el reemplazo del Objective-C existente API. De hecho, son los mismos en binario.

Nota: Según Xcode 6 beta 4 para la implementación de aplicaciones swift, el objetivo debe ser iOS 7 o OS X 10.9 (consulte la actualización anterior). Así que swift ya no estará disponible para iOS6 y versiones posteriores


 99
Author: Anil Varghese,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-07-22 07:26:21

En breve:

Las aplicaciones basadas en Swift pueden dirigirse a OS X Mavericks o iOS 7 con esa misma aplicación.

¿Cómo es posible ?

Xcode incrusta una pequeña biblioteca de tiempo de ejecución de Swift dentro del paquete de su aplicación. Debido a que la biblioteca está incrustada, su aplicación utiliza una versión coherente de Swift que se ejecuta en versiones pasadas, presentes y futuras del sistema operativo.

¿Por qué debería confiar en esta respuesta ?

Porque no estoy diciendo esta respuesta como un chico de apple me dijo en twitter o escribí hola mundo y lo probé.

Lo tomé de blog de desarrolladores de Apple.

Así que puedes confiar en esto.

 32
Author: Durai Amuthan.H,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-10-16 16:09:27

Swift utiliza el mismo tiempo de ejecución que Objective-C e incluso puede vivir side-by-side Objective-C en la misma aplicación (según WWDC 2014 keynote).

Esto tendrá que ser comprobado/verificado usando Xcode 6 y el nuevo SDK para encontrar una respuesta final.

 30
Author: Chris Pietschmann,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-07-12 19:48:49

Leí todas las respuestas que decían: No, Swift no funciona con menos de iOS 7. Pero dije , acabo de crear un proyecto Swift que se ejecuta en Xcode 5 con destino de implementación 6.0.

  • Acabo de crear un proyecto de demostración en Xcode 6 BETA con el lenguaje de programación Swift seleccionado.
  • Cierre Xcode 6 beta, y abro este proyecto de demostración en Xcode 5 con destino de implementación 6.0
  • Y también seleccione simulador 6.1.

Entonces ese proyecto se ejecuta bien en simulador 6.1. Mi macOS X es 10.9.3 , así que dije que sí, que se ejecuta en menor que iOS 7. con 10.9.3 Mac OS X .

Aquí está una captura de pantalla del simulador:

Introduzca la descripción de la imagen aquí

Aquí hay una demostración también

 22
Author: Nitin Gohel,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-03-25 19:07:36

Mientras que el código lo confirma, la propia Apple ha dicho que Swift será compatible con iOS 7 y Mavericks en su discurso técnico (Estado de las plataformas, sesión 102, alrededor de la marca de 34 min 00 seg) en WWDC 2014.

 20
Author: virindh,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-07-12 19:50:44

Las aplicaciones Swift son compatibles con iOS 7 y superiores como se indica en las notas de la versión Beta 4. iOS 6.0, 6.1, 7.0, 7.1, 8.0 en Xcode 6 Beta

Las aplicaciones Swift son compatibles con plataformas OS X 10.9 y superiores. OS X 10.4 a 10.10 en Destino de implementación. He probado en la orientación 10.5 a 10.10, y se ejecuta en 10.9.3

 15
Author: vladof81,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-07-22 02:40:18

Parece que las aplicaciones Swift no se ejecutan en OS X 10.7. Acabo de crear una aplicación GUI simple (una vista, una etiqueta, un botón) que funciona bien en Mavericks. El SDK base se establece en 10.9 y el destino de implementación en 10.7. Copié esa aplicación de la carpeta DerivedData a mi máquina virtual 10.7, y se estrelló al iniciar, mostrar este error:

Crashed Thread:  0

Exception Type:  EXC_BREAKPOINT (SIGTRAP)
Exception Codes: 0x0000000000000002, 0x0000000000000000

Application Specific Information:
dyld: launch, loading dependent libraries

    Dyld Error Message:

  Library not loaded: /System/Library/Frameworks/CoreGraphics.framework/Versions/A/CoreGraphics
  Referenced from: /Users/USER/Desktop/Swift-Test.app/Contents/MacOS/../Frameworks/libswiftAppKit.dylib
  Reason: image not found

Binary Images:
       0x109c65000 -        0x109c6afff +private.Swift-Test (1.0 - 1) <649695D0-58FD-3D02-9176-2D40D4E711F2> /Users/USER/Desktop/Swift-Test.app/Contents/MacOS/Swift-Test
       0x109c83000 -        0x109dbffff +libswift_stdlib_core.dylib (1.0 - 600.0.34.4.5) <10AAC369-9404-321D-A892-49F65856D7AF> /Users/USER/Desktop/Swift-Test.app/Contents/Frameworks/libswift_stdlib_core.dylib
...

Sin embargo, este mensaje es irritante, ya que ciertamente hay una biblioteca CoreGraphics en esta VM. Otro las aplicaciones que hacen un uso intensivo de CoreGraphics funcionan bien.

 14
Author: Mike Lischke,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-07-12 20:13:30

Este es el post que leí en el blog de Apple Swift, podría ser útil:

Compatibilidad de aplicaciones :

Si escribe una aplicación Swift, puede confiar en que su aplicación funcionará bien en el futuro. De hecho, puede dirigirse de nuevo a OS X Mavericks o iOS 7 con esa misma aplicación. Esto es posible porque Xcode incorpora una pequeña biblioteca de tiempo de ejecución de Swift dentro del paquete de su aplicación. Debido a que la biblioteca está incrustada, su aplicación utiliza una versión coherente de Swift que se ejecuta en el pasado, versiones actuales y futuras del sistema operativo.

Compatibilidad y Frameworks Binarios:

Mientras que la compatibilidad en tiempo de ejecución de su aplicación está garantizada, el lenguaje Swift en sí seguirá evolucionando, y la interfaz binaria también cambiará. Para estar seguros, todos los componentes de su aplicación deben construirse con la misma versión de Xcode y el compilador Swift para garantizar que funcionen juntos.

Esto significa que los frameworks deben gestionarse con cuidado. Por ejemplo, si su proyecto utiliza frameworks para comparta código con una extensión incrustada, querrá compilar los marcos, la aplicación y las extensiones juntos. Sería peligroso confiar en marcos binarios que utilizan Swift, especialmente de terceros. A medida que Swift cambie, esos marcos serán incompatibles con el resto de su aplicación. Cuando la interfaz binaria se estabilice en uno o dos años, el tiempo de ejecución de Swift pasará a formar parte del sistema operativo host y esta limitación dejará de existir.

 14
Author: Yatheesha B L,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-07-18 12:04:54

Probé ejecutando una aplicación básica basada en Swift en un dispositivo iPod Touch (3ra generación). Parece que las aplicaciones basadas en Swift no funcionan con iOS 5.x pero hacer trabajar con iOS 6.x.

Esto es lo que aparece en el registro de depuración cuando intenté iniciar la aplicación de prueba con iOS 5.0.1:

dyld: F_ADDFILESIGS failed for /private/var/mobile/Applications/59E31E79-9525-43B0-9DF6-8FEF3C0080F1/SwiftTestApp.app/Frameworks/libswift_stdlib_core.dylib with errno=1
dyld: F_ADDFILESIGS failed for /private/var/mobile/Applications/59E31E79-9525-43B0-9DF6-8FEF3C0080F1/SwiftTestApp.app/Frameworks/libswiftCoreGraphics.dylib with errno=1
dyld: F_ADDFILESIGS failed for /private/var/mobile/Applications/59E31E79-9525-43B0-9DF6-8FEF3C0080F1/SwiftTestApp.app/Frameworks/libswiftDarwin.dylib with errno=1
dyld: F_ADDFILESIGS failed for /private/var/mobile/Applications/59E31E79-9525-43B0-9DF6-8FEF3C0080F1/SwiftTestApp.app/Frameworks/libswiftDispatch.dylib with errno=1
dyld: F_ADDFILESIGS failed for /private/var/mobile/Applications/59E31E79-9525-43B0-9DF6-8FEF3C0080F1/SwiftTestApp.app/Frameworks/libswiftFoundation.dylib with errno=1
dyld: F_ADDFILESIGS failed for /private/var/mobile/Applications/59E31E79-9525-43B0-9DF6-8FEF3C0080F1/SwiftTestApp.app/Frameworks/libswiftObjectiveC.dylib with errno=1
dyld: F_ADDFILESIGS failed for /private/var/mobile/Applications/59E31E79-9525-43B0-9DF6-8FEF3C0080F1/SwiftTestApp.app/Frameworks/libswiftUIKit.dylib with errno=1
dyld: Symbol not found: _OBJC_CLASS_$_NSObject
  Referenced from: /private/var/mobile/Applications/59E31E79-9525-43B0-9DF6-8FEF3C0080F1/SwiftTestApp.app/Frameworks/libswift_stdlib_core.dylib
  Expected in: /usr/lib/libobjc.A.dylib
 in /private/var/mobile/Applications/59E31E79-9525-43B0-9DF6-8FEF3C0080F1/SwiftTestApp.app/Frameworks/libswift_stdlib_core.dylib

Para iOS 6.1.6, la aplicación se ejecuta bien sin mostrar esos mensajes de error.

 12
Author: David H,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-06-09 21:43:02

Parece que hay muchas respuestas antiguas aquí, así que solo quería publicar la respuesta oficial del equipo de Swift. Swift es compatible con OS X Mavericks y iOS 7

Desarrollador de Apple swift blog: Objective-C id as Swift Any

Jul 11, 2014

Compatibilidad

Una de las preguntas más comunes que escuchamos en WWDC fue: "¿Cuál es la historia de compatibilidad de Swift?". Este parece un gran primer tema.

Compatibilidad de aplicaciones En pocas palabras, si si escribe una aplicación Swift hoy y la envía a la App Store este otoño, cuando se publiquen iOS 8 y OS X Yosemite, puede confiar en que su aplicación funcionará bien en el futuro. De hecho, puede dirigirse a OS X Mavericks o iOS 7 con la misma aplicación. Esto es posible porque Xcode incorpora una pequeña biblioteca de tiempo de ejecución de Swift dentro del paquete de su aplicación. Debido a que la biblioteca está incrustada, su aplicación utiliza una versión coherente de Swift que se ejecuta en versiones pasadas, presentes y futuras del sistema operativo.

 12
Author: Oren,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-03-25 18:36:39

También probé una aplicación muy simple en 10.8 (un botón, establece el texto en una etiqueta). Se estrelló en el arranque, como Greg Parker declaró:

Dyld Error Message:
  Symbol not found: __dispatch_source_type_memorypressure
  Referenced from: /Volumes/*/SwifTest.app/Contents/MacOS/../Frameworks/libswiftDispatch.dylib
  Expected in: /usr/lib/libSystem.B.dylib
in /Volumes/*/SwifTest.app/Contents/MacOS/../Frameworks/libswiftDispatch.dylib

(Esto estaba utilizando un objetivo de despliegue de 10.7)

 11
Author: Valdar Moridin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-06-09 22:08:54

Intente el siguiente código:

Está funcionando sin StoryBoard:

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: NSDictionary?) -> Bool {
    self.window = UIWindow(frame: UIScreen.mainScreen().bounds)
    self.window!.backgroundColor = UIColor.whiteColor()

    // Create a nav/vc pair using the custom ViewController class

    let nav = UINavigationController()
    let vc = ViewController(nibName: "ViewController", bundle: nil)

    // Push the vc onto the nav
    nav.pushViewController(vc, animated: false)

    // Set the window’s root view controller
    self.window!.rootViewController = nav

    // Present the window
    self.window!.makeKeyAndVisible()
    return true
}
 10
Author: PREMKUMAR,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-07-12 20:01:24

Sí, de hecho Apple ha anunciado que las aplicaciones Swift serán compatibles con iOS 7 y OS X Mavericks. Además, la aplicación WWDC está escrita en el lenguaje de programación Swift.

 8
Author: Bodi Osman,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-03-18 15:16:12

Cuando se trata de Frameworks Swift. En cuanto a hoy, con Xcode versión 6.1.1 (6A2008a), si el marco Swift está dirigido a iOS 7.1, linker report warning

ld: warning: embedded dylibs/frameworks only run on iOS 8 or later.

Y la aplicación no se puede enviar a AppStore. Compruebe este problema: Lint para evitar que las bibliotecas y marcos dinámicos pasen con iOS 7

 8
Author: Marcin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-03-25 19:06:34

Actualización rápida, efectiva desde el 15 de febrero de 2015, no podemos enviar aplicaciones a la tienda que se desarrollaron utilizando un SDK antes de iOS 8. Por lo tanto , teniendo esto en cuenta, es mejor no preocuparse por este problema, ya que muchas personas han sugerido que las aplicaciones hechas en Swift se pueden implementar en OS X 10.9 e iOS 7.0 también.

 7
Author: 13th Ghost,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-04-11 19:25:39