【问题标题】:Swift and ScriptingBridge.frameworkSwift 和 ScriptingBridge.framework
【发布时间】:2014-09-20 14:32:48
【问题描述】:

在我的 Swift 项目中,我需要通过 ScriptingBridge 框架与 iTunes 进行通信。根据Apple文档,我使用sdef /Applications/iTunes.app | sdp -fh --basename iTunes创建iTunes.h文件,然后将ScriptingBridge.framework链接到项目并使用#import "iTunes.h"创建AppName-Bridging-Header.h文件。

但是当我尝试获取任何 iTunes 应用程序属性时,例如

var iTunesApp: iTunesApplication? = SBApplication.applicationWithBundleIdentifier("com.apple.iTunes") as? iTunesApplication
let currentTrack: iTunesTrack? = iTunesApp?.currentTrack

我得到类似的链接器错误

Undefined symbols for architecture x86_64:
"_OBJC_CLASS_$_iTunesApplication", referenced from:
  __TFC5NowP_14iTunesWorker21fetchCurrentTrackInfofS0_FT_T_ in iTunesWorker.o
  __TFC5NowP_14iTunesWorkercfMS0_FT_S0_ in iTunesWorker.o
  _get_field_types_iTunesWorker in iTunesWorker.o
"_OBJC_CLASS_$_iTunesTrack", referenced from:
  __TFC5NowP_14iTunesWorker21fetchCurrentTrackInfofS0_FT_T_ in iTunesWorker.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

我使用 Xcode 6 beta 4。有什么想法吗?

【问题讨论】:

    标签: objective-c macos swift itunes scripting-bridge


    【解决方案1】:

    检查一下,它使用 Swift 并且可以正常工作(我测试过)

    https://gist.github.com/bjhomer/fe8b3b05388b71ba0ab9

    import ScriptingBridge
    
    @objc protocol iTunesTrack {
        optional var name: String {get}
        optional var album: String {get}
    }
    
    @objc protocol iTunesApplication {
        optional var soundVolume: Int {get}
        optional var currentTrack: iTunesTrack? {get}
    }
    
    extension SBApplication : iTunesApplication {}
    
    let app: iTunesApplication = SBApplication(bundleIdentifier: "com.apple.iTunes")
    
    // Because these are all optional properties (to avoid providing an implementation), we have 
    // to use '!' to indicate we know the implementation exists.
    let track: iTunesTrack? = app.currentTrack!
    let album = track?.album!
    let trackName = track?.name!
    
    
    println("Current track: \(trackName) - \(album)")
    

    【讨论】:

    • 不好意思,赶时间看到有需要的程序员小伙伴
    • 不错的更新。无需急于回答将近两年前提出的问题。如果他们屏住呼吸,他们将不再需要答案。
    【解决方案2】:

    当我使用valueForKey(key: String?) 获取属性时,我发现链接器错误消失了。所以这个问题看起来像是 Swift 测试版的不完美。

    【讨论】:

    • 我在第一行遇到了同样的错误:(var iTunesApp: iTunesApplication? = ...)。你有什么其他办法解决这个错误吗?
    • @TomLocke,不,我没有。我已经为自己决定,将 Swift 用于商业项目还为时过早。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-26
    • 2014-12-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多