ios - the - xcode




¿Las aplicaciones basadas en Swift funcionan en OS X 10.9/iOS 7 y versiones inferiores? (12)

En breve:

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

Como es posible ?

Xcode incorpora una pequeña biblioteca de tiempo de ejecución Swift dentro del paquete de su aplicación . Debido a que la biblioteca está integrada, su aplicación utiliza una versión consistente 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 me dijo un chico de manzana en Twitter o escribí hola mundo y lo probé.

Lo tomé del blog desarrollador de Apple .

para que puedas confiar en esto

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

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


Actualización - Según Xcode 6 Beta 4

Destino de implementación mínimo 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 Mavericks. La configuración de un destino de implementación anterior produce un error de compilación

De Xcode 6 release note

Por lo tanto, mi respuesta anterior (mostrada a continuación) no será aplicable a ningún desarrollo posterior. Swift ya no estará disponible para iOS6 o inferior

Una aplicación Swift se puede ejecutar en iOS 6. Aunque mucha gente dice que Swift solo admitirá iOS 7+ y OS X 10.9+, según 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 compatible binario 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 he 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 simple, simplemente agregando un botón programáticamente. Mi aplicación contiene solo dos archivos, AppDelegate.swift y ViewController.swift .

Entonces, si no está utilizando ninguna nueva API agregada como parte del SDK de iOS 8 o alguna API específica de Swift (la API correspondiente no está disponible para Objective-C), su aplicación funcionará sin problemas en iOS 6 o posterior (probada y en funcionamiento), incluso en iOS 5 (no probado). La mayoría de las API en Swift son solo el reemplazo de las API existentes de Objective-C. De hecho son las mismas en binario.

Nota: Según Xcode 6 beta 4 para el destino de despliegue de aplicaciones Swift, debería ser iOS 7 o OS X 10.9 (consulte la actualización anterior). Tan rápido ya no estará disponible para iOS6 o inferior


Actualización rápida, vigente 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 creadas en Swift también se pueden implementar en OS X 10.9 y iOS 7.0 .


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


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


Esta es la publicación que leí del 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, puedes apuntar 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 Swift dentro del paquete de su aplicación. Debido a que la biblioteca está integrada, su aplicación utiliza una versión consistente de Swift que se ejecuta en versiones pasadas, presentes y futuras del sistema operativo.

Compatibilidad binaria y frameworks:

Si bien la compatibilidad con el tiempo de ejecución de su aplicación está asegurada, el lenguaje Swift continuará 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 marcos deben gestionarse con cuidado. Por ejemplo, si su proyecto usa marcos para compartir código con una extensión incrustada, querrá construir los marcos, la aplicación y las extensiones juntas. Sería peligroso confiar en marcos binarios que usen Swift, especialmente de terceros. Como Swift cambia, esos marcos serán incompatibles con el resto de tu aplicación. Cuando la interfaz binaria se estabilice en un año o dos, el tiempo de ejecución de Swift se convertirá en parte del sistema operativo host y esta limitación ya no existirá.


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 un destino de implementación de 6.0.

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

Entonces ese proyecto funciona bien en el simulador 6.1 . Mi MacOS X es 10.9.3 , así que dije que sí, que funciona en una versión inferior a iOS 7. con 10.9.3 Mac OS X.

Aquí hay una captura de pantalla del simulador:

Aquí hay una demostración también


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


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 bloquea al iniciar, muestra 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 máquina virtual. Otras aplicaciones que hacen un uso intensivo de CoreGraphics funcionan bien.


Probé ejecutar una aplicación Swift basada en Swift en un dispositivo iPod Touch (tercera generación). Parece que las aplicaciones basadas en Swift no funcionan con iOS 5.x, pero funcionan 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 funciona bien sin mostrar esos mensajes de error.


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


Swift usa el mismo tiempo de ejecución que Objective-C e incluso puede vivir de forma conjunta Objective-C en la misma aplicación (según la nota clave de la WWDC 2014).

Será necesario verificar / verificar esto utilizando Xcode 6 y el nuevo SDK para encontrar una respuesta final.





swift