[Xcode, Разработка под MacOS] Наш Automator, или генерация снимков экрана для AppStore
Автор
Сообщение
news_bot ®
Стаж: 6 лет 9 месяцев
Сообщений: 27286
В один замечательный вечер мы с коллегой публиковали небольшое приложение в AppStore. Публикация приложения довольно-таки долгий процесс и состоит из множества этапов. Один из этапов - подготовка картинок для магазина приложений. Задача, на первый взгляд простая - запустить приложение в симуляторе и сделать снимок экрана приложения, а нужны экраны на шести языка, в нескольких размерах, с демонстрацией пяти разных состояния приложения. За часик можно было управиться просто делая снимки руками, при этом попивая кофе и обсуждая общие темы. Но мы же программисты и руками делать не наш метод. Надо автоматизировать процесс. Хоть мы и никогда такого не делали у нас получилось. Мы узнали как легко программно управлять приложениями MacOS. И написали AppleScript который управляет приложениями XCode и Simulator. ПостановкаНужно сделать снимки экранов для публикации. Приложение на 6 языках, для iPhone и iPad. В магазине приложений пять слотов для снимков экрана - нам необходимо показать в этих слотах пять состояний приложения. Для разных устройств снимки экрана разные, в зависимости от разрешения. Для iPhone нужно два скриншота только вертикальных, а для iPad один, но в двух ориентациях.ИнструментКраткий поиск навел нас на Automator.
Запускаем.
Нас интересует WorkFlow - создаем. Программа выдает окошко из двух частей. Слева Actions - различные действия над приложениями и системой. Справа сам WorkFlow. Перетаскиваем Действия в WorkFlow и можем запускать последовательность действий. Это графический построитель программы WorkFlow.
Программа дает много возможностей, но после того, как мы наигрались с возможностями графического построителя - мы поняли, что нам проще было бы просто писать код. Привычней. И Automator дает нам такую возможность. Очистим все из панели WorkFlow, и добавим одно действие - Run AppleScript.
Обратите внимание, в библиотеке действий, помимо Run AppleScript, есть еще очень интересные действия, такие как Run JavaScript или Run Shell Script. В одном WorkFlow может быть много действий, и можно запускать другие Workflow (Run WorkFlow).Действие Run AppleScript можно запустить и само по себе, не включая выполнение всего потока. У такого действия есть своя кнопка запуска. Для нашей задачи мы и ограничимся одним таким действием. Всю магию будет делать AppleScript. Жмем на молоточек - и пишем код.
РеализацияВооружившись документацией, но и не пренебрегая методом научного тыка, начнем.Открываем наше проект приложения в XCode. Так как приложение многоязычное в проекте у нас несколько схем - по количеству языков. Также в Xcode есть возможность запустить приложение в симуляторе, причем в интерфейсе Xcode есть список устройств, эмулировать которые будет симулятор.Создаем переменные и пишем руками какие устройства нам нужны в массив sizes.
set ipad to "iPad Pro (12.9-inch) (3rd generation)"
set sizes to {"iPhone 8 Plus", "iPhone 11 Pro Max", ipad}А
А список схем в массив schemes
set schemes to {"TinyApp", "TinyApp-cn", "TinyApp-jp", "TinyApp-es", "TinyApp-de", "TinyApp-ru", "TinyApp-fr"}
И запускаем перебор по размерам и по языкам:
repeat with size in sizes
repeat with lang in schemes
-- .....
repeat with size in sizes
repeat with lang in schemes
Внутри цикла у нас есть доступ к переменой size, и lang.Говорим приложению XCode выбрать схему и размер, согласно переменным цикла, и просим запустить Simulator:
tell application "Xcode" to activate
tell application "System Events"
tell process "Xcode"
tell menu bar 1
tell menu "Product"
tell menu item "Scheme"
tell menu "Scheme"
click menu item lang
end tell
end tell
tell menu item "Destination"
tell menu "Destination"
click menu item size
end tell
end tell
click menu item "Run"
end tell
end tell
end tell
end tell
И выводим диалог с кнопкой продолжить:
tell application "System Events"
display dialog "Continue"
end tell
Нам необходимо подождать пока запустится симулятор, увидеть запущено приложение, и при первом запуске перевести его в нужное состояние руками (мышкой). и нажать в диалоге Continue. Так как наше приложение помнит состояние, то при последующих запусках состояние не меняется и мы просто жмем кнопку Continue.Ну а дальше программа просит Симулятор сделать снимок экрана, который на десктоп.
tell application "Automator" to activate
tell application "System Events"
tell process "Simulator"
tell menu bar 1
tell menu "File"
click menu item "Save Screen"
end tell
end tell
end tell
end tell
Далее просим валовый менеджер переименовать файл как нам удобно:
tell application "Finder"
set the source_folder to (path to desktop folder) as alias
sort (get files of source_folder) by creation date
set theFile to (item 1 of reverse of result) as alias
set newName to lang & "-" & size & " .png"
set name of theFile to newName
end tell
Если это снимок экрана для iPad то мы меняем ориентацию экрана и делаем еще снимок:
if size as string is equal to ipad then
tell application "Automator" to activate
tell application "System Events"
tell process "Simulator"
tell menu bar 1
tell menu "Hardware"
tell menu item "Orientation"
tell menu "Orientation"
click menu item "Landscape Right"
end tell
end tell
end tell
delay 2
tell menu "File"
click menu item "New Screen Shot"
end tell
tell application "Finder"
set the source_folder to (path to desktop folder) as alias
sort (get files of source_folder) by creation date
set theFile to (item 1 of reverse of result) as alias
set newName to lang & "-" & size & "-landscape" & " .png"
set name of theFile to newName
end tell
tell menu "Hardware"
tell menu item "Orientation"
tell menu "Orientation"
click menu item "Portrait"
end tell
end tell
end tell
end tell
end tell
end tell
end if
Таким образом к концу выполнения программы у нас на десктопе создаются файлы снимков экрана для всхоже языков и для всех нужных устройств. В одном состоянии, которое мы выбрали при первом диалоге. Копируем руками файлы, можно начать делать второе состояние. Напомню - состояния это пять разных картинок в AppStore. Мы конечно могли еще автоматизировать и копирование файлов, но мы на этом остановились. ИтогВместо того, чтобы руками сделать все 120 картинок руками примерно за час, мы научились пользоваться Automator, потратив на освоение программы и языка AppleScript часа три, и наш скрипт позволил генерировать 120 картинок за минуту с минимумом операций. Несмотря на большие затраты времени, мы были довольны. Надеюсь наш опыт может оказаться полезным и для других людей, и для других задач.А вот и Код полностью:
on run {input, parameters}
set ipad to "iPad Pro (12.9-inch) (3rd generation)"
set sizes to {"iPhone 8 Plus", "iPhone 11 Pro Max", ipad}
set schemes to {"TinyApp", "TinyApp-cn", "TinyApp-jp", "TinyApp-es", "TinyApp-de", "TinyApp-ru", "TinyApp-fr"}
repeat with size in sizes
repeat with lang in schemes
tell application "Xcode" to activate
tell application "System Events"
tell process "Xcode"
tell menu bar 1
tell menu "Product"
tell menu item "Scheme"
tell menu "Scheme"
click menu item lang
end tell
end tell
tell menu item "Destination"
tell menu "Destination"
click menu item size
end tell
end tell
click menu item "Run"
end tell
end tell
end tell
end tell
tell application "System Events"
display dialog "Continue"
end tell
tell application "Automator" to activate
tell application "System Events"
tell process "Simulator"
tell menu bar 1
tell menu "File"
click menu item "Save Screen"
end tell
end tell
end tell
end tell
tell application "Finder"
set the source_folder to (path to desktop folder) as alias
sort (get files of source_folder) by creation date
set theFile to (item 1 of reverse of result) as alias
set newName to lang & "-" & size & " .png"
set name of theFile to newName
end tell
--iPad
if size as string is equal to ipad then
tell application "Automator" to activate
tell application "System Events"
tell process "Simulator"
tell menu bar 1
tell menu "Hardware"
tell menu item "Orientation"
tell menu "Orientation"
click menu item "Landscape Right"
end tell
end tell
end tell
delay 2
tell menu "File"
click menu item "New Screen Shot"
end tell
tell application "Finder"
set the source_folder to (path to desktop folder) as alias
sort (get files of source_folder) by creation date
set theFile to (item 1 of reverse of result) as alias
set newName to lang & "-" & size & "-landscape" & " .png"
set name of theFile to newName
end tell
tell menu "Hardware"
tell menu item "Orientation"
tell menu "Orientation"
click menu item "Portrait"
end tell
end tell
end tell
end tell
end tell
end tell
end if
end repeat
end repeat
return input
end run
===========
Источник:
habr.com
===========
Похожие новости:
- [Настройка Linux, Разработка под iOS, GitHub, Разработка под MacOS, Разработка под Windows] Разработчики из РФ выпустили второй неофициальный клиент Clubhouse
- [Open source, Системное программирование, Реверс-инжиниринг] Linux для macOS M1: что сделала команда Asahi Linux за январь-февраль 2021 (перевод)
- [Разработка под iOS, Разработка мобильных приложений, Swift] Память в Swift от 0 до 1
- [Python, Разработка под MacOS, Разработка под Linux, Разработка под Windows] Трепещущий Kivy. Обзор возможностей фреймворка Kivy и библиотеки KivyMD
- [Программирование, Разработка под MacOS, Софт, IT-компании] Вышла стабильная сборка Visual Studio Code 1.54 с нативной поддержкой Apple Silicon М1 с ARM-архитектурой
- [GitHub, Разработка под MacOS, Компьютерное железо, Ноутбуки] Программист добавил в утилиту ethminer поддержку Mac c M1, новый MacBook Air майнит Ethereum по $0.14 в сутки
- [Информационная безопасность, Антивирусная защита, Разработка под MacOS] На 30 тысячах компьютеров с macOS нашли странный зловред, который ждёт команду
- [Исследования и прогнозы в IT, Софт] Chrome OS вышла на второе место по популярности среди десктопных ОС
- [Программирование, .NET, Разработка под MacOS, Разработка под Windows] От WPF к Авалонии
- [Открытые данные, GitHub, Реверс-инжиниринг, Игры и игровые приставки] Разработчики закончили реверс-инжиниринг GTA III и Vice City и выпустили порты для разных платформ
Теги для поиска: #_xcode, #_razrabotka_pod_macos (Разработка под MacOS), #_automator, #_applescript, #_macos, #_xcode, #_razrabotka_pod_macos (
Разработка под MacOS
)
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Текущее время: 22-Ноя 23:38
Часовой пояс: UTC + 5
Автор | Сообщение |
---|---|
news_bot ®
Стаж: 6 лет 9 месяцев |
|
В один замечательный вечер мы с коллегой публиковали небольшое приложение в AppStore. Публикация приложения довольно-таки долгий процесс и состоит из множества этапов. Один из этапов - подготовка картинок для магазина приложений. Задача, на первый взгляд простая - запустить приложение в симуляторе и сделать снимок экрана приложения, а нужны экраны на шести языка, в нескольких размерах, с демонстрацией пяти разных состояния приложения. За часик можно было управиться просто делая снимки руками, при этом попивая кофе и обсуждая общие темы. Но мы же программисты и руками делать не наш метод. Надо автоматизировать процесс. Хоть мы и никогда такого не делали у нас получилось. Мы узнали как легко программно управлять приложениями MacOS. И написали AppleScript который управляет приложениями XCode и Simulator. ПостановкаНужно сделать снимки экранов для публикации. Приложение на 6 языках, для iPhone и iPad. В магазине приложений пять слотов для снимков экрана - нам необходимо показать в этих слотах пять состояний приложения. Для разных устройств снимки экрана разные, в зависимости от разрешения. Для iPhone нужно два скриншота только вертикальных, а для iPad один, но в двух ориентациях.ИнструментКраткий поиск навел нас на Automator. Запускаем. Нас интересует WorkFlow - создаем. Программа выдает окошко из двух частей. Слева Actions - различные действия над приложениями и системой. Справа сам WorkFlow. Перетаскиваем Действия в WorkFlow и можем запускать последовательность действий. Это графический построитель программы WorkFlow. Программа дает много возможностей, но после того, как мы наигрались с возможностями графического построителя - мы поняли, что нам проще было бы просто писать код. Привычней. И Automator дает нам такую возможность. Очистим все из панели WorkFlow, и добавим одно действие - Run AppleScript. Обратите внимание, в библиотеке действий, помимо Run AppleScript, есть еще очень интересные действия, такие как Run JavaScript или Run Shell Script. В одном WorkFlow может быть много действий, и можно запускать другие Workflow (Run WorkFlow).Действие Run AppleScript можно запустить и само по себе, не включая выполнение всего потока. У такого действия есть своя кнопка запуска. Для нашей задачи мы и ограничимся одним таким действием. Всю магию будет делать AppleScript. Жмем на молоточек - и пишем код. РеализацияВооружившись документацией, но и не пренебрегая методом научного тыка, начнем.Открываем наше проект приложения в XCode. Так как приложение многоязычное в проекте у нас несколько схем - по количеству языков. Также в Xcode есть возможность запустить приложение в симуляторе, причем в интерфейсе Xcode есть список устройств, эмулировать которые будет симулятор.Создаем переменные и пишем руками какие устройства нам нужны в массив sizes. set ipad to "iPad Pro (12.9-inch) (3rd generation)"
set sizes to {"iPhone 8 Plus", "iPhone 11 Pro Max", ipad}А set schemes to {"TinyApp", "TinyApp-cn", "TinyApp-jp", "TinyApp-es", "TinyApp-de", "TinyApp-ru", "TinyApp-fr"}
repeat with size in sizes
repeat with lang in schemes -- ..... repeat with size in sizes repeat with lang in schemes tell application "Xcode" to activate
tell application "System Events" tell process "Xcode" tell menu bar 1 tell menu "Product" tell menu item "Scheme" tell menu "Scheme" click menu item lang end tell end tell tell menu item "Destination" tell menu "Destination" click menu item size end tell end tell click menu item "Run" end tell end tell end tell end tell tell application "System Events"
display dialog "Continue" end tell tell application "Automator" to activate
tell application "System Events" tell process "Simulator" tell menu bar 1 tell menu "File" click menu item "Save Screen" end tell end tell end tell end tell tell application "Finder"
set the source_folder to (path to desktop folder) as alias sort (get files of source_folder) by creation date set theFile to (item 1 of reverse of result) as alias set newName to lang & "-" & size & " .png" set name of theFile to newName end tell if size as string is equal to ipad then
tell application "Automator" to activate tell application "System Events" tell process "Simulator" tell menu bar 1 tell menu "Hardware" tell menu item "Orientation" tell menu "Orientation" click menu item "Landscape Right" end tell end tell end tell delay 2 tell menu "File" click menu item "New Screen Shot" end tell tell application "Finder" set the source_folder to (path to desktop folder) as alias sort (get files of source_folder) by creation date set theFile to (item 1 of reverse of result) as alias set newName to lang & "-" & size & "-landscape" & " .png" set name of theFile to newName end tell tell menu "Hardware" tell menu item "Orientation" tell menu "Orientation" click menu item "Portrait" end tell end tell end tell end tell end tell end tell end if on run {input, parameters}
set ipad to "iPad Pro (12.9-inch) (3rd generation)" set sizes to {"iPhone 8 Plus", "iPhone 11 Pro Max", ipad} set schemes to {"TinyApp", "TinyApp-cn", "TinyApp-jp", "TinyApp-es", "TinyApp-de", "TinyApp-ru", "TinyApp-fr"} repeat with size in sizes repeat with lang in schemes tell application "Xcode" to activate tell application "System Events" tell process "Xcode" tell menu bar 1 tell menu "Product" tell menu item "Scheme" tell menu "Scheme" click menu item lang end tell end tell tell menu item "Destination" tell menu "Destination" click menu item size end tell end tell click menu item "Run" end tell end tell end tell end tell tell application "System Events" display dialog "Continue" end tell tell application "Automator" to activate tell application "System Events" tell process "Simulator" tell menu bar 1 tell menu "File" click menu item "Save Screen" end tell end tell end tell end tell tell application "Finder" set the source_folder to (path to desktop folder) as alias sort (get files of source_folder) by creation date set theFile to (item 1 of reverse of result) as alias set newName to lang & "-" & size & " .png" set name of theFile to newName end tell --iPad if size as string is equal to ipad then tell application "Automator" to activate tell application "System Events" tell process "Simulator" tell menu bar 1 tell menu "Hardware" tell menu item "Orientation" tell menu "Orientation" click menu item "Landscape Right" end tell end tell end tell delay 2 tell menu "File" click menu item "New Screen Shot" end tell tell application "Finder" set the source_folder to (path to desktop folder) as alias sort (get files of source_folder) by creation date set theFile to (item 1 of reverse of result) as alias set newName to lang & "-" & size & "-landscape" & " .png" set name of theFile to newName end tell tell menu "Hardware" tell menu item "Orientation" tell menu "Orientation" click menu item "Portrait" end tell end tell end tell end tell end tell end tell end if end repeat end repeat return input end run =========== Источник: habr.com =========== Похожие новости:
Разработка под MacOS ) |
|
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Текущее время: 22-Ноя 23:38
Часовой пояс: UTC + 5