From bb1a15ed0d2ec05b6435e30de7566e08a15fa7d1 Mon Sep 17 00:00:00 2001 From: Kaede Akino Date: Tue, 6 Oct 2026 23:32:31 +0800 Subject: [PATCH] chore(screenshots): use iPhone 18 Pro Max and iOS 27.1 --- Scripts/ASSET_WORKFLOW.md | 12 ++++++------ Scripts/Tests/test_screenshots.rb | 8 ++++---- fastlane/lib/screenshots.rb | 4 ++-- 3 files changed, 12 insertions(+), 12 deletions(-) diff --git a/Scripts/ASSET_WORKFLOW.md b/Scripts/ASSET_WORKFLOW.md index ad813f73..1a79519b 100644 --- a/Scripts/ASSET_WORKFLOW.md +++ b/Scripts/ASSET_WORKFLOW.md @@ -71,7 +71,7 @@ matrix without building or opening windows: ```sh bundle exec fastlane mac screenshots scenes:agent locales:zh-Hant bundle exec fastlane ios screenshots scenes:ssh,sftp devices:ipad locales:zh-Hans,zh-Hant -bundle exec fastlane ios screenshots devices:ipad runtime:com.apple.CoreSimulator.SimRuntime.iOS-27-0 +bundle exec fastlane ios screenshots devices:ipad runtime:com.apple.CoreSimulator.SimRuntime.iOS-27-1 bundle exec fastlane ios screenshots plan:true ``` @@ -95,19 +95,19 @@ the downstream workflow described below. produces Command Generator, and `agent` produces Assistant. Metrics detail is a development demo only; do not retain its captures as marketing assets. -The mobile lane requires iOS/iPadOS 27 and defaults to the 27.0 runtime. +The mobile lane requires iOS/iPadOS 27 and defaults to the 27.1 runtime. It checks both the simulator model identifier and the raw pixel dimensions: | Selector | Capture device | Native capture size | | --- | --- | --- | -| `iphone` | iPhone 17 Pro Max (6.9-inch), portrait | 1320×2868 | +| `iphone` | iPhone 18 Pro Max (6.9-inch), portrait | 1320×2868 | | `ipad` | iPad Pro 13-inch (M5), landscape | 2752×2064 | Create the exact simulators once if they are missing: ```sh -xcrun simctl create "iPhone 17 Pro Max" com.apple.CoreSimulator.SimDeviceType.iPhone-17-Pro-Max com.apple.CoreSimulator.SimRuntime.iOS-27-0 -xcrun simctl create "iPad Pro 13-inch (M5)" com.apple.CoreSimulator.SimDeviceType.iPad-Pro-13-inch-M5-12GB com.apple.CoreSimulator.SimRuntime.iOS-27-0 +xcrun simctl create "iPhone 18 Pro Max" com.apple.CoreSimulator.SimDeviceType.iPhone-18-Pro-Max com.apple.CoreSimulator.SimRuntime.iOS-27-1 +xcrun simctl create "iPad Pro 13-inch (M5)" com.apple.CoreSimulator.SimDeviceType.iPad-Pro-13-inch-M5-12GB com.apple.CoreSimulator.SimRuntime.iOS-27-1 ``` The lane does not resize iPhone captures or substitute another device. Existing @@ -159,7 +159,7 @@ iPhone Assistant/SSH/Vault, iPad Metrics/SFTP/Vault, and Mac Workspace, in all t locales. Use `scenes:` explicitly when another composition is needed. The lane stages source copies and publishes `//.png` only after every selected output succeeds. Old Pro captures -must be recaptured on iPhone 17 Pro Max before framing; they are rejected by size. +must be recaptured on iPhone 18 Pro Max before framing; they are rejected by size. - iPhone uses frameit's iPhone 17 Pro Max Silver frame at native screenshot size. - iPad uses Apple's official iPad Pro (M5) 13-inch Space Black PNG as a custom diff --git a/Scripts/Tests/test_screenshots.rb b/Scripts/Tests/test_screenshots.rb index 31cec9a2..2ee3e9af 100644 --- a/Scripts/Tests/test_screenshots.rb +++ b/Scripts/Tests/test_screenshots.rb @@ -39,7 +39,7 @@ class ScreenshotsTests < Minitest::Test capture = runner(:ios, { devices: "ipad", locales: "zh-Hant", scenes: "ssh,sftp" }, { "TERMIND_SCREENSHOT_DEVICES" => "iphone", "TERMIND_SCREENSHOT_LOCALES" => "en" }) capture.define_singleton_method(:command) do |*args| - JSON.generate("devices" => { "com.apple.CoreSimulator.SimRuntime.iOS-27-0" => [ + JSON.generate("devices" => { "com.apple.CoreSimulator.SimRuntime.iOS-27-1" => [ { "name" => "iPad Pro 13-inch (M5)", "udid" => "ipad-id", "deviceTypeIdentifier" => "com.apple.CoreSimulator.SimDeviceType.iPad-Pro-13-inch-M5-12GB" } ] }) @@ -52,9 +52,9 @@ class ScreenshotsTests < Minitest::Test def test_a_renamed_pro_cannot_be_used_as_the_pro_max_capture_device capture = runner(:ios, devices: "iphone") capture.define_singleton_method(:command) do |*args| - JSON.generate("devices" => { "com.apple.CoreSimulator.SimRuntime.iOS-27-0" => [ - { "name" => "iPhone 17 Pro Max", "udid" => "wrong-model", - "deviceTypeIdentifier" => "com.apple.CoreSimulator.SimDeviceType.iPhone-17-Pro" } + JSON.generate("devices" => { "com.apple.CoreSimulator.SimRuntime.iOS-27-1" => [ + { "name" => "iPhone 18 Pro Max", "udid" => "wrong-model", + "deviceTypeIdentifier" => "com.apple.CoreSimulator.SimDeviceType.iPhone-18-Pro" } ] }) end assert_raises(RuntimeError) { capture.find_devices } diff --git a/fastlane/lib/screenshots.rb b/fastlane/lib/screenshots.rb index 7013104d..01bbc44f 100644 --- a/fastlane/lib/screenshots.rb +++ b/fastlane/lib/screenshots.rb @@ -27,7 +27,7 @@ class Screenshots }.freeze MOBILE_SCENES = %w[vault sftp ssh metrics assistant].freeze DEVICES = { - "iphone" => { name: "iPhone 17 Pro Max", type: "com.apple.CoreSimulator.SimDeviceType.iPhone-17-Pro-Max", + "iphone" => { name: "iPhone 18 Pro Max", type: "com.apple.CoreSimulator.SimDeviceType.iPhone-18-Pro-Max", dimensions: [1320, 2868] }, "ipad" => { name: "iPad Pro 13-inch (M5)", type: "com.apple.CoreSimulator.SimDeviceType.iPad-Pro-13-inch-M5-12GB", dimensions: [2752, 2064] } @@ -47,7 +47,7 @@ class Screenshots @devices = platform == :mac ? ["mac"] : selection( options[:devices] || environment["TERMIND_SCREENSHOT_DEVICES"], DEVICES.keys, DEVICES.keys, "devices" ) - @runtime = options[:runtime] || environment["TERMIND_SCREENSHOT_RUNTIME"] || "com.apple.CoreSimulator.SimRuntime.iOS-27-0" + @runtime = options[:runtime] || environment["TERMIND_SCREENSHOT_RUNTIME"] || "com.apple.CoreSimulator.SimRuntime.iOS-27-1" if platform == :ios && !@runtime.match?(/\Acom\.apple\.CoreSimulator\.SimRuntime\.iOS-27-\d+(?:-\d+)?\z/) raise ArgumentError, "Screenshots require an iOS/iPadOS 27 runtime: #{@runtime}" end