【问题标题】:Swift iTunes ScriptingBridge linker errorSwift iTunes ScriptingBridge 链接器错误
【发布时间】:2015-03-19 00:14:04
【问题描述】:

我已经广泛搜索了这个问题的答案,但没有找到,所以我在这里问。我正在尝试使用 Swift 读取 iTunes 中的当前曲目,但每当我尝试引用任何 iTunes 类(iTunesApplication、iTunesTrack 等)时,都会出现以下错误:

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

知道为什么会这样吗?

谢谢,
-tlf
附:如果我使用 Obj-C,它工作得很好。只有在我使用 Swift 时才会出错。

【问题讨论】:

标签: macos cocoa swift itunes scripting-bridge


【解决方案1】:

由于 Swift 的强静态类型,它存在与既没有实现也没有二进制文件的代码链接的问题。因此,要使用 Objective-C 桥接头,您很可能需要使用通用 SBObjects,因为 Swift 知道这些的实现,即使您的 .h 声明了其他类。

另一种方法是使用脚本生成本机 Swift 文件,其中包含可以查看和使用的声明。 Here 是一个 Python 脚本(完全公开:它是我的),它生成 Objective-C 脚本桥头然后创建一个原生 Swift 版本。这避免了链接器错误和前面提到的 SBObject 泛型类型。

【讨论】:

  • 自从在 Snow Leopard 中引入 AppleScriptObjC 后,Scripting Bridge 框架就已经过时了。与 Objective-C 和 Swift 的集成非常简单,AppleScriptObjC 比 SB 快得多
  • 可惜没有 AppleScriptSwift...
猜你喜欢
  • 1970-01-01
  • 2016-10-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-02
  • 2017-11-14
  • 1970-01-01
  • 2023-03-16
相关资源
最近更新 更多