Как ссылаться на код приложения с расширением SiriIntent?

Я недавно настроил цель SiriKit в своем приложении, но я не могу ссылаться на какой-либо код приложения внутри него.

Я добавил цель моего приложения в раздел "Построение целей-> Целевые зависимости" цели SiriKit, но все равно получаю следующие ошибки:

Undefined symbols for architecture arm64:
  "_OBJC_CLASS_$_<CLASSNAME>", referenced from:
      objc-class-ref in IntentHandler.o
ld: symbol(s) not found for architecture arm64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

Где имя класса приложения, на которое я пытаюсь ссылаться в классе IntentHandler.m.

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

Все "кажется" хорошо с кодом тоже, что странно. Подсветка синтаксиса работает, ctrl + click приводит меня к соответствующему классу и т. Д., Так что он явно находит класс в какой-то момент, но не там, где он важнее всего!

Мой код такой:

#import "IntentHandler.h"
#import "<CLASSNAME.h>

@interface IntentHandler () <INSearchForPhotosIntentHandling>

@end

@implementation IntentHandler

- (id)handlerForIntent:(INIntent *)intent {
    return self;
}

#pragma mark - INSearchForPhotosIntentHandling
- (void)handleSearchForPhotos:(INSearchForPhotosIntent *)intent completion:(void (^)(INSearchForPhotosIntentResponse *response))completion {
    NSUserActivity *userActivity = [[NSUserActivity alloc] initWithActivityType:NSStringFromClass([INSearchForPhotosIntent class])];
    Object test = [[<CLASSNAME> instance] getObjectWithName:@"test"];
    // do stuff with the test Object, which may require me to send the response as INSearchForPhotosIntentResponseCodeFailureRequiringAppLaunch
    // but for now just return INSearchForPhotosIntentResponseCodeContinueInApp.
    INSearchForPhotosIntentResponse *response = [[INSearchForPhotosIntentResponse alloc] initWithCode:INSearchForPhotosIntentResponseCodeContinueInApp userActivity:userActivity];
    completion(response);
}

@end

1 ответ

Здесь к классу Helper.swift можно получить доступ из моего приложения и расширения. Сделайте следующим образом.

1.

введите описание изображения здесь

  1. Перейдите в инспектор файлов в правой части Xcode.

введите описание изображения здесь

  1. Мой код в расширении.

введите описание изображения здесь

Примечание. В obj-c вы должны выполнить описанные выше шаги для файлов.h и.m.

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