2015-01-09 6 views
7

schrieb ich die Bildschirmschoner-Vorlage, die Xcode von Objective-C in Swift erzeugt und wenn ich versuche, es mir diese Nachricht erhalten zu laden:Arbeiten Swift-Bildschirmschoner in Mac OS X vor Yosemite?

Sie können nicht die BlahBlah Bildschirmschoner mit dieser Version von Mac OS X verwenden.

Wenden Sie sich an den Hersteller, um eine neue Version des Bildschirmschoners zu erhalten.

Ich führe gerade Mavericks. Heißt das, dass Swift-Bildschirmschoner nur in Yosemite funktionieren oder gar nicht?

Dies ist der Swift Code, den ich die Objetive-C ersetzen verwendet:

import Foundation 
import ScreenSaver 

class BlahBlahView : ScreenSaverView { 
    convenience override init() { 
     self.init(frame: CGRectZero, isPreview: false) 
    } 

    override init(frame: NSRect, isPreview: Bool) { 
     super.init(frame: frame, isPreview: isPreview) 

     setAnimationTimeInterval(1.0/30.0) 
    } 

    required init?(coder aDecoder: NSCoder) { 
     super.init(coder: aDecoder) 
    } 


    override func startAnimation() { 
     super.startAnimation() 
    } 

    override func stopAnimation() { 
     super.stopAnimation() 
    } 

    override func drawRect(rect: NSRect) { 
     super.drawRect(rect) 
    } 

    override func animateOneFrame() { 

    } 

    override func hasConfigureSheet() -> Bool { 
     return false 
    } 

    override func configureSheet() -> NSWindow? { 
     return nil 
    } 
} 

sind meine Projekteinstellungen sind:

enter image description here

Dies war ursprünglich ein Objective-C-Projekt (Es gibt kein Swift Screensaver-Template, das auf MacOSX 10.9 erstellt wurde und die APIs, die ich benutze, Screensaver, existieren seit Jahren.

+0

Können Sie auf Ihrem OS X mit Swift außerhalb von Xcode eine Anwendung ausführen? –

+0

@BrandonBuck ja, ich kann. – Pablo

+0

@Rob Ich glaube nicht, dass ich eine 10.10 API verwende. Würde es sogar kompilieren? Ich konnte OS X Deployment Target auch nicht finden, aber es ist dasselbe wie in der Bildschirmschoner-Vorlage generiert. Ich habe dort nichts geändert. Ich werde einen Screenshot der Projekteinstellungen veröffentlichen. – Pablo

Antwort

2

Überprüfen Sie das "OS X Deployment Target" für Ihre Projekteinstellungen. Es wird wahrscheinlich auf das Betriebssystem Ihres Entwicklungscomputers zurückgesetzt, aber überprüfen Sie es. Wenn Sie 10.9 unterstützen möchten, müssen Sie diese Einstellung ändern, um 10,9:

Deployment Target

auch (und das ist eher nebenbei als alles andere), unabhängig davon, welche Implementierungsziel Sie verwenden werden Sie erlaubt sein, 10.10 API in Ihrem Code zu enthalten. Daher sollten Sie auch die Dokumentation zu den von Ihnen aufgerufenen Cocoa-Methoden überprüfen, um sicherzustellen, dass sie nicht spezifisch für 10.10 sind. Sofern Sie nicht eine neuere Funktion verwenden, ist dies ziemlich unwahrscheinlich, aber es ist auch etwas im Auge zu behalten.

+0

Es ist ein Bildschirmschoner-Projekt, das am 10.9 erstellt wurde. Es wurde nicht automatisch auf 10.10 geändert, also ist es immer 10.9. Und die API, die ich benutze, Screensaver, existiert seit Jahren. – Pablo

1

Ja, Swift kann unter OS X 10.9 laufen, aber vorher nichts.

Ich habe ein paar Probleme bei der Portierung meines Bildschirmschoners auf Swift, hauptsächlich weil die Header nicht "modernisiert" wurden, um mit Objective C 2.0 zu arbeiten. Daher werden Getter und Setter nicht mit deklariert.

+0

Haben Sie ein kleines Beispiel für einen Swift-Bildschirmschoner in Mavericks? Wir müssen noch einen solchen Code finden oder herstellen. – Pablo

+2

Ich habe nicht alle Einstellungen der Benutzeroberfläche auf Swift portiert (ich werde versuchen, es zu verbessern), aber Sie können meine Arbeit hier finden: https://github.com/MaddTheSane/NonsenseSaver/tree/swiftVersion Beachten Sie, dass Ich bin auf 10.10 ausgerichtet, aber das größte Problem, um das Sie sich sorgen müssen, ist, dass "EMBEDDED_CONTENT_CONTAINS_SWIFT" auf Ihrem Bildschirmschoner auf "YES" gesetzt ist. – MaddTheSane

13

in Swift Arbeit auf Mac OS X 10.9, stellen Sie die Projekteinstellung Embedded Inhalte enthält zu Ja Swift Code geschrieben, um einen Bildschirmschoner zu machen.

EMBEDDED_CONTENT_CONTAINS_SWIFT = YES; 

in Ihrer project.pbxproj Datei:

enter image description here

Auf Codeebene wird es als zwei Linien zu sehen.

+0

Großartig! Das hat für mich funktioniert! – Klaas