Ошибка компоновщика Swift iTunes ScriptingBridge
Я много раз искал ответ на этот вопрос, но не нашел ни одного, поэтому я спрашиваю здесь. Я пытаюсь прочитать текущий трек в iTunes с помощью Swift, но всякий раз, когда я пытаюсь сослаться на любой из классов iTunes (iTunesApplication, iTunesTrack и т. Д.), Я получаю следующую ошибку:
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
PS Если я использую Obj-C, он работает просто отлично. Это только ошибки, когда я использую Swift.
1 ответ
Из-за сильной статической типизации Swift у него есть проблемы со связыванием с кодом, для которого у него нет ни реализации, ни двоичного кода. Поэтому, чтобы использовать заголовок Objective-C с ним, вам, скорее всего, нужно будет использовать универсальный SBObject
s потому что Swift знает реализацию их, хотя ваш.h объявляет другие классы.
Альтернативой является использование скрипта для генерации собственного файла Swift с объявлениями, которые он может видеть и использовать. Вот скрипт Python (полное раскрытие: он мой), который генерирует заголовки Objective-C Scripting Bridge, а затем создает собственную версию Swift. Это позволяет избежать ошибок компоновщика и вышеупомянутой универсальной типизации SBObject.