2015-01-09 12 views
7

Ho riscritto il modello di screen saver che genera Xcode da Objective-C in Swift e quando provo a caricarlo ottengo questo messaggio:Gli screensaver Swift funzionano in Mac OS X prima di Yosemite?

Non è possibile usare lo screensaver blahblah con questa versione di MacOSX.

contattare il fornitore per ottenere una nuova versione dello screen saver.

Attualmente sono in esecuzione Mavericks. Significa che gli screen saver di Swift funzionano solo su Yosemite, o addirittura non lì?

Questo è il codice Swift che ho usato per sostituire lo scopo principale-C uno:

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

Queste sono le mie impostazioni del progetto:

enter image description here

questo era in origine un progetto di Objective-C (non c'è alcun modello Swift Screensaver) creato su MacOSX 10.9 e le API che sto usando, Screensaver, esistono da anni.

+0

Sei in grado di eseguire qualsiasi applicazione sul vostro OS X costruito con Swift al di fuori di Xcode? –

+0

@BrandonBuck si, posso. – Pablo

+0

@Rob Non penso di utilizzare un'API 10.10. Potrebbe anche compilare? Inoltre, non sono riuscito a trovare OS X Deployment Target, ma è lo stesso generato nel modello di salvaschermo. Non ho cambiato niente lì. Pubblicherò uno screenshot delle impostazioni del progetto. – Pablo

risposta

2

Controllare la "OS X Deployment Target" per le impostazioni di progetto. Probabilmente il valore predefinito è il sistema operativo in esecuzione sulla tua macchina di sviluppo, ma controlla due volte. Se si desidera supportare 10.9, è necessario modificare questa impostazione a 10,9:

Deployment Target

anche (e questo è più di un a parte di ogni altra cosa), indipendentemente da ciò che destinazione di distribuzione si utilizza, ti essere autorizzati a includere 10.10 API nel codice. Pertanto, dovrai anche controllare la documentazione per tutti i metodi Cocoa che stai chiamando, per assicurarti che non siano specifici per 10.10. A meno che tu non stia usando una nuova funzionalità, questo è abbastanza improbabile, ma è qualcosa da tenere a mente, anche.

+0

È un progetto Screensaver creato il 10.9, non è stato modificato automaticamente a 10.10, quindi è sempre stato in 10.9. E l'API che sto usando, Screensaver, esiste da anni. – Pablo

1

Sì, Swift può essere eseguito su OS X 10.9, ma nulla in precedenza.

ho incontrato alcuni problemi quando il porting mio screen saver di Swift, soprattutto perché le intestazioni non sono stati "modernizzato" per lavorare con Objective C 2.0. Pertanto, getter e setter non vengono dichiarati con @property.

+0

Hai un piccolo esempio di uno screensaver Swift in esecuzione in Mavericks? Dobbiamo ancora trovare o creare questo codice. – Pablo

+2

Non ho portato tutte le impostazioni dell'interfaccia utente a Swift (cercherò di migliorarlo), ma puoi trovare il mio lavoro qui: https://github.com/MaddTheSane/NonsenseSaver/tree/swiftVersion Nota che Ho scelto come target 10.10, ma la cosa più importante di cui ti devi preoccupare è avere "EMBEDDED_CONTENT_CONTAINS_SWIFT" impostato su "YES" sullo screen saver. – MaddTheSane

13

Per creare un salvaschermo scritta nel lavoro Swift su Mac OS X 10.9, impostare l'impostazione contenuto incorporato progetto contiene il codice Swift a .

enter image description here

A livello di codice che sarà visto come due linee di:

EMBEDDED_CONTENT_CONTAINS_SWIFT = YES; 

nel file project.pbxproj.

+0

Ottimo! Questo ha funzionato per me! – Klaas

Problemi correlati