Les applications basées sur Swift fonctionnent-elles sur OS X 10.9 / iOS 7 et versions inférieures?

Les applications basées sur Swift fonctionneront-elles sur OS X 10.9 (Mavericks) / iOS 7 et versions inférieures?

Par exemple, j'ai une machine exécutant OS X 10.8 (Mountain Lion), et je me demande si une application que j'écris dans Swift fonctionnera dessus.

596
demandé sur Peter Mortensen 2014-06-02 23:25:57

18 réponses

Je viens de le tester pour vous, les applications Swift compilent dans des 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
}
509
répondu Leandros 2016-04-04 07:50:58

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

196
répondu Greg Parker 2014-06-03 08:25:37

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

102
répondu Ben Gottlieb 2014-06-03 00:03:37

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 d'iOS 7 ou OS X Mavericks. La définition d'une cible de déploiement antérieure entraîne un échec de génération.

De Xcode 6 note de version

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


Une application Swift peut être exécutée sur iOS 6. Même si beaucoup de gens disent que Swift ne prendra 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 simple demande écrite entièrement en Swift dans un appareil iOS 6. Il 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 programme. Mon application ne contient que deux fichiers, AppDelegate.swift et ViewController.swift.

Donc, si vous n'utilisez aucune nouvelle API ajoutée dans le cadre du SDK iOS 8 ou certaines 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 version ultérieure (testé et fonctionnant), même sur iOS 5 (non testé). La plupart des API de Swift ne sont que le remplacement de L'Objective-C existant API. En fait, ils sont les mêmes en binaire.

Remarque: Selon Xcode 6 beta 4 pour swift apps, la cible de déploiement devrait être iOS 7 ou OS X 10.9 (voir la mise à jour ci-dessus). Donc swift ne sera plus disponible pour iOS6 et ci dessous


99
répondu Anil Varghese 2014-07-22 07:26:21

En bref:

Les applications basées sur Swift peuvent cibler vers OS X Mavericks ouiOS 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 . Étant donné que 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 Apple developer blog .

Donc vous pouvez faire confiance à cela.

32
répondu Durai Amuthan.H 2014-10-16 16:09:27

Swift utilise le même temps d'exécution que Objective-C et peut même vivre côte à côte Objective-C dans la même application (selon la keynote de la WWDC 2014).

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

30
répondu Chris Pietschmann 2014-07-12 19:48:49

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

  • je viens de créer un projet de démonstration dans 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 également sélectionner simulateur 6.1.

Alors ce projet s'exécute bien dans simulateur 6.1. Mon MacOS X est 10.9.3 , donc j'ai dit oui, qui fonctionne en dessous de iOS 7. avec 10.9.3 Mac OS X.

Voici une capture d'écran du simulateur:

Entrez la description de l'image ici

Voici une démo ainsi

22
répondu Nitin Gohel 2018-03-25 19:07:36

Alors que le code le confirme, Apple lui-même a déclaré que Swift sera 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
répondu virindh 2014-07-12 19:50:44

Les applications Swift sont prises en charge sur iOS 7 et supérieur comme indiqué dans les notes de 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 supérieures. OS 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
répondu vladof81 2014-07-22 02:40:18

Il semble que les applications Swift ne fonctionnent passur OS X 10.7. Je viens de créer une application graphique simple (une vue, une étiquette, un bouton) qui fonctionne bien sur les 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 crashs lors du démarrage, montre 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. Autre les applications qui font un usage intensif de CoreGraphics fonctionnent très bien.

14
répondu Mike Lischke 2014-07-12 20:13:30

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

Compatibilité De L'Application :

Si vous écrivez un Swift application, vous pouvez avoir confiance que votre application fonctionnera bien dans l'avenir. En fait, vous pouvez cibler de nouveau à OS X Mavericks ou iOS 7 avec cette même application. Cela est possible parce que Xcode intègre une petite bibliothèque D'exécution Swift dans le bundle de votre application. Étant donné que la Bibliothèque est intégrée, votre application utilise une version cohérente de Swift qui s'exécute sur past, le présent et le futur OS de presse.

Compatibilité binaire et Frameworks:

Alors que la compatibilité d'exécution de votre application est assurée, le langage Swift lui-même continuera à évoluer et l'interface binaire changera également. Pour être sûr, tous les composants de votre application doivent être construits avec la même version de Xcode et du compilateur Swift pour s'assurer qu'ils fonctionnent ensemble.

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

14
répondu Yatheesha B L 2014-07-18 12:04:54

J'ai testé l'exécution d'une application Swift à os nu sur un appareil iPod Touch (3ème génération). Il semble que les applications basées sur Swift ne fonctionnent pas avec iOS 5.x mais Ne travailler 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
répondu David H 2014-06-09 21:43:02

Il semble y avoir beaucoup de vieilles réponses ici, donc je voulais juste poster la réponse officielle de l'équipe Swift. Swift est rétrocompatible avec OS X Mavericks et iOS 7

Apple developer swift blog: ID Objective-C comme Swift tout

11 Juil. 2014

Compatibilité

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

Compatibilité De L'Application Tout simplement, si vous écrivez une application Swift aujourd'hui et le soumettre à L'App Store cet automne lorsque iOS 8 et OS X Yosemite sont libérés, vous pouvez faire confiance que votre application fonctionnera bien dans le futur. en fait, vous pouvez cibler OS X Mavericks ou iOS 7 avec cette même application. cela est possible parce que Xcode intègre une petite bibliothèque D'exécution Swift dans le bundle de votre application. Étant donné que 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
répondu Oren 2018-03-25 18:36:39

J'ai aussi essayé une application très simple sur 10.8 (un bouton, définit 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
répondu Valdar Moridin 2014-06-09 22:08:54

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
répondu PREMKUMAR 2014-07-12 20:01:24

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

8
répondu Bodi Osman 2015-03-18 15:16:12

Quand il s'agit de Frameworks Swift. Comme pour aujourd'hui, avec la version 6.1.1 de Xcode (6A2008a), si le framework Swift est ciblé sur iOS 7.1, l'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 dynamiques et les frameworks de passer avec iOS 7

8
répondu Marcin 2018-03-25 19:06:34

Mise à jour rapide, à compter du 15 février 2015, nous ne pouvons pas soumettre des applications au magasin qui ont été développées à l'aide d'un SDK avant iOS 8. Donc, en gardant 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 peuvent également être déployées sur OS X 10.9 et iOS 7.0.

7
répondu 13th Ghost 2015-04-11 19:25:39