objective-c - Apple Script Bridge 的奇怪错误 - iTunes

标签 objective-c macos

我正在尝试创建一个控制 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/

相关文章:

objective-c - 如何停止在每次函数调用时都创建新字典以减少内存使用量?

c - 在使用 lldb 调试 macOS 应用程序时,是否可以使用观察点观察寄存器的内容以进行更改?

objective-c - 如何隐藏空项目的 UITableView 网格线/分隔符

iphone - iphone/ipod 的序列号

ios - 从 ios-sim 启动单元测试不会执行所有测试

ios - 为什么堆栈展开在 CFRunLoopRunSpecific 处停止

iOS依次执行方法

macos - 在哪里可以下载适用于 OS X 32 位的 MongoDB

macos - 从 NSTableView 读取自动保存的 NSSortDescriptor

git - 防止进入密码钥匙串(keychain)