Я создаю приложение 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