2015-03-19 78 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