2015-03-19 75 views
1

我已经搜索了广泛的答案,但没有找到,所以我在这里问。我试图读取使用Swift在iTunes中的当前曲目,但每当我尝试引用任何iTunes的类(iTunesApplication,iTunesTrack等),我收到以下错误:Swift iTunes ScriptingBridge链接器错误

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
P.S.如果我使用Obj-C,它工作得很好。它只在我使用Swift时出错。

+0

可能的重复http://stackoverflow.com/questions/27395805/swift-undefined-symbols-itunesapplication – Pranav 2015-05-09 06:25:34

回答

1

由于Swift的强大的静态类型,它有问题链接代码,它没有一个实现或二进制。因此,要使用Objective-C桥接头,最有可能需要使用通用的SBObject,因为Swift知道这些实现,尽管您的.h声明了其他类。

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

+0

自从在Snow Leopard中引入AppleScriptObjC以来,Scripting Bridge框架已经过时了。与Objective-C和Swift的集成非常简单,AppleScriptObjC比SB快得多 – vadian 2015-06-27 17:54:32

+0

太糟糕了没有AppleScriptSwift ... – geowar 2015-12-15 17:02:06