Вызов метода или функции из Objective- c в AppleScript - PullRequest
0 голосов
/ 12 апреля 2020

Я пытаюсь использовать LestMove , чтобы быть более точным, второй метод реализации, где он говорит:

Вариант 2:

Скопируйте следующие файлы в ваш проект :

PFMoveApplication.h PFMoveApplication.m Если в вашем проекте включена поддержка AR C, вы можете отключить AR C в указанных выше файлах. Вы можете сделать это, добавив флаг компилятора -fno-obj c -ar c в исходный файл PFMoveApplication.m. См. Как отключить AR C для одного файла в проекте?

Если ваше приложение локализовано, скопируйте также файлы MoveApplication.string в ваш проект.

Свяжите свое приложение с Security.framework.

В методе делегата приложения "- [applicationWillFinishLaunching:]" вызовите функцию PFMoveToApplicationsFolderIfNeeded в самом верху.

но я не могу вызвать метод / класс, может кто-нибудь помочь мне с этим вопросом? Заранее спасибо!

1 Ответ

1 голос
/ 13 апреля 2020

В целом, есть несколько способов настроить класс Objective- C в вашем проекте AppleScriptObj C:

  • Добавить файл (ы) в проект - Objective- C имя класса будет тем, которое используется в объявлениях @interface / @implementation
  • Добавьте свойство выхода в используемый класс / скрипт AppleScript, например, property someProperty : missing value

    1. Создание экземпляра класса программно:

      set someProperty to current application's ClassName's alloc's init()

    или

  • Соедините вещи с помощью Interface Builder:
    • Добавьте NSObject (синий куб) из библиотеки в ваш проект
    • Установите класс объекта / куба к имени класса файла (ов) Objective- C в Identity Inspector
    • Подключите выход AppDelegate IB к объекту / кубу в Инспектор соединений
  • После настройки свойства outlet методы Objective- C можно использовать как любой другой скрипт / класс:

    someProperty's handler()


Этот проект LetsMove на самом деле не был настроен для AppleScriptObj C, но я смог немного его настроить чтобы запустить его. Я не настолько хорош в написании Objective- C, но мне помогло следующее, используя новый проект AppleScript по умолчанию с Xcode 10 в Mojave (исходный файл имеет длину более 500 строк, поэтому я ' м, просто выделив изменения):

  1. Добавление PFMoveApplication.h и PFMoveApplication.m файлов в проект (имя класса LetsMove)
  2. Добавление Security.framework в Связать двоичные файлы с библиотеками в Этапы сборки
  3. Как описано в исходном проекте README, добавить флаг компилятора -fno-objc-arc в файл Objective- C в Скомпилируйте источники из Фаз сборки

- Теперь немного изменим файлы Objective- C:

Переместите объявление @interface в файл .h и включите в него следующие переопределенные сигнатуры методов:

Методы PFMoveToApplicationsFolderIfNecessary и PFMoveIsInProgress переопределены как методы экземпляра:

- (void)PFMoveToApplicationsFolderIfNecessary;
- (BOOL)PFMoveIsInProgress;
Переопределите вышеуказанные сигнатуры методов в файле .m и включите эти методы в раздел @implementation - для этого переместите @end непосредственно перед вспомогательными методами ( после метода PFMoveIsInProgress) Удалите оператор isMainThread в начале метода PFMoveToApplicationsFolderIfNecessary - это не нужно (AppleScript обычно запускается в основном потоке) и устраняет другую проблему В исходном приложении все еще есть небольшие вещи, такие как NSUserDefaults, так что для вашего собственного проекта, посмотрите, нужно ли что-то еще менять (текст диалога, et c)

И, наконец, в файле AppDelegate.applescipt к applicationWillFinishLaunching:

    current application's LetsMove's alloc's init()'s PFMoveToApplicationsFolderIfNecessary()
было добавлено следующее
...