2015-01-09 11 views
7

przepisałem szablon wygaszacz ekranu, który generuje Xcode z Objective-C w Swift i gdy próbuję załadować go dostaję komunikat:Czy wygaszacze ekranu Swift działają w systemie Mac OS X przed Yosemite?

nie można użyć wygaszacza blahblah z tą wersją systemu MacOSX.

Skontaktuj się z dostawcą, aby uzyskać nową wersję wygaszacza ekranu.

Aktualnie korzystam z Mavericks. Czy to oznacza, że ​​wygaszacze ekranu Swift działają tylko w Yosemite, czy nawet nie?

Jest to kod Swift kiedyś zastąpi Objetive-C One:

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

To są moje ustawienia projektu:

enter image description here

Pierwotnie był to projekt Objective-C (nie ma szablonu Swift Screensaver) utworzonego na MacOSX 10.9, a interfejsy API, których używam, wygaszacze ekranu, istnieją od lat.

+0

Czy jesteś w stanie uruchomić dowolną aplikację na swoim OS X zbudowanym za pomocą Swift poza Xcode? –

+0

@BrandonBuck tak, mogę. – Pablo

+0

@Rob Nie sądzę, że używam interfejsu API 10.10. Czy to się skompiluje? Nie mogłem też znaleźć docelowego wdrożenia systemu OS X, ale jest taki sam jak wygenerowany w szablonie wygaszacza ekranu. Nic tam nie zmieniłem. Opublikuję zrzut ekranu ustawień projektu. – Pablo

Odpowiedz

2

Sprawdź "Cel wdrożenia OS X" dla ustawień projektu. Prawdopodobnie domyślnie jest ustawiony na dowolny system operacyjny, na którym pracuje twoja maszyna programistyczna, ale sprawdź dokładnie. Jeśli chcesz wesprzeć 10,9, trzeba zmienić to ustawienie do 10,9:

Deployment Target

także (i to jest bardziej z boku niż cokolwiek innego), niezależnie od tego, jaki cel wdrażania użyć, będziesz zezwól na uwzględnienie 10.10 API w kodzie. Będziesz także chciał sprawdzić dokumentację jakiejkolwiek metody Cocoa, do której dzwonisz, aby upewnić się, że nie są one specyficzne dla 10.10. O ile nie używasz nowszej funkcji, jest to mało prawdopodobne, ale warto o tym pamiętać.

+0

To jest projekt Screensaver utworzony na 10.9, to nie zmieniło się automagicznie na 10.10, więc jest i zawsze był na 10.9. A interfejs API, którego używam, wygaszacz ekranu, istnieje od lat. – Pablo

1

Tak, Swift może działać na OS X 10.9, ale nic wcześniej.

Podczas przenoszenia mojego wygaszacza ekranu do Swift napotkałem na kilka problemów, głównie dlatego, że nagłówki nie zostały "zmodernizowane" do pracy z Objective C 2.0. Jako takie, zmienne pobierające i ustawiające nie są zadeklarowane jako @property.

+0

Czy masz mały przykład wygaszacza ekranu Swift działającego w Mavericks? Nadal musimy znaleźć lub stworzyć taki kod. – Pablo

+2

Nie przenosiłem wszystkich ustawień interfejsu do Swift (mam zamiar spróbować to poprawić), ale możesz znaleźć moją pracę tutaj: https://github.com/MaddTheSane/NonsenseSaver/tree/swiftVersion Uwaga Celuję w 10.10, ale najważniejszą rzeczą, o którą musisz się martwić, jest ustawienie 'EMBEDDED_CONTENT_CONTAST_CONTAINS_SWIFT' na" TAK "na wygaszaczu ekranu. – MaddTheSane

13

Aby wygaszacz napisany w Swift pracy w systemie Mac OS X 10.9, należy ustawić projektu ustawienie osadzonej zawartości Zawiera kod SWIFT do Tak.

enter image description here

Na poziomie kodu będzie ona postrzegana jako dwie linie:

EMBEDDED_CONTENT_CONTAINS_SWIFT = YES; 

w pliku project.pbxproj.

+0

Świetnie! To dla mnie zadziałało! – Klaas

Powiązane problemy