630 Stimmen

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

Werden auf OS X 10.9 (Mavericks)/iOS 7 und niedriger basierende Anwendungen funktionieren?

Zum Beispiel habe ich einen Computer mit OS X 10.8 (Mountain Lion), und ich frage mich, ob eine Anwendung, die ich in Swift schreibe, darauf ausgeführt werden kann.

Oder was muss ich tun, um eine Swift-Anwendung unter Mac OS zu erstellen?

14voto

Yatheesha Punkte 10612

Dies ist der Beitrag, den ich im Apple Swift-Blog gelesen habe, könnte hilfreich sein:

App-Kompatibilität:

Wenn Sie eine Swift-App schreiben, können Sie darauf vertrauen, dass Ihre App auch in Zukunft gut funktionieren wird. Tatsächlich können Sie mit derselben App bis zurück zu OS X Mavericks oder iOS 7 zielen. Dies ist möglich, weil Xcode eine kleine Swift-Laufzeitbibliothek in das Bündel Ihrer App einbettet. Da die Bibliothek eingebettet ist, verwendet Ihre App eine konsistente Version von Swift, die auf vergangenen, aktuellen und zukünftigen Betriebssystemversionen läuft.

Binäre Kompatibilität und Frameworks:

Während die Laufzeitkompatibilität Ihrer App sichergestellt ist, wird die Swift-Sprache selbst weiterhin entwickelt werden, und die binäre Schnittstelle wird sich ebenfalls ändern. Zur Sicherheit sollten alle Komponenten Ihrer App mit derselben Version von Xcode und dem Swift-Compiler erstellt werden, um sicherzustellen, dass sie zusammenarbeiten.

Dies bedeutet, dass Frameworks sorgfältig verwaltet werden müssen. Wenn Ihr Projekt z.B. Frameworks verwendet, um Code mit einer eingebetteten Erweiterung zu teilen, sollten die Frameworks, die App und die Erweiterungen zusammen erstellt werden. Es ist gefährlich, sich auf binäre Frameworks zu verlassen, die Swift verwenden - insbesondere von Drittanbietern. Wenn sich Swift ändert, werden diese Frameworks mit dem Rest Ihrer App nicht kompatibel sein. Wenn die binäre Schnittstelle in einem Jahr oder zwei stabilisiert ist, wird die Swift-Laufzeitbibliothek Teil des Host-Betriebssystems sein und diese Einschränkung wird nicht mehr bestehen.

12voto

David H Punkte 2621

Ich habe getestet, eine minimalistische App auf Basis von Swift auf einem iPod Touch (3. Generation) Gerät auszuführen. Es scheint, dass Swift-basierte Apps nicht mit iOS 5.x funktionieren, aber mit iOS 6.x ja funktionieren.

Hier ist, was im Debug-Protokoll erscheint, als ich versucht habe, die Test-App mit iOS 5.0.1 zu starten:

