it-swarm.com.de

Funktionieren Swift-basierte Anwendungen unter OS X 10.9 / iOS 7 und niedriger?

Funktionieren Swift-basierte Anwendungen unter OS X 10.9 (Mavericks)/iOS 7 und niedriger?

Zum Beispiel läuft auf einer Maschine OS X 10.8 (Mountain Lion), und ich frage mich, ob eine Anwendung, die ich in Swift schreibe, darauf ausgeführt wird.

611
MeIr

Ich habe es gerade für Sie getestet. Swift Anwendungen werden in Standard-Binärdateien kompiliert und können unter OS X 10.9 und iOS 7 ausgeführt werden.


Einfache Swift Anwendung zum Testen:

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 kann unter OS X 10.9 und iOS 7.0 bereitgestellt werden. Bei älteren Betriebssystemversionen stürzt es normalerweise beim Start ab.

198
Greg Parker

Apple hat angekündigt, dass Swift Apps abwärtskompatibel mit iOS 7 und OS X Mavericks sein werden. Die WWDC-App ist in Swift geschrieben.

104
Ben Gottlieb

Update - Gemäß Xcode 6 Beta 4

mindestbereitstellungsziel für iOS 7 und OS X 10.9

Der Swift -Compiler und Xcode erzwingen jetzt ein Mindestziel für die Bereitstellung von iOS 7 oder OS X Mavericks. Das Festlegen eines früheren Bereitstellungsziels führt zu einem Buildfehler.

Aus Xcode 6 Release Note

Meine vorherige Antwort (siehe unten) ist daher für keine weitere Entwicklung relevant. Swift ist für iOS6 und niedriger nicht mehr verfügbar


Eine Swift -Anwendung kann unter iOS 6 ausgeführt werden. Obwohl viele Leute sagen, dass Swift nur iOS 7+ und OS X 10.9+ unterstützt, ist dies meiner Erfahrung nach nicht der Fall.

Ich habe eine einfache Anwendung getestet, die vollständig in Swift auf einem iOS 6-Gerät geschrieben wurde. Es funktioniert einwandfrei . Wie Apple sagt, ist Swift Code binärkompatibel mit Objective-C-Code. Es verwendet denselben Compiler und dieselbe Laufzeit, um die Binärdatei zu erstellen.

Hier ist der Code, den ich getestet habe:

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 ist eine einfache Anwendung, die programmgesteuert eine Schaltfläche hinzufügt. Meine Anwendung enthält nur zwei Dateien, AppDelegate.Swift und ViewController.Swift.

Wenn Sie also keine neuen APIs verwenden, die als Teil des iOS 8 SDK oder einiger Swift spezifischer APIs hinzugefügt wurden (entsprechende API ist für Objective-C nicht verfügbar), funktioniert Ihre Anwendung nahtlos unter iOS 6 oder höher ( getestet und funktioniert), auch unter iOS 5 (nicht getestet). Die meisten APIs in Swift ersetzen lediglich die vorhandenen Objective-C-APIs. Tatsächlich sind sie in der Binärdatei gleich.

Hinweis: Gemäß Xcode 6 Beta 4 für Swift Apps sollte das Bereitstellungsziel iOS 7 oder OS X 10.9 sein (siehe obiges Update). Daher ist Swift für iOS6 und niedriger nicht mehr verfügbar


100
Anil Varghese

In Kürze:

Swift-basierte Anwendungen können auf OS X Mavericks oder iOS 7 mit abzielen die gleiche App.

Wie ist es möglich ?

Xcode bettet eine kleine Swift Laufzeitbibliothek in das Bundle Ihrer App ein . Da die Bibliothek eingebettet ist, verwendet Ihre App eine konsistente Version von Swift, die auf früheren, aktuellen und zukünftigen Betriebssystemversionen ausgeführt wird.

Warum sollte ich dieser Antwort vertrauen?

Weil ich diese Antwort nicht sage, wie ein Apple Typ es mir in Twitter erzählt hat, oder ich habe Hallo Welt geschrieben und es getestet.

Ich habe es aus Apple-Entwicklerblog genommen.

darauf können Sie vertrauen.

33
Durai Amuthan.H

