web-dev-qa-db-fra.com

Est-ce que les applications basées sur Swift fonctionnent sur OS X 10.9 / iOS 7 et versions antérieures?

Est-ce que les applications basées sur Swift fonctionnent sur OS X 10.9 (Mavericks)/iOS 7 et versions antérieures?

Par exemple, j'ai une machine en cours d'exécution OS X 10.8 (Mountain Lion), et je me demande si une application que j'écris dans Swift sera exécutée.

611
MeIr

Je viens de le tester pour vous, les applications Swift sont compilées en binaires standard et peuvent être exécutées sur OS X 10.9 et iOS 7.


Application Swift simple utilisée pour les tests:

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
}
518
Leandros

Swift code peut être déployé sur OS X 10.9 et iOS 7.0. Il se plantera généralement au lancement sur les anciennes versions du système d'exploitation.

198
Greg Parker

Apple a annoncé que les applications Swift seraient rétrocompatibles avec iOS 7 et OS X Mavericks. L'application WWDC est écrite en Swift.

104
Ben Gottlieb

Mise à jour - Selon Xcode 6 Beta 4

cible de déploiement minimale pour iOS 7 et OS X 10.9

Le compilateur Swift et Xcode appliquent désormais une cible de déploiement minimale pour iOS 7 ou Mavericks OS X. La définition d'une cible de déploiement antérieure entraîne un échec de la construction.

De la note de version de Xcode 6

Donc, ma réponse précédente (ci-dessous) ne sera pas applicable à un développement ultérieur. Swift ne sera plus disponible pour iOS6 et inférieur


Une application Swift peut être exécutée sur iOS 6. Même si de nombreuses personnes affirment que Swift ne prend en charge que iOS 7+ et OS X 10.9+, d’après mon expérience, ce n’est pas le cas.

J'ai testé une application simple entièrement écrite en Swift sur un appareil iOS 6. Cela fonctionne parfaitement bien . Comme le dit Apple, le code Swift est compatible binaire avec le code Objective-C. Il utilise le même compilateur et le même runtime pour créer le binaire.

Voici le code que j'ai testé:

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")
    }
}

C'est une application simple, il suffit d'ajouter un bouton par programmation. Mon application ne contient que deux fichiers, AppDelegate.Swift et ViewController.Swift.

Ainsi, si vous n'utilisez pas de nouvelles API ajoutées dans le SDK iOS 8 ou des API spécifiques à Swift (l'API correspondante n'est pas disponible pour Objective-C), votre application fonctionnera de manière transparente sur iOS 6 ou une version ultérieure (testée et fonctionnelle), même sur iOS 5 (non testé). La plupart des API de Swift ne sont que le remplacement des API Objective-C existantes. En fait, ils sont les mêmes en binaire.

Remarque: conformément à Xcode 6 beta 4, la cible de déploiement d'applications Swift doit être iOS 7 ou OS X 10.9 (voir la mise à jour ci-dessus). Donc, Swift ne sera plus disponible pour iOS6 et inférieur


100
Anil Varghese

En bref:

Les applications basées sur Swift peuvent cibler vers OS X Mavericks ou iOS 7 avec cette même application.

Comment est-ce possible ?

Xcode intègre une petite bibliothèque d’exécution Swift dans le bundle de votre application . Comme la bibliothèque est intégrée, votre application utilise une version cohérente de Swift qui s'exécute sur les versions passées, présentes et futures du système d'exploitation.

Pourquoi devrais-je faire confiance à cette réponse?

Parce que je ne dis pas cette réponse comme un gars d’Apple m’a dit sur Twitter ou j’ai écrit hello world et l’ai testé.

Je l'ai pris de blog de développeur Apple .

afin que vous puissiez avoir confiance en cela.

33
Durai Amuthan.H

Swift utilise la même exécution que Objective-C et peut même vivre côte à côte avec Objective-C dans la même application (comme indiqué dans le discours de la WWDC 2014).

