Используйте Javascript для автоматизации (JXA) для создания списка
Я смотрю на создание JXA для создания plist. Моя отправная точка - AppleScript, который я нашел здесь. Я придумал этот фрагмент:
var se = Application('System Events');
var item1 = se.PropertyListItem({kind: "string", name: "employee_name", value: employeeName}).make();
var plistFile = se.PropertyListFile({name: '/Users/armando/Desktop/x.plist', PropertyListItem: [item1]}).make();
ScriptEditor компилируется без ошибок, файл создан, но в нем нет записей. Я предполагаю, что мне чего-то не хватает, как заполнить свойство PropertyListFile, где обрабатываются фактические записи.
Любая подсказка о том, как правильно использовать JXA с списком системных событий?
(в случае, если вам интересно, почему бы не использовать подход AppleScript, это потому, что я извлекаю данные из Excel с помощью автоматизации, но мне нужно проверить согласованность типов данных и нулевые значения... javascript показался мне более прямым подходом к изучению типов переменных и вносить исправления по мере необходимости)
2 ответа
Создание файлов списка свойств с помощью системных событий очень утомительно.
С JXA вы можете напрямую использовать код Objective-C.
var employeeName = "John Doe";
var item1 = { "employee_name" : employeeName };
var plist = $.NSDictionary.dictionaryWithDictionary(item1);
plist.writeToFileAtomically( '/Users/armando/Desktop/x.plist', true);
Протестировано вокруг, потому что я думал, что ДОЛЖНО быть возможно решить проблему, используя JXA, и нашел это решение. Это выглядит довольно просто, но действительно потребовалось некоторое время, чтобы найти:-/
// Setting some variables
plist_path = "~/Desktop/example.plist"
employeeName = "Michael"
// Storing the Application object
se = Application('System Events')
// Create PropertyListItems
propertyListItem1 = se.PropertyListItem({
kind: "string",
name: "employee_name",
value: employeeName
});
// Create the PropertyListFile
plistFile = se.PropertyListFile({
name: plist_path
}).make()
// Push the PropertyListItem to the PropertyListFile
plistFile.propertyListItems.push(propertyListItem1)
Наслаждайся, Майкл / Гамбург