dyld: F_ADDFILESIGS fehlgeschlagen für /private/var/mobile/Applications/59E31E79-9525-43B0-9DF6-8FEF3C0080F1/SwiftTestApp.app/Frameworks/libswift_stdlib_core.dylib mit errno=1
dyld: F_ADDFILESIGS fehlgeschlagen für /private/var/mobile/Applications/59E31E79-9525-43B0-9DF6-8FEF3C0080F1/SwiftTestApp.app/Frameworks/libswiftCoreGraphics.dylib mit errno=1
dyld: F_ADDFILESIGS fehlgeschlagen für /private/var/mobile/Applications/59E31E79-9525-43B0-9DF6-8FEF3C0080F1/SwiftTestApp.app/Frameworks/libswiftDarwin.dylib mit errno=1
dyld: F_ADDFILESIGS fehlgeschlagen für /private/var/mobile/Applications/59E31E79-9525-43B0-9DF6-8FEF3C0080F1/SwiftTestApp.app/Frameworks/libswiftDispatch.dylib mit errno=1
dyld: F_ADDFILESIGS fehlgeschlagen für /private/var/mobile/Applications/59E31E79-9525-43B0-9DF6-8FEF3C0080F1/SwiftTestApp.app/Frameworks/libswiftFoundation.dylib mit errno=1
dyld: F_ADDFILESIGS fehlgeschlagen für /private/var/mobile/Applications/59E31E79-9525-43B0-9DF6-8FEF3C0080F1/SwiftTestApp.app/Frameworks/libswiftObjectiveC.dylib mit errno=1
dyld: F_ADDFILESIGS fehlgeschlagen für /private/var/mobile/Applications/59E31E79-9525-43B0-9DF6-8FEF3C0080F1/SwiftTestApp.app/Frameworks/libswiftUIKit.dylib mit errno=1
dyld: Symbol nicht gefunden: _OBJC_CLASS_$_NSObject
  Referenziert von: /private/var/mobile/Applications/59E31E79-9525-43B0-9DF6-8FEF3C0080F1/SwiftTestApp.app/Frameworks/libswift_stdlib_core.dylib
  Erwartet in: /usr/lib/libobjc.A.dylib
 in /private/var/mobile/Applications/59E31E79-9525-43B0-9DF6-8FEF3C0080F1/SwiftTestApp.app/Frameworks/libswift_stdlib_core.dylib

Für iOS 6.1.6 läuft die App problemlos, ohne diese Fehlermeldungen anzuzeigen.

12voto

Oren Punkte 5015

Es scheint hier viele alte Antworten zu geben, deshalb wollte ich nur die offizielle Antwort des Swift-Teams posten. Swift ist abwärtskompatibel mit OS X Mavericks und iOS 7

Apple Entwickler Swift Blog: Objective-C id als Swift Any

11. Juli 2014

Kompatibilität

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

App Kompatibilität Einfach ausgedrückt, wenn Sie heute eine Swift-App schreiben und sie diesen Herbst im App Store einreichen, wenn iOS 8 und OS X Yosemite veröffentlicht werden, können Sie darauf vertrauen, dass Ihre App auch in Zukunft gut funktionieren wird. Tatsächlich können Sie mit derselben App bis zurück zu OS X Mavericks oder iOS 7 abzielen. Dies ist möglich, weil Xcode eine kleine Swift-Laufzeitbibliothek in das Bündel Ihrer App einbettet. Da die Bibliothek eingebettet ist, verwendet Ihre App eine konsistente Version von Swift, die auf vergangenen, aktuellen und zukünftigen Betriebssystemversionen läuft.

11voto

Valdar Moridin Punkte 266

Ich habe auch eine sehr einfache App auf 10.8 ausprobiert (eine Schaltfläche, die den Text auf einem Label festlegt). Es ist beim Start abgestürzt, wie Greg Parker angab:

Dyld-Fehlermeldung:
  Symbol nicht gefunden: __dispatch_source_type_memorypressure
  Referenziert von: /Volumes/*/SwifTest.app/Contents/MacOS/../Frameworks/libswiftDispatch.dylib
  Erwartet in: /usr/lib/libSystem.B.dylib
in /Volumes/*/SwifTest.app/Contents/MacOS/../Frameworks/libswiftDispatch.dylib

(Dies wurde mit einem Bereitstellungsziel von 10.7 durchgeführt)

10voto

PREMKUMAR Punkte 8273

Probieren Sie den folgenden Code aus:

Es funktioniert ohne StoryBoard:

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: NSDictionary?) -> Bool {
    self.window = UIWindow(frame: UIScreen.mainScreen().bounds)
    self.window!.backgroundColor = UIColor.whiteColor()

    // Erstellen Sie ein nav/vc-Paar mithilfe der benutzerdefinierten ViewController-Klasse

    let nav = UINavigationController()
    let vc = ViewController(nibName: "ViewController", bundle: nil)

    // Fügen Sie das vc dem nav hinzu
    nav.pushViewController(vc, animated: false)

    // Legen Sie die Root-View-Controller des Fensters fest
    self.window!.rootViewController = nav

    // Fenster anzeigen
    self.window!.makeKeyAndVisible()
    return true
}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X