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.
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
}
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.
Apple a annoncé que les applications Swift seront rétrocompatibles avec iOS 7 et OS X Mavericks. L'application WWDC est écrite en Swift.
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.
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
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.
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.
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:
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
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.
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.
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.
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.
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)
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
}
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.
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
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.