我正在尝试创建一个控制 iTunes 的 ObjC 应用程序。我需要一个方法来返回 iTunes 中所有播放列表的数组。
我收到了有史以来最奇怪、最无用的错误消息......首先是代码:
#import "MusicControl.h"
#import "iTunes.h"
@implementation MusicControl
- (SBElementArray *) playlists {
// Create iTunes Object
iTunesApplication *iTunes = [SBApplication applicationWithBundleIdentifier:@"com.apple.iTunes"];
NSArray *sources = [iTunes sources];
iTunesSource *librarySource = nil;
for (iTunesSource *source in sources) {
if ([source kind] == iTunesESrcLibrary) {
librarySource = source;
break;
}
}
return [librarySource userPlaylists];
}
@end
我不知道数组返回是否有效,因为在进行一些调试后,我发现它爆炸的地方是我创建 iTunes 对象的第一行,它是复制并粘贴的来自Apple's website ...
我收到的错误是:
Undefined symbols for architecture x86_64:
"_OBJC_CLASS_$_SBApplication", referenced from:
objc-class-ref in MusicControl.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
对于到底发生了什么,有什么建议吗?
最佳答案
此消息(以及类似消息)意味着链接器正在寻找某些特定符号,但找不到它。在您的情况下,它是SBApplication
。
如果您还没有这样做,您应该确保您已链接到 ScriptingBridge 框架。
要添加框架,请单击 Xcode 左侧栏顶部的项目图标,然后选择“构建阶段”。如果“与二进制库的链接”尚未展开,请执行该操作并添加框架。
相同的过程可用于普通库(框架实际上只是库的包装器,至少对于本次讨论的目的而言是如此)。
关于objective-c - Apple Script Bridge 的奇怪错误 - iTunes,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9333551/