2015-05-07 3 views
0

Спасибо, что нашли время, чтобы прочитать мой вопрос.Applescript для проверки App Store

Это довольно просто, но я полный noobie, поэтому у меня проблемы.

Возможно ли иметь аппликацию, которая проверит хранилище приложений Mac для обновлений, а если есть, выведите количество обновлений в другое место?

Хорошим примером этого является (если вы знаете об этом) geeklets, которые проверяют непрочитанную почту, а затем выводит ее на рабочий стол.

EDIT:
Я загрузил geeklet для непрочитанной почты (как указано выше), и используя это как отправную точку, я попытался написать свой собственный скрипт.

set run_bool to 1 

tell application "System Events" 
    set run_bool to count (every process whose name is "App Store") 
end tell 


if run_bool is 1 then 

    tell application "App Store" 

     set update_count to 0 
     set output_string to "" 

     repeat with upd in Apps in Updates 
      if upd's download is not true then 
       set update_count to update_count + 1 
      end if 
     end repeat 

     if update_count is 0 then 
      set output_string to "zero" 

     else if update_count is 1 then 
      set output_string to "one" 

     else 
      set output_string to "two" 
     end if 
    end tell 

else 
    set output_string to "not running" 
end if 

return output_string 

Теперь это не мой окончательный код, а просто чтобы проверить, будет ли он работать и каков будет результат.

На компиляции я получаю сообщение об ошибке говорящее

ошибку «Переменная обновления не определен.» номер -2753 от "Обновления"

, а также

Ошибка синтаксиса
Ожидаемый конец строки, но обнаружил неизвестный маркер

Кроме того, когда я перестал компиляции, это появился ниже последней строки в моем коде

сказать приложение "GeekTool Helper"
активировать
«событие» ascrgsdf

Любая помощь приветствуется.

+0

По какой-либо причине вы не просто щелкаете по меню? Количество обновлений отображается рядом с пунктом меню «Магазин приложений ...», предполагая, что опция «Автоматически проверять наличие обновлений» отмечена на вкладке «App Store» на вкладке «Системные настройки». – foo

+0

@foo Я знаю об этом, и у меня также есть магазин приложений на доке, в котором отображается количество обновлений в маленьком красном круге. Тем не менее, я рационализирую свой рабочий стол настолько минимально, насколько это возможно. Если он автоматически отображается на моем рабочем столе с помощью geeklet, это позволит мне получать уведомления каждый раз, когда будет сделано обновление, и мне не нужно периодически проверять App Store вручную. – magg0t

+0

Ваш скрипт не может работать, потому что App Store.app на самом деле не является AppleScriptable. Он показывает словарь в редакторе сценариев, но это только терминология Cocoa Scripting по умолчанию, которую вы видите, когда флаг 'NSAppleScriptEnabled' установлен в файле' Info.plist' приложения. На самом деле он ничего не полезен, если разработчики не предоставили свои собственные специфические для приложения термины и код Objective-C, чтобы подключить все, что у них нет. (App Store - это не единственное приложение Apple, которое делает это «Поддельная AppleScriptability», что очень раздражает/запутывает/оскорбляет, но большинство разработчиков Apple хотят AS для DIAF в любом случае.) – foo

ответ

0

@foo довольно правдоподобно с его идеей. Этот код требует только одну строку. Во второй строке я использовал display notification, но вы замените его предпочтительным методом для передачи значения.

tell application "System Events" to tell (first application process whose ¬ 
frontmost is true) to set returnValue to title of ((first menu item whose title ¬ 
begins with "App Store") of menu "Apple" of menu bar 1) 
display notification returnValue 

Результат:

"App Store…, 1 update" 

notification

menu bar items доступны везде (например, оконный/режим позици рабочего стола, полноэкранный режим, щавель скрытый/отключено).

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

Есть только одна странная вещь: если бы я использовал begins with "App Store..." вместо begins with "App Store", код был бы грязным.Я не знаю почему - это может иметь отношение к экранированным символам и .... Любой, кто знает, пожалуйста, просветите меня с комментарием.

Что касается вашего кода, я могу сказать от AppleScript словаря что Updates не является собственностью App Store.app. В пользовательском интерфейсе нет других категорий. Чтобы попасть в словарь, откройте редактор сценариев и нажмите Ctrl + Shift + O

Кроме того, если вы хотите использовать return заявление, вам нужно явный обработчик. Другими словами, вам необходимо обернуть код между on run и end run.

+0

Большое вам спасибо за это, я ценю это. кажется, я не понял, о чем говорил @foo, но ваш пост прояснил это. Я не могу проверить это прямо сейчас, но когда я это делаю (и это работает, надеюсь,), я буду поддерживать вас. веселит. – magg0t

+0

На самом деле я просто сказал, чтобы щелкнуть по меню Apple, чтобы просмотреть последнее количество обновлений там, но да, вы могли бы использовать графический интерфейс для извлечения этих данных для использования в другом месте. GUI Scripting - болезненное, хрупкое и простое зло, но это единственный практический вариант при работе с приложениями, не поддерживающими сценарии, такими как App Store. (Если вам действительно интересно, вы можете подать [запрос функции] (https://bugreport.apple.com), чтобы сделать скрипт для App Store, но не задерживайте дыхание, потому что Apple действительно не дает дерьма о AppleScript больше.) – foo

+0

@foo Запрос функции? LOL, я просто надеюсь, что это более удобно. Пользовательский интерфейс требует времени для ответа. У меня есть 2 приложения, которые всегда находятся в разделе «Проверка на незавершенные загрузки ...». Xcode так много раз останавливался, выполняя обновление 2 Gig, что я просто dl «.dmg» с страницы разработчика, когда я добираюсь до него, то есть «1 обновление» прямо сейчас в моем магазине приложений. – fartheraway