hellbender-wallet/scripts/patch-frameit.rb
Nick Klockenga 209750c4e5
Rebrand Wallet to Birch Wallet (#28)
* step one

* progress

* minor theme enhancements

* update screenshot and icon links in README.md

* update site link

* swiftformat fixes
2026-04-30 21:00:59 -04:00

100 lines
4.6 KiB
Ruby
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/usr/bin/env ruby
# scripts/patch-frameit.rb
#
# Patches the installed fastlane gem's frameit library to support iPhone 17 Pro
# and iPhone 17 Pro Max framing, inspired by fastlane PR #29921.
#
# What this patch does:
# device_types.rb — adds IPHONE_17_PRO and IPHONE_17_PRO_MAX constants using
# the existing Device.new format; the required Color::SILVER
# constant already exists in frameit 2.232.2.
# editor.rb — extends the rounded-corner mask condition from iPhone 14
# only to iPhone 1417 (regex iphone-?1[4-7]).
#
# Frame PNGs (Apple iPhone 17 Pro Silver.png, etc.) must already be present at
# ~/.fastlane/frameit/latest/. Run `bundle exec fastlane frameit download_frames`
# on a fresh machine before running this script.
#
# Idempotent — safe to run multiple times.
# Version-guarded — aborts clearly if fastlane is upgraded.
#
# Usage:
# bundle exec ruby scripts/patch-frameit.rb
SENTINEL = "# PATCH: birch iPhone 17 frameit support"
EXPECTED_FASTLANE_VERSION = "2.232.2"
# ── Locate gem files ──────────────────────────────────────────────────────────
begin
gem_spec = Gem::Specification.find_by_name('fastlane')
rescue Gem::MissingSpecError
abort "ERROR: fastlane gem not found. Run `bundle install` first."
end
installed = gem_spec.version.to_s
unless installed == EXPECTED_FASTLANE_VERSION
abort "ERROR: Expected fastlane #{EXPECTED_FASTLANE_VERSION}, found #{installed}.\n" \
"Review the patch for the new version and update EXPECTED_FASTLANE_VERSION."
end
gem_dir = gem_spec.gem_dir
device_types_path = File.join(gem_dir, "frameit/lib/frameit/device_types.rb")
editor_path = File.join(gem_dir, "frameit/lib/frameit/editor.rb")
[device_types_path, editor_path].each do |path|
abort "ERROR: #{path} not found. Is this a full fastlane install?" unless File.exist?(path)
end
# ── Patch device_types.rb ────────────────────────────────────────────────────
# Adds two Device constants immediately before the iPad section.
# Resolution: iPhone 17 Pro → 1206×2622 (same as iPhone 16 Pro)
# iPhone 17 Pro Max → 1320×2868 (native simulator screenshot size)
# Default color: Silver — matches "Apple iPhone 17 Pro Silver.png" frame asset.
# Color::SILVER is already defined in frameit 2.232.2 (no new Color needed).
#
dt_content = File.read(device_types_path)
if dt_content.include?(SENTINEL)
puts "device_types.rb: already patched — skipping."
else
anchor = " IPAD_10_2 ||="
unless dt_content.include?(anchor)
abort "ERROR: Could not find '#{anchor}' in device_types.rb. " \
"The gem structure may have changed — review the patch manually."
end
new_devices = \
" #{SENTINEL}\n" \
" IPHONE_17_PRO ||= Device.new(\"iphone-17-pro\", \"Apple iPhone 17 Pro\", 13, [[1206, 2622], [2622, 1206]], 460, Color::SILVER, Platform::IOS)\n" \
" IPHONE_17_PRO_MAX ||= Device.new(\"iphone-17-pro-max\", \"Apple iPhone 17 Pro Max\", 13, [[1320, 2868], [2868, 1320]], 460, Color::SILVER, Platform::IOS)\n" \
"\n"
File.write(device_types_path, dt_content.sub(anchor, new_devices + anchor))
puts "device_types.rb: patched — added IPHONE_17_PRO and IPHONE_17_PRO_MAX."
end
# ── Patch editor.rb ──────────────────────────────────────────────────────────
# Extends the rounded-corner mask from iPhone 14 only to iPhone 1417.
# The regex iphone-?1[4-7] matches iphone-14, iphone14, iphone-17-pro, etc.
#
ed_content = File.read(editor_path)
if ed_content.include?(SENTINEL)
puts "editor.rb: already patched — skipping."
else
old_condition = 'if screenshot.device.id.to_s.include?("iphone-14") || screenshot.device.id.to_s.include?("iphone14")'
unless ed_content.include?(old_condition)
abort "ERROR: Could not find the expected rounded-corner condition in editor.rb.\n" \
"The gem may have changed — review the patch manually."
end
new_condition = "#{SENTINEL}\n if screenshot.device.id.to_s.match?(/iphone-?1[4-7]/)"
File.write(editor_path, ed_content.sub(old_condition, new_condition))
puts "editor.rb: patched — extended rounded-corner mask to iphone-14 through iphone-17."
end
puts "\nDone. Re-run to confirm idempotency (both files should print 'already patched')."