Swift iTunes ScriptingBridge链接器错误

时间:2015-03-19 00:14:05

标签: macos cocoa swift itunes scripting-bridge

我已经广泛搜索了这个答案,但没有找到,所以我在这里问。我正在尝试使用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时出错。

1 个答案:

答案 0 :(得分:1)

由于Swift强大的静态类型,它存在与代码链接的问题,它没有实现或二进制代码。因此,要使用Objective-C Bridging Header,您很可能需要使用泛型SBObject,因为Swift知道这些的实现,即使你的.h声明了其他类。

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