Swift verwendet dieselbe Laufzeit wie Objective-C und kann Objective-C sogar in derselben Anwendung nebeneinander ausführen (gemäß der Keynote der WWDC 2014).

Dies muss mit Xcode 6 und dem neuen SDK überprüft werden, um eine endgültige Antwort zu finden.

30

Ich habe alle Antworten gelesen, die besagten: Nein, Swift funktioniert nicht mit weniger als iOS 7. Aber ich sagte JA, Ich habe gerade ein Swift Projekt erstellt, das in Xcode 5 mit dem Bereitstellungsziel 6.0 ausgeführt wird.

  • Ich erstelle gerade ein Demo-Projekt in Xcode 6 BETA mit der ausgewählten Programmiersprache Swift.
  • Schließen Sie die Betaversion von Xcode 6, und ich öffne dieses Demo-Projekt in Xcode 5 mit Bereitstellungsziel 6.0
  • Und wählen Sie auch Simulator 6.1 .

Dann läuft das Projekt auch im Simulator 6.1 . Mein MacOS X ist 10.9.3 , also habe ich ja gesagt, das läuft unter iOS 7. mit 10.9 .3 Mac OS X .

Hier ist ein Screenshot des Simulators:

Enter image description here

Hier ist auch eine Demo

22
Nitin Gohel

Während der Code dies bestätigt, hat Apple selbst gesagt, dass Swift unter iOS 7 und Mavericks kompatibel sein wird ( Stand der Plattformen , Sitzung 102, um die 34-Minuten-00-Sekunden-Marke) um WWDC 2014 .

20
virindh

Swift-Anwendungen werden unter iOS 7 und höher unterstützt, wie in den Beta 4-Versionshinweisen angegeben. iOS 6.0, 6.1, 7.0, 7.1, 8.0 in Xcode 6 Beta

Swift-Anwendungen werden auf Plattformen unterstützt OS X 10.9 und höherOS X 10.4 bis 10.10 im Bereitstellungsziel. Ich habe das Targeting auf 10.5 bis 10.10 getestet und es auf 10.9.3 ausgeführt

15
vladof81

Dies ist der Beitrag, den ich aus dem Blog Apple Swift gelesen habe, der möglicherweise hilfreich ist:

App-Kompatibilität:

Wenn Sie eine Swift App schreiben, können Sie sicher sein, dass Ihre App auch in Zukunft funktioniert. Tatsächlich können Sie mit derselben App auf OS X Mavericks oder iOS 7 zurückgreifen. Dies ist möglich, weil Xcode eine kleine Laufzeitbibliothek Swift in das Bundle Ihrer App einbettet. Da die Bibliothek eingebettet ist, verwendet Ihre App eine konsistente Version von Swift, die auf früheren, aktuellen und zukünftigen Betriebssystemversionen ausgeführt wird.

Binäre Kompatibilität und Frameworks:

Während die Laufzeitkompatibilität Ihrer App sichergestellt ist, wird die Sprache Swift selbst weiterentwickelt und auch die Binärschnittstelle wird geändert. Aus Sicherheitsgründen sollten alle Komponenten Ihrer App mit der gleichen Version von Xcode und dem Compiler Swift erstellt werden, um sicherzustellen, dass sie zusammenarbeiten.

Dies bedeutet, dass Frameworks sorgfältig verwaltet werden müssen. Wenn Ihr Projekt beispielsweise Frameworks verwendet, um Code für eine eingebettete Erweiterung freizugeben, möchten Sie die Frameworks, die App und die Erweiterungen zusammen erstellen. Es wäre gefährlich, sich auf binäre Frameworks zu verlassen, die Swift verwenden - insbesondere von Dritten. Wenn sich Swift ändert, sind diese Frameworks nicht mit dem Rest Ihrer App kompatibel. Wenn sich die Binärschnittstelle in ein oder zwei Jahren stabilisiert, wird die Laufzeit Swift Teil des Host-Betriebssystems, und diese Einschränkung besteht nicht mehr.

14
Yatheesha B L

