В целом, есть несколько способов настроить класс Objective- C в вашем проекте AppleScriptObj C:
- Добавить файл (ы) в проект - Objective- C имя класса будет тем, которое используется в объявлениях
@interface
/ @implementation
Добавьте свойство выхода в используемый класс / скрипт AppleScript, например, property someProperty : missing value
Создание экземпляра класса программно:
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 строк, поэтому я ' м, просто выделив изменения):
- Добавление
PFMoveApplication.h
и PFMoveApplication.m
файлов в проект (имя класса LetsMove
) - Добавление
Security.framework
в Связать двоичные файлы с библиотеками в Этапы сборки - Как описано в исходном проекте 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()
было добавлено следующее