Ceci devra être vérifié/vérifié en utilisant Xcode 6 et le nouveau SDK pour trouver une réponse finale.

30

J'ai lu toutes les réponses disant: Non, Swift ne fonctionne pas avec moins de iOS 7. Mais j'ai dit YES, je viens de créer un projet Swift cela fonctionne dans Xcode 5 avec la cible de déploiement 6.0.

  • Je viens de créer un projet de démonstration en Xcode 6 BETA avec le langage de programmation Swift sélectionné.
  • Fermez Xcode 6 beta et j'ouvre ce projet de démonstration dans Xcode 5 avec la cible de déploiement 6.0
  • Et sélectionnez également le simulateur 6.1 .

Ensuite, ce projet fonctionne bien dans simulateur 6.1 . Mon MacOS X est 10.9.3 , alors j'ai dit oui, cela fonctionne en dessous de iOS 7. avec 10.9 .3 Mac OS X .

Voici une capture d'écran du simulateur:

Enter image description here

Voici également une démo

22
Nitin Gohel

Alors que le code le confirme, Apple a lui-même déclaré que Swift serait compatible sur iOS 7 et Mavericks dans leur keynote technique ( État des plates-formes , session 102, autour de la marque 34 min 00 sec) à WWDC 2014 .

20
virindh

Les applications Swift sont prises en charge sur iOS 7 et versions ultérieures comme indiqué dans les notes de publication de la version bêta 4. iOS 6.0, 6.1, 7.0, 7.1, 8.0 dans Xcode 6 bêta

Les applications Swift sont prises en charge sur les plates-formes OS X 10.9 et ultérieureOS X 10.4 à 10.10 dans la cible de déploiement. J'ai testé sur le ciblage 10.5 à 10.10, et en cours d'exécution sur 10.9.3

15
vladof81

Ceci est le message que j'ai lu sur le blog Apple Swift, pourrait être utile:

Compatibilité des applications:

Si vous écrivez une application Swift, vous pouvez être assuré que votre application fonctionnera bien à l'avenir. En fait, vous pouvez cibler en arrière sur OS X Mavericks ou iOS 7 avec cette même application. Cela est possible car Xcode intègre une petite bibliothèque d'exécution Swift dans l'offre de votre application. Comme la bibliothèque est intégrée, votre application utilise une version cohérente de Swift qui s'exécute sur les versions passées, présentes et futures du système d'exploitation.

Compatibilité binaire et cadres:

Bien que la compatibilité d'exécution de votre application soit assurée, le langage Swift lui-même continuera d'évoluer et l'interface binaire changera également. Pour des raisons de sécurité, tous les composants de votre application doivent être construits avec la même version de Xcode et du compilateur Swift afin de garantir leur compatibilité.

Cela signifie que les cadres doivent être gérés avec soin. Par exemple, si votre projet utilise des frameworks pour partager du code avec une extension intégrée, vous souhaiterez construire les frameworks, l'application et les extensions ensemble. Il serait dangereux de s’appuyer sur des cadres binaires qui utilisent Swift - en particulier de tiers. Au fur et à mesure que Swift change, ces frameworks seront incompatibles avec le reste de votre application. Lorsque l'interface binaire se stabilisera au bout d'un an ou deux, le moteur d'exécution de Swift fera partie du système d'exploitation hôte et cette limitation n'existera plus.

14
Yatheesha B L

Il semble que les applications Swift ne pas s'exécutent sur OS X 10.7. Je viens de créer une application graphique simple (une vue, une étiquette, un bouton) qui fonctionne très bien sur Mavericks. Le SDK de base est défini sur 10.9 et la cible de déploiement sur 10.7. J'ai copié cette application du dossier DerivedData sur ma machine virtuelle 10.7, et elle se bloque au démarrage, affiche cette erreur:

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
...