Es scheint Swift Anwendungen nicht laufen auf OS X 10.7. Ich habe gerade eine einfache GUI-Anwendung erstellt (eine Ansicht, eine Beschriftung, eine Schaltfläche), die auf Mavericks einwandfrei funktioniert. Das Basis-SDK ist auf 10.9 und das Bereitstellungsziel auf 10.7 festgelegt. Ich habe diese Anwendung aus dem DerivedData-Ordner auf meine 10.7-VM kopiert und sie stürzt beim Starten ab. Dieser Fehler tritt auf:

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

Diese Meldung ist jedoch irritierend, da diese VM mit Sicherheit eine CoreGraphics-Bibliothek enthält. Andere Anwendungen, die CoreGraphics stark nutzen, funktionieren einwandfrei.

14
Mike Lischke

Ich habe getestet, ob ich eine Bare-Bone-App auf Swift-Basis auf einem iPod Touch-Gerät (3. Generation) ausführen kann. Es scheint, dass Swift-basierte Apps nicht mit iOS 5.x arbeiten, aber tun mit iOS 6.x arbeiten.

Folgendes wird im Debug-Protokoll angezeigt, als ich versuchte, die Test-App mit iOS 5.0.1 zu starten:

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

Unter iOS 6.1.6 funktioniert die App einwandfrei, ohne dass diese Fehlermeldungen angezeigt werden.

12
David H

Hier scheint es viele alte Antworten zu geben, daher wollte ich nur die offizielle Antwort des Swift Teams veröffentlichen. Swift ist abwärtskompatibel mit OS X Mavericks und iOS 7

Apple-Entwicklerblog Swift: Objective-C-ID als Swift Beliebig

11. Juli 2014

Kompatibilität

Eine der häufigsten Fragen, die wir auf der WWDC hörten, lautete: "Was ist die Kompatibilitätsgeschichte für Swift?". Dies scheint ein großartiges erstes Thema zu sein.

App-Kompatibilität Wenn Sie heute eine Swift App schreiben und diese bei der Veröffentlichung von iOS 8 und OS X Yosemite im Herbst im App Store einreichen, können Sie sicher sein, dass Ihre App auch in Zukunft funktioniert. Tatsächlich können Sie mit derselben App auf OS X Mavericks oder iOS 7 zurückgreifen. Dies ist möglich, weil Xcode ein kleines Swift einbettet. Laufzeitbibliothek im Bundle Ihrer App. Da die Bibliothek eingebettet ist, verwendet Ihre App eine konsistente Version von Swift, die auf früheren, aktuellen und zukünftigen Betriebssystemversionen ausgeführt wird.

12
Oren

Ich habe auch eine sehr einfache App für 10.8 ausprobiert (eine Schaltfläche setzt Text auf ein Etikett). Es stürzte beim Start ab, wie Greg Parker feststellte:

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

(Hierbei wurde ein Bereitstellungsziel von 10,7 verwendet.)

11
Valdar Moridin

Versuchen Sie den folgenden Code:

Es funktioniert ohne 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

Wenn es um Swift Frameworks geht. Ab heute wird mit Xcode Version 6.1.1 (6A2008a), wenn das Framework Swift auf iOS 7.1 ausgerichtet ist, eine Linker-Warnmeldung ausgegeben

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

und Bewerbung kann nicht an AppStore gesendet werden. Überprüfen Sie dieses Problem: Lint, um zu verhindern, dass dynamische Bibliotheken und Frameworks mit iOS 7 übertragen werden

8
Marcin

Ja, tatsächlich hat Apple angekündigt, dass Swift Apps abwärtskompatibel mit iOS 7 und OS X Mavericks sein werden. Darüber hinaus ist die WWDC-App in der Programmiersprache Swift geschrieben.

8
Bodi Osman

Schnelles Update, gültig ab 15. Februar 2015, wir können keine Apps an den Store senden, die mit einem SDK vor iOS 8 entwickelt wurden. Daher ist es besser, sich keine Gedanken über dieses Problem zu machen, da viele Leute vorgeschlagen haben, dass in Swift erstellte Apps auf OS X 10.9 und iOS 7. as bereitgestellt werden können Gut.

7
13th Ghost

beantwortetes Code-Snippet gepostet von Leandros scheint ein bisschen alt zu sein. Ich habe es in Swift 5 behoben und kompilierbar gemacht.

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