在Yosemite之前,Swift屏保可以在Mac OS X中运行吗?

时间:2015-01-09 01:43:42

标签: macos swift osx-mavericks screensaver

我重写了Xcode从Objective-C生成Swift的屏幕保护程序模板,当我尝试加载它时,我得到了这样的消息:

  

您不能将BlahBlah屏幕保护程序与此版本的MacOSX一起使用。

     

请与供应商联系以获取新版本的屏幕保护程序。

我目前正在竞选小牛队。这是否意味着Swift屏幕保护程序只能在优胜美地工作,甚至不在那里?

这是我用来替换Objetive-C的Swift代码:

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

这些是我的项目设置:

enter image description here

这最初是在MacOSX 10.9上创建的Objective-C项目(没有Swift Screensaver模板),我使用的屏幕保护程序已经存在多年。

3 个答案:

答案 0 :(得分:13)

要在Mac OS X 10.9上使用Swift编写的屏幕保护程序,请将项目设置嵌入式内容包含Swift代码设置为

enter image description here

在代码级别,它将被视为两行:

EMBEDDED_CONTENT_CONTAINS_SWIFT = YES;
在project.pbxproj文件中

答案 1 :(得分:2)

检查项目设置的“OS X部署目标”。它可能默认为您的开发机器运行的任何操作系统,但请仔细检查。如果要支持10.9,则必须将此设置更改为10.9:

Deployment Target

此外(这不过是其他任何事情),无论您使用何种部署目标,您都可以在代码中包含10.10 API。因此,您还需要检查您正在调用的任何Cocoa方法的文档,以确保它们不是特定于10.10。除非你使用更新的功能,否则这是不太可能的,但也要记住这一点。

答案 2 :(得分:1)

是的,Swift可以在OS X 10.9上运行,但不能提前运行。

我将屏幕保护程序移植到Swift时遇到了一些问题,主要是因为标题尚未“现代化”以使用Objective C 2.0。因此,getter和setter不会使用@property声明。