Пользовательский симулятор iOS: изменение размера сборки MacOS с помощью AppleScript — проблема с размером экрана

1
6

Я создаю приложение flutter и тестирую размер экрана, запуская сборку MacOS и изменяя размер окна с помощью Shortcuts x AppleScript. Вот процесс:

Это работает... в основном. Однако по какой-то причине размеры экрана не совсем одинаковы. Если у вас есть понимание того, что здесь не так, пожалуйста, напишите мне. Я предполагаю, что это как-то связано с неточными размерами от Apple либо на моем дисплее Mac, либо на самом телефоне, но, может быть, я просто что-то упустил в своих расчетах? Это мой первый опыт использования AppleScript, поэтому если у вас есть другие улучшения этого codeа, я был бы рад их увидеть.

На моем физическом устройстве (Iphone 13 Pro):

На установленном IOS Simulator (Iphone 13 Pro):

На сборке macOS с измененным размером окна (на дисплее 13,3 дюйма 1440x900 пикселей, моделируемом устройстве 2532x1170 пикселей 460ppi):

set diagonalSizeInInches to 13.3
tell application "Finder"
    set screenBounds to bounds of window of desktop
end tell
set displayW to item 3 of screenBounds
set displayH to item 4 of screenBounds
set equation to (displayW as string) & "^2 + " & (displayH as string) & "^2"
set diagonalResolution to do shell script "echo 'sqrt(" & equation & ")' | bc -l"
set displayPPI to diagonalResolution / diagonalSizeInInches
-- define test devices as: model, width (px), height (px), ppi
set iPhoneSizes to {¬
    {"iPhone 13 Pro", 2532, 1170, 460}}

set modelNames to {}
repeat with thisModel in iPhoneSizes
    set end of modelNames to item 1 of thisModel
end repeat

set selectedModel to (choose from list modelNames with prompt "Select an iPhone model:" default items {""})
if selectedModel is false then
    display dialog "No model selected. Exiting script."
    return
end if
set screenW to 0
set screenH to 0
set selectedModelName to item 1 of selectedModel

repeat with thisModel in iPhoneSizes
    if item 1 of thisModel is equal to selectedModelName then
        set screenH to (item 2 of thisModel) * displayPPI / (item 4 of thisModel)
        set screenW to (item 3 of thisModel) * displayPPI / (item 4 of thisModel)
        exit repeat
    end if
end repeat
tell application "System Events"
    tell (first process whose frontmost is true)
        if (count windows) > 0 then
            set win to front window
            set size of win to {screenW, screenH}
            set newPosition to {(displayW - screenW) / 2, 2}
            set position of win to newPosition
        else
            display dialog "No windows found in the frontmost application."
        end if
    end tell
end tell
MediaQuery.of(context).size.width: 390.0
MediaQuery.of(context).size.height: 844.0
MediaQuery.of(context).size.width: 390.0
MediaQuery.of(context).size.height: 844.0
MediaQuery.of(context).size.width: 325.0
MediaQuery.of(context).size.height: 675.0
Андроник
Вопрос задан4 мая 2024 г.

1 Ответ

2

Проблема с размером экрана в AppleScript для изменения размера сборки MacOS

Вы столкнулись с проблемой с размером экрана при использовании AppleScript для изменения размера сборки MacOS? Вот несколько возможных причин и решений:

1. Неверные координаты:

  • Убедитесь, что вы используете правильные координаты для определения размера и положения окна. 
  • Изучите документацию по tell application "System Events" и проверьте, что вы правильно интерпретируете координаты (в пикселях, относительно верхнего левого угла экрана).
  • Используйте команду get the bounds of window 1 of application "Your Application Name" для получения текущего размера и положения окна.

2. Разные разрешения экрана:

  • AppleScript работает с абсолютными координатами, которые могут отличаться на разных экранах с разным разрешением. 
  • Если вы хотите, чтобы размер сборки был одинаковым на разных экранах, вам нужно использовать относительные координаты.
  • Вы можете использовать команды get the bounds of window 1 of application "System Events" и get the bounds of the screen для получения размеров экрана и окна, а затем вычислить относительные координаты.

3. Неправильный способ установки размера:

  • Убедитесь, что вы правильно используете команду set the bounds of window 1 of application "Your Application Name".
  • Команда должна содержать четыре аргумента: lefttopright и bottom
  • Left и top представляют координаты верхнего левого угла окна, а right и bottom - координаты нижнего правого угла.

4. Проблема с разрешением экрана:

  • Убедитесь, что разрешение экрана вашего устройства соответствует тому, что вы используете для тестирования скрипта. 
  • Несовпадение может привести к тому, что окно окажется не того размера, который вы ожидаете.

5. Проблемы с приложением:

  • Возможно, ваша программа не правильно реагирует на изменение размера окна, установленное через AppleScript. 
  • Проверьте, что приложение работает стабильно после изменения размера окна, и отладьте его, если это необходимо.

Пример кода:

tell application "System Events"
    set the bounds of window 1 of application "Your Application Name" to {100, 100, 800, 600} -- (left, top, right, bottom)
end tell

Советы:

  • Используйте tell application "System Events" to log для отладки и вывода информации в журнал.
  • Проверьте, что ваш AppleScript работает с нужной версией macOS.
  • Используйте отладчик AppleScript для пошагового выполнения кода и проверки значений переменных.

Дополнительные ресурсы:

Надеюсь, эта информация поможет вам решить проблему с размером экрана при использовании AppleScript.

 

Филарет
Ответ получен11 сентября 2024 г.

Ваш ответ

Загрузить файл.