Ошибка компоновщика 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 с ним, вам, скорее всего, нужно будет использовать универсальный SBObjects потому что Swift знает реализацию их, хотя ваш.h объявляет другие классы.

Альтернативой является использование скрипта для генерации собственного файла Swift с объявлениями, которые он может видеть и использовать. Вот скрипт Python (полное раскрытие: он мой), который генерирует заголовки Objective-C Scripting Bridge, а затем создает собственную версию Swift. Это позволяет избежать ошибок компоновщика и вышеупомянутой универсальной типизации SBObject.

Другие вопросы по тегам