我正在尝试创建Swift OS X应用程序,并发现使用ScriptingBridge时遇到了困难。
我包含了正确的iTunes.h文件,当我将“iTunesApplication”作为类型编写时,Xcode没有出现任何错误。
然而,当我编译(运行)该应用程序时,它给了我错误:( 有人知道这个问题吗?
架构x86_64的未定义符号:
“_OBJC_CLASS _ $ _ iTunesApplication”,引自:
AppDelegate.o中的__TFC12LoveYouChloe11AppDelegate10showWindowfS0_FPSs9AnyObject_T_
ld:找不到架构x86_64的符号
clang:错误:链接器命令失败,退出代码为1(使用-v查看调用)
这是我的代码:
var iTunes: iTunesApplication = SBApplication.applicationWithBundleIdentifier("com.apple.iTunes") as iTunesApplication
iTunes.playpause()
答案 0 :(得分:0)
解决此问题的最佳方法是使用生成的Objective-C Scripting Bridge标头并将其转换为本机Swift。我写了一个Python脚本(here),可以为你做到这一点。您可以查看我的回答here,以便更好地了解您感兴趣的确切内容。
答案 1 :(得分:-1)
而不是
var iTunes: iTunesApplication = SBApplication.applicationWithBundleIdentifier("com.apple.iTunes")
使用
var iTunes: AnyObject = SBApplication.applicationWithBundleIdentifier("com.apple.iTunes")
有时,当您连续访问两个或多个属性时,编译器会感到困惑(不明白为什么),因此您可能需要使用临时变量。 E.g:
而不是:
let songName: String = iTunes.playlists[0].songs[0].name
尝试:
let song: AnyObject = iTunes.playlists[0].songs[0]
let songName = song.name
或者更快(如果您将iTunes
声明为SBApplication
,这也有效):
let songName: String = iTunes.valueAtIndex(0, inPropertyWithKey: "playlists").valueAtIndex(0, inPropertyWithKey: "songs").valueForKey("name")
修改强> 您还可以生成此处指定的.swift标头:https://github.com/tingraldi/SwiftScripting