Ошибка связывания пользовательского намерения SiriKit на Xcode 10 - PullRequest
0 голосов
/ 03 июля 2018

Я создал новый файл Intent, и теперь у меня появляется следующая ошибка компоновщика:

Undefined symbols for architecture arm64:

"_OBJC_METACLASS_$_INIntentResponse", referenced from:
      _OBJC_METACLASS_$_KWdsjkhfjkdhskfIntentResponse in KWdsjkhfjkdhskfIntent.o
  "_OBJC_CLASS_$_INIntentResponse", referenced from:
      _OBJC_CLASS_$_KWdsjkhfjkdhskfIntentResponse in KWdsjkhfjkdhskfIntent.o
  "_OBJC_CLASS_$_INIntent", referenced from:
      _OBJC_CLASS_$_KWdsjkhfjkdhskfIntent in KWdsjkhfjkdhskfIntent.o
  "_OBJC_METACLASS_$_INIntent", referenced from:
      _OBJC_METACLASS_$_KWdsjkhfjkdhskfIntent in KWdsjkhfjkdhskfIntent.o
ld: symbol(s) not found for architecture arm64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

Ответы [ 3 ]

0 голосов
/ 03 декабря 2018

Эта ошибка произошла со мной, когда я пытался использовать сгенерированный код Intent для двух разных целей (основного приложения и расширения намерения), в то время как у каждой цели были разные версии развертывания и архитектура.

Мое главное приложение развернуто на ios 9.0 (armv7) , а расширение намерения должно быть не менее ios 12.0 (arm64) .

Чтобы решить эту проблему, сгенерированный код намерения должен быть ориентирован только на один тип архитектуры. В моем случае мне пришлось обновить версию развертывания основного приложения до ios 12.0 и тип архитектуры до arm64 , чтобы соответствовать расширению намерения.

0 голосов
/ 12 июня 2019

Из форумов Apple ( edford ):

Похоже, что структура Intent не связана с целью. На этапе сборки для цели убедитесь, что Intents.framework присутствует на этапе «Связать двоичные файлы с библиотеками».

Это решило мою проблему, которая была похожа.

0 голосов
/ 17 июля 2018

У меня была эта проблема, когда я добавил пользовательский файл .intentdefinition в проект, который не имел расширения Intents. Я решил это с помощью следующих шагов:

  • Удалить файл .intentdefinition
  • Добавить новую цель Расширение Intents
  • Добавить новую целевую структуру MyAppKit
  • Убедитесь, что цель MyApp зависит от нового расширения Intents И MyAppKit framework
  • Добавьте новый файл .intentdefinition, проверяя членство в цели только для цели MyAppKit.

После этого ошибка связи исчезла. Я еще не завершил расширение, поэтому, безусловно, требуются другие шаги, такие как обеспечение реализации IntentHandler, реализующей пользовательское намерение.

Фреймворк здесь может не требоваться строго, но я думаю, что это рекомендуемый способ, особенно если вы планируете использовать ярлыки, которые можно разрешать в фоновом режиме.

...