Cependant, ce message est irritant, car il y a certainement une bibliothèque CoreGraphics dans cette machine virtuelle. D'autres applications qui font un usage intensif de CoreGraphics fonctionnent parfaitement.

14
Mike Lischke

J'ai testé l'exécution d'une application Swift basée sur Swift sur un périphérique iPod Touch (3e génération). Il semble que les applications basées sur Swift ne fonctionnent pas fonctionnent avec iOS 5.x mais font fonctionnent avec iOS 6.x.

Voici ce qui apparaît dans le journal de débogage lorsque j'ai essayé de lancer l'application de test avec 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

Pour iOS 6.1.6, l'application fonctionne correctement sans afficher ces messages d'erreur.

12
David H

Il semble y avoir beaucoup d'anciennes réponses ici, alors je voulais simplement publier la réponse officielle de l'équipe Swift. Swift est rétrocompatible avec OS X Mavericks et iOS 7

Blog Swift pour les développeurs Apple: Objective-C id: Swift Any

11 juil. 2014

Compatibilité

L'une des questions les plus courantes que nous avons entendues à WWDC était la suivante: "Quelle est l'histoire de la compatibilité pour Swift?". Cela semble être un excellent premier sujet.

Compatibilité des applications En termes simples, si vous écrivez une application Swift aujourd'hui et que vous la soumettez à l'App Store cet automne, lorsque iOS 8 et OS X Yosemite seront disponibles, vous pouvez être assuré que votre application fonctionnera bien dans le futur. En fait, vous pouvez cibler votre OS X Mavericks ou iOS 7 avec la même application. Cela est possible car Xcode intègre une petite bibliothèque d'exécution Swift dans votre le paquet de l'application. Comme la bibliothèque est intégrée, votre application utilise une version cohérente de Swift qui s'exécute sur les versions passées, présentes et futures du système d'exploitation.

12
Oren

J'ai aussi essayé une application très simple sur 10.8 (un bouton, place le texte sur une étiquette). Il s'est écrasé au démarrage, comme l'a déclaré Greg Parker:

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

(Cela utilisait une cible de déploiement de 10,7)

11
Valdar Moridin

Essayez le code suivant:

Cela fonctionne sans 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
PREMKUMAR

En ce qui concerne Swift Frameworks. Pour aujourd'hui, avec Xcode version 6.1.1 (6A2008a), si le cadre Swift est destiné à iOS 7.1, avertissement de rapport de l'éditeur de liens

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

et l'application ne peut pas être soumise à l'AppStore. Vérifiez ce problème: Lint pour empêcher les bibliothèques et les infrastructures dynamiques de passer avec iOS 7

8
Marcin

Oui, en fait, Apple a annoncé que les applications Swift seraient rétrocompatibles avec iOS 7 et OS X Mavericks. En outre, l'application WWDC est écrite dans le langage de programmation Swift.

8
Bodi Osman

Mise à jour rapide, effective à compter du 15 février 2015, nous ne pouvons pas soumettre au magasin les applications développées à l'aide d'un SDK antérieur à iOS 8. Donc, gardez cela à l'esprit, il vaut mieux ne pas s'inquiéter de ce problème car beaucoup de gens ont suggéré que les applications créées dans Swift puissent également être déployées sur OS X 10.9 et iOS 7..

7
13th Ghost

Extrait de code répond posté par Leandros semble un peu vieux. J'ai corrigé et rendu compilable dans Swift 5.

Swift 5

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: NSDictionary?) -> Bool {
    self.window = UIWindow(frame: UIScreen.main.bounds)
    let controller = UIViewController()
    let view = UIView(frame: CGRect(x: 0, y: 0, width: 320, height: 568))
    view.backgroundColor = UIColor.red
    controller.view = view

    let label = UILabel(frame: CGRect(x: 0, y: 0, width: 200, height: 21))
    label.center = CGPoint(x: 160, y: 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
}
0