fastlane 2.139.0 → 2.144.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/LICENSE +1 -1
- data/README.md +85 -72
- data/cert/lib/cert/options.rb +12 -5
- data/cert/lib/cert/runner.rb +13 -0
- data/deliver/lib/deliver/options.rb +28 -2
- data/deliver/lib/deliver/runner.rb +13 -2
- data/fastlane/lib/fastlane/action.rb +1 -1
- data/fastlane/lib/fastlane/actions/.hockey.rb.swp +0 -0
- data/fastlane/lib/fastlane/actions/.slack.rb.swp +0 -0
- data/fastlane/lib/fastlane/actions/.update_project_provisioning.rb.swp +0 -0
- data/fastlane/lib/fastlane/actions/README.md +2 -0
- data/fastlane/lib/fastlane/actions/app_store_build_number.rb +13 -5
- data/fastlane/lib/fastlane/actions/automatic_code_signing.rb +7 -1
- data/fastlane/lib/fastlane/actions/build_app.rb +157 -6
- data/fastlane/lib/fastlane/actions/build_ios_app.rb +28 -132
- data/fastlane/lib/fastlane/actions/build_mac_app.rb +46 -0
- data/fastlane/lib/fastlane/actions/clean_build_artifacts.rb +3 -0
- data/fastlane/lib/fastlane/actions/cocoapods.rb +2 -2
- data/fastlane/lib/fastlane/actions/crashlytics.rb +14 -2
- data/fastlane/lib/fastlane/actions/create_pull_request.rb +29 -0
- data/fastlane/lib/fastlane/actions/docs/{build_ios_app.md → build_app.md} +1 -1
- data/fastlane/lib/fastlane/actions/docs/frame_screenshots.md +22 -6
- data/fastlane/lib/fastlane/actions/docs/sync_code_signing.md +22 -6
- data/fastlane/lib/fastlane/actions/ensure_git_branch.rb +1 -1
- data/fastlane/lib/fastlane/actions/ensure_xcode_version.rb +35 -7
- data/fastlane/lib/fastlane/actions/frame_screenshots.rb +2 -1
- data/fastlane/lib/fastlane/actions/get_github_release.rb +3 -0
- data/fastlane/lib/fastlane/actions/gradle.rb +43 -2
- data/fastlane/lib/fastlane/actions/gym.rb +3 -7
- data/fastlane/lib/fastlane/actions/import_from_git.rb +4 -0
- data/fastlane/lib/fastlane/actions/latest_testflight_build_number.rb +9 -3
- data/fastlane/lib/fastlane/actions/notarize.rb +183 -0
- data/fastlane/lib/fastlane/actions/pod_lib_lint.rb +7 -1
- data/fastlane/lib/fastlane/actions/run_tests.rb +5 -22
- data/fastlane/lib/fastlane/actions/s3.rb +5 -291
- data/fastlane/lib/fastlane/actions/set_github_release.rb +1 -1
- data/fastlane/lib/fastlane/actions/spm.rb +8 -0
- data/fastlane/lib/fastlane/actions/swiftlint.rb +45 -9
- data/fastlane/lib/fastlane/actions/update_code_signing_settings.rb +190 -0
- data/fastlane/lib/fastlane/actions/update_plist.rb +37 -2
- data/fastlane/lib/fastlane/actions/upload_symbols_to_crashlytics.rb +13 -3
- data/fastlane/lib/fastlane/actions/upload_to_app_store.rb +1 -0
- data/fastlane/lib/fastlane/fast_file.rb +13 -3
- data/fastlane/lib/fastlane/helper/adb_helper.rb +1 -1
- data/fastlane/lib/fastlane/helper/s3_client_helper.rb +56 -0
- data/fastlane/lib/fastlane/plugins/plugin_manager.rb +1 -1
- data/fastlane/lib/fastlane/plugins/template/.rubocop.yml +2 -0
- data/fastlane/lib/fastlane/runner.rb +23 -18
- data/fastlane/lib/fastlane/server/socket_server_action_command_executor.rb +1 -1
- data/fastlane/lib/fastlane/version.rb +1 -1
- data/fastlane/swift/Deliverfile.swift +1 -1
- data/fastlane/swift/DeliverfileProtocol.swift +3 -3
- data/fastlane/swift/Fastlane.swift +422 -45
- data/fastlane/swift/FastlaneSwiftRunner/FastlaneSwiftRunner.xcodeproj/project.xcworkspace/xcuserdata/josh.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
- data/fastlane/swift/Gymfile.swift +1 -1
- data/fastlane/swift/GymfileProtocol.swift +17 -1
- data/fastlane/swift/Matchfile.swift +1 -1
- data/fastlane/swift/MatchfileProtocol.swift +23 -3
- data/fastlane/swift/Precheckfile.swift +1 -1
- data/fastlane/swift/RubyCommand.swift +1 -1
- data/fastlane/swift/Scanfile.swift +1 -1
- data/fastlane/swift/ScanfileProtocol.swift +21 -1
- data/fastlane/swift/Screengrabfile.swift +1 -1
- data/fastlane/swift/Snapshotfile.swift +1 -1
- data/fastlane/swift/SnapshotfileProtocol.swift +9 -1
- data/fastlane_core/lib/fastlane_core/cert_checker.rb +28 -0
- data/fastlane_core/lib/fastlane_core/device_manager.rb +1 -1
- data/fastlane_core/lib/fastlane_core/ipa_file_analyser.rb +1 -0
- data/fastlane_core/lib/fastlane_core/keychain_importer.rb +2 -0
- data/fastlane_core/lib/fastlane_core/project.rb +27 -0
- data/fastlane_core/lib/fastlane_core/provisioning_profile.rb +15 -2
- data/frameit/lib/frameit/commands_generator.rb +25 -0
- data/frameit/lib/frameit/config_parser.rb +31 -9
- data/frameit/lib/frameit/device.rb +90 -0
- data/frameit/lib/frameit/device_types.rb +121 -5
- data/frameit/lib/frameit/editor.rb +28 -40
- data/frameit/lib/frameit/offsets.rb +8 -1
- data/frameit/lib/frameit/options.rb +81 -54
- data/frameit/lib/frameit/runner.rb +17 -7
- data/frameit/lib/frameit/screenshot.rb +35 -47
- data/frameit/lib/frameit/template_finder.rb +15 -12
- data/gym/lib/gym/code_signing_mapping.rb +32 -3
- data/gym/lib/gym/detect_values.rb +34 -2
- data/gym/lib/gym/generators/package_command_generator.rb +8 -0
- data/gym/lib/gym/generators/package_command_generator_xcode7.rb +52 -17
- data/gym/lib/gym/module.rb +8 -0
- data/gym/lib/gym/options.rb +25 -1
- data/gym/lib/gym/runner.rb +70 -21
- data/match/lib/match/change_password.rb +1 -1
- data/match/lib/match/encryption.rb +4 -0
- data/match/lib/match/encryption/openssl.rb +1 -1
- data/match/lib/match/generator.rb +17 -3
- data/match/lib/match/importer.rb +35 -20
- data/match/lib/match/module.rb +5 -2
- data/match/lib/match/nuke.rb +59 -17
- data/match/lib/match/options.rb +38 -15
- data/match/lib/match/runner.rb +24 -8
- data/match/lib/match/setup.rb +1 -1
- data/match/lib/match/spaceship_ensure.rb +19 -9
- data/match/lib/match/storage.rb +4 -0
- data/match/lib/match/storage/git_storage.rb +5 -2
- data/match/lib/match/storage/google_cloud_storage.rb +2 -2
- data/match/lib/match/storage/s3_storage.rb +162 -0
- data/pilot/lib/pilot/.manager.rb.swp +0 -0
- data/pilot/lib/pilot/build_manager.rb +24 -9
- data/scan/lib/scan/detect_values.rb +6 -1
- data/scan/lib/scan/manager.rb +18 -1
- data/scan/lib/scan/options.rb +28 -1
- data/scan/lib/scan/runner.rb +9 -7
- data/scan/lib/scan/slack_poster.rb +1 -1
- data/scan/lib/scan/test_command_generator.rb +12 -5
- data/screengrab/lib/screengrab/runner.rb +31 -18
- data/sigh/lib/sigh/.runner.rb.swp +0 -0
- data/snapshot/lib/snapshot/fixes/simulator_shared_pasteboard.rb +16 -0
- data/snapshot/lib/snapshot/options.rb +12 -1
- data/snapshot/lib/snapshot/simulator_launchers/launcher_configuration.rb +2 -0
- data/snapshot/lib/snapshot/simulator_launchers/simulator_launcher_base.rb +13 -0
- data/spaceship/lib/spaceship/connect_api/.DS_Store +0 -0
- data/spaceship/lib/spaceship/connect_api/models/.bundle_id.rb.swp +0 -0
- data/{gym/lib/gym/.runner.rb.swp → spaceship/lib/spaceship/connect_api/models/.bundle_id_capability.rb.swp} +0 -0
- data/spaceship/lib/spaceship/connect_api/models/app.rb +11 -0
- data/spaceship/lib/spaceship/connect_api/models/beta_feedback.rb +4 -0
- data/spaceship/lib/spaceship/connect_api/models/build.rb +1 -2
- data/spaceship/lib/spaceship/connect_api/models/certificate.rb +2 -0
- data/spaceship/lib/spaceship/connect_api/testflight/testflight.rb +29 -0
- data/spaceship/lib/spaceship/portal/app.rb +11 -2
- data/spaceship/lib/spaceship/tunes/app_version.rb +6 -1
- data/spaceship/lib/spaceship/tunes/iap.rb +11 -11
- data/spaceship/lib/spaceship/tunes/iap_detail.rb +7 -3
- data/spaceship/lib/spaceship/tunes/iap_families.rb +12 -1
- data/spaceship/lib/spaceship/tunes/iap_family_details.rb +26 -17
- data/spaceship/lib/spaceship/tunes/iap_status.rb +5 -1
- data/spaceship/lib/spaceship/tunes/tunes_client.rb +2 -2
- data/supply/lib/supply/client.rb +1 -1
- metadata +63 -18
@@ -13,9 +13,16 @@ module Frameit
|
|
13
13
|
@offsets_cache = JSON.parse(File.read(offsets_json_path))
|
14
14
|
end
|
15
15
|
|
16
|
-
offset_value = @offsets_cache["portrait"][screenshot.device_name]
|
16
|
+
offset_value = @offsets_cache["portrait"][sanitize_device_name(screenshot.device_name)]
|
17
17
|
UI.error("Tried looking for offset information for 'portrait', #{screenshot.device_name} in '#{offsets_json_path}'") unless offset_value
|
18
18
|
return offset_value
|
19
19
|
end
|
20
|
+
|
21
|
+
def self.sanitize_device_name(basename)
|
22
|
+
# this should be the same as frames_generator's sanitize_device_name (except stripping colors):
|
23
|
+
basename = basename.gsub("Apple", "")
|
24
|
+
basename = basename.gsub("-", " ")
|
25
|
+
basename.strip.to_s
|
26
|
+
end
|
20
27
|
end
|
21
28
|
end
|
@@ -1,6 +1,8 @@
|
|
1
1
|
require 'fastlane_core/configuration/config_item'
|
2
2
|
|
3
3
|
require_relative 'module'
|
4
|
+
require_relative 'config_parser'
|
5
|
+
require_relative 'device_types'
|
4
6
|
|
5
7
|
module Frameit
|
6
8
|
class Options
|
@@ -8,74 +10,99 @@ module Frameit
|
|
8
10
|
@options ||= [
|
9
11
|
|
10
12
|
FastlaneCore::ConfigItem.new(key: :white,
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
13
|
+
env_name: "FRAMEIT_WHITE_FRAME",
|
14
|
+
description: "Use white device frames",
|
15
|
+
type: Boolean,
|
16
|
+
optional: true),
|
15
17
|
FastlaneCore::ConfigItem.new(key: :silver,
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
18
|
+
env_name: "FRAMEIT_SILVER_FRAME",
|
19
|
+
description: "Use white device frames. Alias for :white",
|
20
|
+
type: Boolean,
|
21
|
+
optional: true),
|
20
22
|
FastlaneCore::ConfigItem.new(key: :rose_gold,
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
23
|
+
env_name: "FRAMEIT_ROSE_GOLD_FRAME",
|
24
|
+
description: "Use rose gold device frames. Alias for :rose_gold",
|
25
|
+
type: Boolean,
|
26
|
+
optional: true),
|
25
27
|
FastlaneCore::ConfigItem.new(key: :gold,
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
28
|
+
env_name: "FRAMEIT_GOLD_FRAME",
|
29
|
+
description: "Use gold device frames. Alias for :gold",
|
30
|
+
type: Boolean,
|
31
|
+
optional: true),
|
30
32
|
FastlaneCore::ConfigItem.new(key: :force_device_type,
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
UI.user_error!("Invalid device type '#{value}'. Available values: #{available}")
|
38
|
-
end
|
39
|
-
end),
|
33
|
+
env_name: "FRAMEIT_FORCE_DEVICE_TYPE",
|
34
|
+
description: "Forces a given device type, useful for Mac screenshots, as their sizes vary",
|
35
|
+
optional: true,
|
36
|
+
verify_block: proc do |value|
|
37
|
+
UI.user_error!("Invalid device type '#{value}'. Available values: " + Devices.all_device_names_without_apple.join(', ')) unless ConfigParser.supported_device?(value)
|
38
|
+
end),
|
40
39
|
FastlaneCore::ConfigItem.new(key: :use_legacy_iphone5s,
|
41
|
-
|
42
|
-
|
40
|
+
env_name: "FRAMEIT_USE_LEGACY_IPHONE_5_S",
|
41
|
+
description: "Use iPhone 5s instead of iPhone SE frames",
|
42
|
+
default_value: false,
|
43
|
+
type: Boolean),
|
44
|
+
FastlaneCore::ConfigItem.new(key: :use_legacy_iphone6s,
|
45
|
+
env_name: "FRAMEIT_USE_LEGACY_IPHONE_6_S",
|
46
|
+
description: "Use iPhone 6s frames instead of iPhone 7 frames",
|
47
|
+
default_value: false,
|
48
|
+
type: Boolean),
|
49
|
+
FastlaneCore::ConfigItem.new(key: :use_legacy_iphone7,
|
50
|
+
env_name: "FRAMEIT_USE_LEGACY_IPHONE_7",
|
51
|
+
description: "Use iPhone 7 frames instead of iPhone 8 frames",
|
52
|
+
default_value: false,
|
53
|
+
type: Boolean),
|
54
|
+
FastlaneCore::ConfigItem.new(key: :use_legacy_iphonex,
|
55
|
+
env_name: "FRAMEIT_USE_LEGACY_IPHONE_X",
|
56
|
+
description: "Use iPhone X instead of iPhone XS frames",
|
57
|
+
default_value: false,
|
58
|
+
type: Boolean),
|
59
|
+
FastlaneCore::ConfigItem.new(key: :use_legacy_iphonexr,
|
60
|
+
env_name: "FRAMEIT_USE_LEGACY_IPHONE_XR",
|
61
|
+
description: "Use iPhone XR instead of iPhone 11 frames",
|
43
62
|
default_value: false,
|
44
63
|
type: Boolean),
|
45
|
-
FastlaneCore::ConfigItem.new(key: :
|
46
|
-
env_name: "
|
47
|
-
description: "Use iPhone
|
64
|
+
FastlaneCore::ConfigItem.new(key: :use_legacy_iphonexs,
|
65
|
+
env_name: "FRAMEIT_USE_LEGACY_IPHONE_XS",
|
66
|
+
description: "Use iPhone XS instead of iPhone 11 Pro frames",
|
48
67
|
default_value: false,
|
49
68
|
type: Boolean),
|
50
|
-
FastlaneCore::ConfigItem.new(key: :
|
51
|
-
env_name: "
|
52
|
-
description: "Use iPhone
|
69
|
+
FastlaneCore::ConfigItem.new(key: :use_legacy_iphonexsmax,
|
70
|
+
env_name: "FRAMEIT_USE_LEGACY_IPHONE_XS_MAX",
|
71
|
+
description: "Use iPhone XS Max instead of iPhone 11 Pro Max frames",
|
53
72
|
default_value: false,
|
54
73
|
type: Boolean),
|
55
74
|
FastlaneCore::ConfigItem.new(key: :force_orientation_block,
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
75
|
+
type: :string_callback,
|
76
|
+
description: "[Advanced] A block to customize your screenshots' device orientation",
|
77
|
+
display_in_shell: false,
|
78
|
+
optional: true,
|
79
|
+
default_value: proc do |filename|
|
80
|
+
f = filename.downcase
|
81
|
+
if f.end_with?("force_landscapeleft")
|
82
|
+
:landscape_left
|
83
|
+
elsif f.end_with?("force_landscaperight")
|
84
|
+
:landscape_right
|
85
|
+
end
|
86
|
+
end,
|
87
|
+
default_value_dynamic: true),
|
69
88
|
FastlaneCore::ConfigItem.new(key: :debug_mode,
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
89
|
+
env_name: "FRAMEIT_DEBUG_MODE",
|
90
|
+
description: "Output debug information in framed screenshots",
|
91
|
+
default_value: false,
|
92
|
+
type: Boolean),
|
74
93
|
FastlaneCore::ConfigItem.new(key: :resume,
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
94
|
+
env_name: "FRAMEIT_RESUME",
|
95
|
+
description: "Resume frameit instead of reprocessing all screenshots",
|
96
|
+
default_value: false,
|
97
|
+
type: Boolean),
|
98
|
+
FastlaneCore::ConfigItem.new(key: :use_platform,
|
99
|
+
env_name: "FRAMEIT_USE_PLATFORM",
|
100
|
+
description: "Choose a platform, the valid options are IOS, ANDROID and ANY (IOS is default to ensure backward compatibility)",
|
101
|
+
optional: true,
|
102
|
+
default_value: Platform::IOS,
|
103
|
+
verify_block: proc do |value|
|
104
|
+
UI.user_error!("Invalid platform type '#{value}'. Available values are " + Platform.all_platforms.join(', ') + ".") unless ConfigParser.supported_platform?(value)
|
105
|
+
end)
|
79
106
|
]
|
80
107
|
end
|
81
108
|
end
|
@@ -14,9 +14,8 @@ module Frameit
|
|
14
14
|
end
|
15
15
|
end
|
16
16
|
|
17
|
-
def run(path, color = nil)
|
17
|
+
def run(path, color = nil, platform = nil)
|
18
18
|
unless color
|
19
|
-
color = Frameit::Color::BLACK
|
20
19
|
color = Frameit::Color::SILVER if Frameit.config[:white] || Frameit.config[:silver]
|
21
20
|
color = Frameit::Color::GOLD if Frameit.config[:gold]
|
22
21
|
color = Frameit::Color::ROSE_GOLD if Frameit.config[:rose_gold]
|
@@ -29,11 +28,12 @@ module Frameit
|
|
29
28
|
next if skip_path?(full_path)
|
30
29
|
|
31
30
|
begin
|
32
|
-
|
31
|
+
config = create_config(full_path)
|
32
|
+
screenshot = Screenshot.new(full_path, color, config, platform)
|
33
33
|
|
34
34
|
next if skip_up_to_date?(screenshot)
|
35
35
|
|
36
|
-
editor = editor(screenshot)
|
36
|
+
editor = editor(screenshot, config)
|
37
37
|
|
38
38
|
if editor.should_skip?
|
39
39
|
UI.message("Skipping framing of screenshot #{screenshot.path}. No title provided in your Framefile.json or title.strings.")
|
@@ -71,12 +71,22 @@ module Frameit
|
|
71
71
|
false
|
72
72
|
end
|
73
73
|
|
74
|
-
def editor(screenshot)
|
74
|
+
def editor(screenshot, config)
|
75
75
|
if screenshot.mac?
|
76
|
-
return MacEditor.new(screenshot)
|
76
|
+
return MacEditor.new(screenshot, config)
|
77
77
|
else
|
78
|
-
return Editor.new(screenshot, Frameit.config[:debug_mode])
|
78
|
+
return Editor.new(screenshot, config, Frameit.config[:debug_mode])
|
79
79
|
end
|
80
80
|
end
|
81
|
+
|
82
|
+
# Loads the config (colors, background, texts, etc.)
|
83
|
+
# Don't use this method to access the actual text and use `fetch_texts` instead
|
84
|
+
def create_config(screenshot_path)
|
85
|
+
config_path = File.join(File.expand_path("..", screenshot_path), "Framefile.json")
|
86
|
+
config_path = File.join(File.expand_path("../..", screenshot_path), "Framefile.json") unless File.exist?(config_path)
|
87
|
+
file = ConfigParser.new.load(config_path)
|
88
|
+
return {} unless file # no config file at all
|
89
|
+
file.fetch_value(screenshot_path)
|
90
|
+
end
|
81
91
|
end
|
82
92
|
end
|
@@ -1,87 +1,75 @@
|
|
1
|
-
require 'deliver/app_screenshot'
|
2
|
-
|
3
1
|
require_relative 'editor'
|
4
2
|
require_relative 'mac_editor'
|
5
3
|
require_relative 'device_types'
|
6
4
|
require_relative 'module'
|
5
|
+
require_relative 'device'
|
7
6
|
|
8
7
|
module Frameit
|
9
8
|
# Represents one screenshot
|
10
9
|
class Screenshot
|
11
10
|
attr_accessor :path # path to the screenshot
|
12
11
|
attr_accessor :size # size in px array of 2 elements: height and width
|
13
|
-
attr_accessor :
|
12
|
+
attr_accessor :device # device detected according to resolution, priority and settings
|
14
13
|
attr_accessor :color # the color to use for the frame (from Frameit::Color)
|
15
14
|
|
16
15
|
# path: Path to screenshot
|
17
16
|
# color: Color to use for the frame
|
18
|
-
def initialize(path, color)
|
17
|
+
def initialize(path, color, config, platform_command)
|
19
18
|
UI.user_error!("Couldn't find file at path '#{path}'") unless File.exist?(path)
|
20
19
|
@color = color
|
21
20
|
@path = path
|
22
21
|
@size = FastImage.size(path)
|
23
22
|
|
24
|
-
|
23
|
+
# There are three ways how we can get settings to Frameit:
|
24
|
+
# - options.rb
|
25
|
+
# - gets parameters via CLI (e. g. fastlane run frameit use_platform:"android") or fastfile (Fastlane's global
|
26
|
+
# settings for a given project)
|
27
|
+
# - see Parameters in the doc
|
28
|
+
# - contains default values and validates values
|
29
|
+
# - accessed via Frameit.config[:key]
|
30
|
+
# - lowest priority
|
31
|
+
# - commands_generator.rb
|
32
|
+
# - commands entered directly to CLI (e. g. fastlane frameit android)
|
33
|
+
# - they are passed via constructors to other classes
|
34
|
+
# - higher priority than options.rb (user may enter a command to override fastfile's global setting)
|
35
|
+
# - config_parser.rb
|
36
|
+
# - gets key / values from Framefile.json
|
37
|
+
# - see Advanced usage in the doc
|
38
|
+
# - both default and specific values can be entered in the file (filtered by file name)
|
39
|
+
# - accessed via ConfigParser.fetch_value(screenshot.path)[key] (the ConfigParser's instance is passed
|
40
|
+
# to Screenshot's constructor as config, i.e. we call config[key])
|
41
|
+
# - should have the highest priority, because user might set a specific value for a specific screenshot which
|
42
|
+
# should override CLI parameters and fastfile global setting
|
43
|
+
platform = config['use_platform'] || platform_command || Frameit.config[:use_platform]
|
44
|
+
@device = Device.find_device_by_id_or_name(config['force_device_type'] || Frameit.config[:force_device_type]) || Device.detect_device(path, platform)
|
25
45
|
end
|
26
46
|
|
27
47
|
# Device name for a given screen size. Used to use the correct template
|
28
48
|
def device_name
|
29
|
-
|
30
|
-
sizes = Deliver::AppScreenshot::ScreenSize
|
31
|
-
case @screen_size
|
32
|
-
when sizes::IOS_65
|
33
|
-
return 'iPhone XS Max'
|
34
|
-
when sizes::IOS_61
|
35
|
-
return 'iPhone XR'
|
36
|
-
when sizes::IOS_58
|
37
|
-
return Frameit.config[:use_legacy_iphonex] ? 'iPhone X' : 'iPhone XS'
|
38
|
-
when sizes::IOS_55
|
39
|
-
return Frameit.config[:use_legacy_iphone6s] ? 'iPhone 6s Plus' : 'iPhone 7 Plus'
|
40
|
-
when sizes::IOS_47
|
41
|
-
return Frameit.config[:use_legacy_iphone6s] ? 'iPhone 6s' : 'iPhone 7'
|
42
|
-
when sizes::IOS_40
|
43
|
-
return Frameit.config[:use_legacy_iphone5s] ? 'iPhone 5s' : 'iPhone SE'
|
44
|
-
when sizes::IOS_35
|
45
|
-
return 'iPhone 4'
|
46
|
-
when sizes::IOS_IPAD
|
47
|
-
return 'iPad Air 2'
|
48
|
-
when sizes::IOS_IPAD_10_5
|
49
|
-
return 'iPad Pro (10.5-inch)'
|
50
|
-
when sizes::IOS_IPAD_11
|
51
|
-
return 'iPad Pro (11-inch)'
|
52
|
-
when sizes::IOS_IPAD_PRO
|
53
|
-
return 'iPad Pro'
|
54
|
-
when sizes::IOS_IPAD_PRO_12_9
|
55
|
-
return 'iPad Pro (12.9-inch) (3rd generation)'
|
56
|
-
when sizes::MAC
|
57
|
-
return 'MacBook'
|
58
|
-
else
|
59
|
-
UI.error("Unknown device type for size #{@screen_size} for path '#{path}'")
|
60
|
-
end
|
49
|
+
@device.formatted_name
|
61
50
|
# rubocop:enable Require/MissingRequireStatement
|
62
51
|
end
|
63
52
|
|
64
|
-
def
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
return @color
|
53
|
+
def default_color
|
54
|
+
@device.default_color
|
55
|
+
end
|
56
|
+
|
57
|
+
def deliver_screen_id
|
58
|
+
@device.deliver_screen_id
|
71
59
|
end
|
72
60
|
|
73
61
|
# Is the device a 3x device? (e.g. iPhone 6 Plus, iPhone X)
|
74
62
|
def triple_density?
|
75
|
-
|
63
|
+
!device.density_ppi.nil? && device.density_ppi > 400
|
76
64
|
end
|
77
65
|
|
78
66
|
# Super old devices (iPhone 4)
|
79
67
|
def mini?
|
80
|
-
|
68
|
+
!device.density_ppi.nil? && device.density_ppi < 300
|
81
69
|
end
|
82
70
|
|
83
71
|
def mac?
|
84
|
-
|
72
|
+
device_name == 'MacBook'
|
85
73
|
end
|
86
74
|
|
87
75
|
# The name of the orientation of a screenshot. Used to find the correct template
|
@@ -1,5 +1,4 @@
|
|
1
1
|
require 'deliver/app_screenshot'
|
2
|
-
|
3
2
|
require_relative 'module'
|
4
3
|
require_relative 'device_types'
|
5
4
|
require_relative 'frame_downloader'
|
@@ -11,32 +10,36 @@ module Frameit
|
|
11
10
|
def self.get_template(screenshot)
|
12
11
|
return nil if screenshot.mac?
|
13
12
|
|
14
|
-
filename =
|
15
|
-
|
13
|
+
filename = create_file_name(screenshot.device_name, screenshot.color.nil? ? screenshot.default_color : screenshot.color)
|
16
14
|
templates = Dir["#{FrameDownloader.templates_path}/#{filename}.{png,jpg}"] # ~/.frameit folder
|
17
15
|
|
18
16
|
UI.verbose("Looking for #{filename} and found #{templates.count} template(s)")
|
19
17
|
|
18
|
+
return filename if Helper.test?
|
19
|
+
if templates.count == 0 && !screenshot.color.nil? && screenshot.color != screenshot.default_color
|
20
|
+
filename = create_file_name(screenshot.device_name, screenshot.default_color)
|
21
|
+
UI.important("Unfortunately device type '#{screenshot.device_name}' is not available in #{screenshot.color}, falling back to " + (screenshot.default_color.nil? ? "default" : screenshot.default_color) + "...")
|
22
|
+
templates = Dir["#{FrameDownloader.templates_path}/#{filename}.{png,jpg}"] # ~/.frameit folder
|
23
|
+
UI.verbose("Looking for #{filename} and found #{templates.count} template(s)")
|
24
|
+
end
|
25
|
+
|
20
26
|
if templates.count == 0
|
21
|
-
if screenshot.
|
27
|
+
if screenshot.deliver_screen_id == Deliver::AppScreenshot::ScreenSize::IOS_35
|
22
28
|
UI.important("Unfortunately 3.5\" device frames were discontinued. Skipping screen '#{screenshot.path}'")
|
23
29
|
UI.error("Looked for: '#{filename}.png'")
|
24
|
-
elsif screenshot.color == Frameit::Color::ROSE_GOLD || screenshot.color == Frameit::Color::GOLD
|
25
|
-
# Unfortunately not every device type is available in rose gold or gold
|
26
|
-
# This is why we can't have nice things #yatusabes
|
27
|
-
# fallback to a white iPhone, which looks similar
|
28
|
-
UI.important("Unfortunately device type '#{screenshot.device_name}' is not available in #{screenshot.color}, falling back to silver...")
|
29
|
-
screenshot.color = Frameit::Color::SILVER
|
30
|
-
return self.get_template(screenshot)
|
31
30
|
else
|
32
31
|
UI.error("Couldn't find template for screenshot type '#{filename}'")
|
33
32
|
UI.error("Please run `fastlane frameit download_frames` to download the latest frames")
|
34
33
|
end
|
35
|
-
return filename if Helper.test?
|
36
34
|
return nil
|
37
35
|
else
|
38
36
|
return templates.first.tr(" ", "\ ")
|
39
37
|
end
|
40
38
|
end
|
39
|
+
|
40
|
+
def self.create_file_name(device_name, color)
|
41
|
+
return "#{device_name} #{color}" unless color.nil?
|
42
|
+
return device_name
|
43
|
+
end
|
41
44
|
end
|
42
45
|
end
|
@@ -88,6 +88,13 @@ module Gym
|
|
88
88
|
when "tvOS"
|
89
89
|
destination_sdkroot = ["appletvos"]
|
90
90
|
end
|
91
|
+
|
92
|
+
# Catalyst projects will always have an "iphoneos" sdkroot
|
93
|
+
# Need to force a same platform when trying to build as macos
|
94
|
+
if Gym.building_mac_catalyst_for_mac?
|
95
|
+
return true
|
96
|
+
end
|
97
|
+
|
91
98
|
return destination_sdkroot.include?(sdkroot)
|
92
99
|
end
|
93
100
|
|
@@ -134,10 +141,31 @@ module Gym
|
|
134
141
|
next unless same_platform?(sdkroot)
|
135
142
|
next unless specified_configuration == build_configuration.name
|
136
143
|
|
137
|
-
|
144
|
+
# Catalyst apps will have some build settings that will have a configuration
|
145
|
+
# that is specfic for macos so going to do our best to capture those
|
146
|
+
#
|
147
|
+
# There are other platform filters besides "[sdk=macosx*]" that we could use but
|
148
|
+
# this is the default that Xcode will use so this will also be our default
|
149
|
+
sdk_specifier = Gym.building_mac_catalyst_for_mac? ? "[sdk=macosx*]" : ""
|
150
|
+
|
151
|
+
# Look for sdk specific bundle identifier (if set) and fallback to general configuration if none
|
152
|
+
bundle_identifier = build_configuration.resolve_build_setting("PRODUCT_BUNDLE_IDENTIFIER#{sdk_specifier}", target)
|
153
|
+
bundle_identifier ||= build_configuration.resolve_build_setting("PRODUCT_BUNDLE_IDENTIFIER", target)
|
138
154
|
next unless bundle_identifier
|
139
|
-
|
140
|
-
|
155
|
+
|
156
|
+
# Xcode prefixes "maccatalyst." if building a Catalyst app for mac and
|
157
|
+
# if DERIVE_MACCATALYST_PRODUCT_BUNDLE_IDENTIFIER is set to YES
|
158
|
+
if Gym.building_mac_catalyst_for_mac? && build_configuration.resolve_build_setting("DERIVE_MACCATALYST_PRODUCT_BUNDLE_IDENTIFIER", target) == "YES"
|
159
|
+
bundle_identifier = "maccatalyst.#{bundle_identifier}"
|
160
|
+
end
|
161
|
+
|
162
|
+
# Look for sdk specific provisioning profile specifier (if set) and fallback to general configuration if none
|
163
|
+
provisioning_profile_specifier = build_configuration.resolve_build_setting("PROVISIONING_PROFILE_SPECIFIER#{sdk_specifier}", target)
|
164
|
+
provisioning_profile_specifier ||= build_configuration.resolve_build_setting("PROVISIONING_PROFILE_SPECIFIER", target)
|
165
|
+
|
166
|
+
# Look for sdk specific provisioning profile uuid (if set) and fallback to general configuration if none
|
167
|
+
provisioning_profile_uuid = build_configuration.resolve_build_setting("PROVISIONING_PROFILE#{sdk_specifier}", target)
|
168
|
+
provisioning_profile_uuid ||= build_configuration.resolve_build_setting("PROVISIONING_PROFILE", target)
|
141
169
|
|
142
170
|
has_profile_specifier = provisioning_profile_specifier.to_s.length > 0
|
143
171
|
has_profile_uuid = provisioning_profile_uuid.to_s.length > 0
|
@@ -177,5 +205,6 @@ module Gym
|
|
177
205
|
|
178
206
|
return provisioning_profile_mapping
|
179
207
|
end
|
208
|
+
# rubocop:enable Metrics/PerceivedComplexity
|
180
209
|
end
|
181
210
|
end
|