fastlane 2.142.0 → 2.143.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/README.md +84 -84
- 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/docs/frame_screenshots.md +22 -6
- data/fastlane/lib/fastlane/actions/docs/sync_code_signing.md +20 -4
- data/fastlane/lib/fastlane/actions/frame_screenshots.rb +2 -1
- data/fastlane/lib/fastlane/actions/s3.rb +3 -289
- data/fastlane/lib/fastlane/helper/s3_client_helper.rb +56 -0
- data/fastlane/lib/fastlane/version.rb +1 -1
- data/fastlane/swift/Deliverfile.swift +1 -1
- data/fastlane/swift/Fastlane.swift +59 -5
- 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/Matchfile.swift +1 -1
- data/fastlane/swift/MatchfileProtocol.swift +17 -1
- data/fastlane/swift/Precheckfile.swift +1 -1
- data/fastlane/swift/Scanfile.swift +1 -1
- data/fastlane/swift/Screengrabfile.swift +1 -1
- data/fastlane/swift/Snapshotfile.swift +1 -1
- data/fastlane_core/lib/fastlane_core/ipa_file_analyser.rb +1 -0
- 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/match/lib/match/change_password.rb +1 -1
- data/match/lib/match/encryption.rb +4 -0
- data/match/lib/match/importer.rb +2 -2
- data/match/lib/match/module.rb +1 -1
- data/match/lib/match/nuke.rb +5 -1
- data/match/lib/match/options.rb +18 -0
- data/match/lib/match/runner.rb +4 -0
- data/match/lib/match/setup.rb +1 -1
- data/match/lib/match/storage.rb +4 -0
- data/match/lib/match/storage/s3_storage.rb +162 -0
- data/pilot/lib/pilot/.manager.rb.swp +0 -0
- data/scan/lib/scan/test_command_generator.rb +2 -1
- data/screengrab/lib/screengrab/runner.rb +11 -3
- data/spaceship/lib/spaceship/connect_api/.DS_Store +0 -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/portal/.certificate.rb.swp +0 -0
- metadata +42 -19
- data/gym/lib/gym/.code_signing_mapping.rb.swp +0 -0
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
require 'aws-sdk'
|
|
2
|
+
|
|
3
|
+
module Fastlane
|
|
4
|
+
module Helper
|
|
5
|
+
class S3ClientHelper
|
|
6
|
+
attr_reader :client
|
|
7
|
+
|
|
8
|
+
def initialize(access_key: nil, secret_access_key: nil, region: nil)
|
|
9
|
+
creds = Aws::Credentials.new(access_key, secret_access_key)
|
|
10
|
+
Aws.config.update({
|
|
11
|
+
region: region,
|
|
12
|
+
credentials: creds
|
|
13
|
+
})
|
|
14
|
+
|
|
15
|
+
@client = Aws::S3::Client.new
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def list_buckets
|
|
19
|
+
return @client.list_buckets
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def upload_file(bucket_name, file_name, file_data, acl)
|
|
23
|
+
bucket = find_bucket!(bucket_name)
|
|
24
|
+
details = {
|
|
25
|
+
acl: acl,
|
|
26
|
+
key: file_name,
|
|
27
|
+
body: file_data
|
|
28
|
+
}
|
|
29
|
+
obj = bucket.put_object(details)
|
|
30
|
+
|
|
31
|
+
# When you enable versioning on a S3 bucket,
|
|
32
|
+
# writing to an object will create an object version
|
|
33
|
+
# instead of replacing the existing object.
|
|
34
|
+
# http://docs.aws.amazon.com/AWSRubySDK/latest/AWS/S3/ObjectVersion.html
|
|
35
|
+
if obj.kind_of?(Aws::S3::ObjectVersion)
|
|
36
|
+
obj = obj.object
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
# Return public url
|
|
40
|
+
obj.public_url.to_s
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
def delete_file(bucket, file_name)
|
|
44
|
+
bucket = find_bucket!(bucket_name)
|
|
45
|
+
bucket.objects[file_name].delete
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
def find_bucket!(bucket_name)
|
|
49
|
+
bucket = Aws::S3::Bucket.new(bucket_name, client: @client)
|
|
50
|
+
raise "Bucket '#{bucket_name}' not found" unless bucket.exists?
|
|
51
|
+
|
|
52
|
+
return bucket
|
|
53
|
+
end
|
|
54
|
+
end
|
|
55
|
+
end
|
|
56
|
+
end
|
|
@@ -2757,7 +2757,7 @@ func downloadDsyms(username: String,
|
|
|
2757
2757
|
func downloadFromPlayStore(packageName: String,
|
|
2758
2758
|
versionName: String? = nil,
|
|
2759
2759
|
track: String = "production",
|
|
2760
|
-
metadataPath: String
|
|
2760
|
+
metadataPath: String = "./metadata",
|
|
2761
2761
|
key: String? = nil,
|
|
2762
2762
|
issuer: String? = nil,
|
|
2763
2763
|
jsonKey: String? = nil,
|
|
@@ -2986,10 +2986,15 @@ func flock(message: String,
|
|
|
2986
2986
|
- forceDeviceType: Forces a given device type, useful for Mac screenshots, as their sizes vary
|
|
2987
2987
|
- useLegacyIphone5s: Use iPhone 5s instead of iPhone SE frames
|
|
2988
2988
|
- useLegacyIphone6s: Use iPhone 6s frames instead of iPhone 7 frames
|
|
2989
|
+
- useLegacyIphone7: Use iPhone 7 frames instead of iPhone 8 frames
|
|
2989
2990
|
- useLegacyIphonex: Use iPhone X instead of iPhone XS frames
|
|
2991
|
+
- useLegacyIphonexr: Use iPhone XR instead of iPhone 11 frames
|
|
2992
|
+
- useLegacyIphonexs: Use iPhone XS instead of iPhone 11 Pro frames
|
|
2993
|
+
- useLegacyIphonexsmax: Use iPhone XS Max instead of iPhone 11 Pro Max frames
|
|
2990
2994
|
- forceOrientationBlock: [Advanced] A block to customize your screenshots' device orientation
|
|
2991
2995
|
- debugMode: Output debug information in framed screenshots
|
|
2992
2996
|
- resume: Resume frameit instead of reprocessing all screenshots
|
|
2997
|
+
- usePlatform: Choose a platform, the valid options are IOS, ANDROID and ANY (IOS is default to ensure backward compatibility)
|
|
2993
2998
|
- path: The path to the directory containing the screenshots
|
|
2994
2999
|
|
|
2995
3000
|
Uses [frameit](https://docs.fastlane.tools/actions/frameit/) to prepare perfect screenshots for the App Store, your website, QA or emails.
|
|
@@ -3002,10 +3007,15 @@ func frameScreenshots(white: Bool? = nil,
|
|
|
3002
3007
|
forceDeviceType: String? = nil,
|
|
3003
3008
|
useLegacyIphone5s: Bool = false,
|
|
3004
3009
|
useLegacyIphone6s: Bool = false,
|
|
3010
|
+
useLegacyIphone7: Bool = false,
|
|
3005
3011
|
useLegacyIphonex: Bool = false,
|
|
3012
|
+
useLegacyIphonexr: Bool = false,
|
|
3013
|
+
useLegacyIphonexs: Bool = false,
|
|
3014
|
+
useLegacyIphonexsmax: Bool = false,
|
|
3006
3015
|
forceOrientationBlock: String? = nil,
|
|
3007
3016
|
debugMode: Bool = false,
|
|
3008
3017
|
resume: Bool = false,
|
|
3018
|
+
usePlatform: String = "IOS",
|
|
3009
3019
|
path: String = "./") {
|
|
3010
3020
|
let command = RubyCommand(commandID: "", methodName: "frame_screenshots", className: nil, args: [RubyCommand.Argument(name: "white", value: white),
|
|
3011
3021
|
RubyCommand.Argument(name: "silver", value: silver),
|
|
@@ -3014,10 +3024,15 @@ func frameScreenshots(white: Bool? = nil,
|
|
|
3014
3024
|
RubyCommand.Argument(name: "force_device_type", value: forceDeviceType),
|
|
3015
3025
|
RubyCommand.Argument(name: "use_legacy_iphone5s", value: useLegacyIphone5s),
|
|
3016
3026
|
RubyCommand.Argument(name: "use_legacy_iphone6s", value: useLegacyIphone6s),
|
|
3027
|
+
RubyCommand.Argument(name: "use_legacy_iphone7", value: useLegacyIphone7),
|
|
3017
3028
|
RubyCommand.Argument(name: "use_legacy_iphonex", value: useLegacyIphonex),
|
|
3029
|
+
RubyCommand.Argument(name: "use_legacy_iphonexr", value: useLegacyIphonexr),
|
|
3030
|
+
RubyCommand.Argument(name: "use_legacy_iphonexs", value: useLegacyIphonexs),
|
|
3031
|
+
RubyCommand.Argument(name: "use_legacy_iphonexsmax", value: useLegacyIphonexsmax),
|
|
3018
3032
|
RubyCommand.Argument(name: "force_orientation_block", value: forceOrientationBlock),
|
|
3019
3033
|
RubyCommand.Argument(name: "debug_mode", value: debugMode),
|
|
3020
3034
|
RubyCommand.Argument(name: "resume", value: resume),
|
|
3035
|
+
RubyCommand.Argument(name: "use_platform", value: usePlatform),
|
|
3021
3036
|
RubyCommand.Argument(name: "path", value: path)])
|
|
3022
3037
|
_ = runner.executeCommand(command)
|
|
3023
3038
|
}
|
|
@@ -3033,10 +3048,15 @@ func frameScreenshots(white: Bool? = nil,
|
|
|
3033
3048
|
- forceDeviceType: Forces a given device type, useful for Mac screenshots, as their sizes vary
|
|
3034
3049
|
- useLegacyIphone5s: Use iPhone 5s instead of iPhone SE frames
|
|
3035
3050
|
- useLegacyIphone6s: Use iPhone 6s frames instead of iPhone 7 frames
|
|
3051
|
+
- useLegacyIphone7: Use iPhone 7 frames instead of iPhone 8 frames
|
|
3036
3052
|
- useLegacyIphonex: Use iPhone X instead of iPhone XS frames
|
|
3053
|
+
- useLegacyIphonexr: Use iPhone XR instead of iPhone 11 frames
|
|
3054
|
+
- useLegacyIphonexs: Use iPhone XS instead of iPhone 11 Pro frames
|
|
3055
|
+
- useLegacyIphonexsmax: Use iPhone XS Max instead of iPhone 11 Pro Max frames
|
|
3037
3056
|
- forceOrientationBlock: [Advanced] A block to customize your screenshots' device orientation
|
|
3038
3057
|
- debugMode: Output debug information in framed screenshots
|
|
3039
3058
|
- resume: Resume frameit instead of reprocessing all screenshots
|
|
3059
|
+
- usePlatform: Choose a platform, the valid options are IOS, ANDROID and ANY (IOS is default to ensure backward compatibility)
|
|
3040
3060
|
- path: The path to the directory containing the screenshots
|
|
3041
3061
|
|
|
3042
3062
|
Uses [frameit](https://docs.fastlane.tools/actions/frameit/) to prepare perfect screenshots for the App Store, your website, QA or emails.
|
|
@@ -3049,10 +3069,15 @@ func frameit(white: Bool? = nil,
|
|
|
3049
3069
|
forceDeviceType: String? = nil,
|
|
3050
3070
|
useLegacyIphone5s: Bool = false,
|
|
3051
3071
|
useLegacyIphone6s: Bool = false,
|
|
3072
|
+
useLegacyIphone7: Bool = false,
|
|
3052
3073
|
useLegacyIphonex: Bool = false,
|
|
3074
|
+
useLegacyIphonexr: Bool = false,
|
|
3075
|
+
useLegacyIphonexs: Bool = false,
|
|
3076
|
+
useLegacyIphonexsmax: Bool = false,
|
|
3053
3077
|
forceOrientationBlock: String? = nil,
|
|
3054
3078
|
debugMode: Bool = false,
|
|
3055
3079
|
resume: Bool = false,
|
|
3080
|
+
usePlatform: String = "IOS",
|
|
3056
3081
|
path: String = "./") {
|
|
3057
3082
|
let command = RubyCommand(commandID: "", methodName: "frameit", className: nil, args: [RubyCommand.Argument(name: "white", value: white),
|
|
3058
3083
|
RubyCommand.Argument(name: "silver", value: silver),
|
|
@@ -3061,10 +3086,15 @@ func frameit(white: Bool? = nil,
|
|
|
3061
3086
|
RubyCommand.Argument(name: "force_device_type", value: forceDeviceType),
|
|
3062
3087
|
RubyCommand.Argument(name: "use_legacy_iphone5s", value: useLegacyIphone5s),
|
|
3063
3088
|
RubyCommand.Argument(name: "use_legacy_iphone6s", value: useLegacyIphone6s),
|
|
3089
|
+
RubyCommand.Argument(name: "use_legacy_iphone7", value: useLegacyIphone7),
|
|
3064
3090
|
RubyCommand.Argument(name: "use_legacy_iphonex", value: useLegacyIphonex),
|
|
3091
|
+
RubyCommand.Argument(name: "use_legacy_iphonexr", value: useLegacyIphonexr),
|
|
3092
|
+
RubyCommand.Argument(name: "use_legacy_iphonexs", value: useLegacyIphonexs),
|
|
3093
|
+
RubyCommand.Argument(name: "use_legacy_iphonexsmax", value: useLegacyIphonexsmax),
|
|
3065
3094
|
RubyCommand.Argument(name: "force_orientation_block", value: forceOrientationBlock),
|
|
3066
3095
|
RubyCommand.Argument(name: "debug_mode", value: debugMode),
|
|
3067
3096
|
RubyCommand.Argument(name: "resume", value: resume),
|
|
3097
|
+
RubyCommand.Argument(name: "use_platform", value: usePlatform),
|
|
3068
3098
|
RubyCommand.Argument(name: "path", value: path)])
|
|
3069
3099
|
_ = runner.executeCommand(command)
|
|
3070
3100
|
}
|
|
@@ -4444,6 +4474,10 @@ func makeChangelogFromJenkins(fallbackChangelog: String = "",
|
|
|
4444
4474
|
- googleCloudBucketName: Name of the Google Cloud Storage bucket to use
|
|
4445
4475
|
- googleCloudKeysFile: Path to the gc_keys.json file
|
|
4446
4476
|
- googleCloudProjectId: ID of the Google Cloud project to use for authentication
|
|
4477
|
+
- s3Region: Name of the S3 region
|
|
4478
|
+
- s3AccessKey: S3 access key
|
|
4479
|
+
- s3SecretAccessKey: S3 secret secret access key
|
|
4480
|
+
- s3Bucket: Name of the S3 bucket
|
|
4447
4481
|
- keychainName: Keychain the items should be imported to
|
|
4448
4482
|
- keychainPassword: This might be required the first time you access certificates on a new mac. For the login/default keychain this is your account password
|
|
4449
4483
|
- force: Renew the provisioning profiles every time you run match
|
|
@@ -4478,6 +4512,10 @@ func match(type: Any = matchfile.type,
|
|
|
4478
4512
|
googleCloudBucketName: Any? = matchfile.googleCloudBucketName,
|
|
4479
4513
|
googleCloudKeysFile: Any? = matchfile.googleCloudKeysFile,
|
|
4480
4514
|
googleCloudProjectId: Any? = matchfile.googleCloudProjectId,
|
|
4515
|
+
s3Region: Any? = matchfile.s3Region,
|
|
4516
|
+
s3AccessKey: Any? = matchfile.s3AccessKey,
|
|
4517
|
+
s3SecretAccessKey: Any? = matchfile.s3SecretAccessKey,
|
|
4518
|
+
s3Bucket: Any? = matchfile.s3Bucket,
|
|
4481
4519
|
keychainName: Any = matchfile.keychainName,
|
|
4482
4520
|
keychainPassword: Any? = matchfile.keychainPassword,
|
|
4483
4521
|
force: Bool = matchfile.force,
|
|
@@ -4509,6 +4547,10 @@ func match(type: Any = matchfile.type,
|
|
|
4509
4547
|
RubyCommand.Argument(name: "google_cloud_bucket_name", value: googleCloudBucketName),
|
|
4510
4548
|
RubyCommand.Argument(name: "google_cloud_keys_file", value: googleCloudKeysFile),
|
|
4511
4549
|
RubyCommand.Argument(name: "google_cloud_project_id", value: googleCloudProjectId),
|
|
4550
|
+
RubyCommand.Argument(name: "s3_region", value: s3Region),
|
|
4551
|
+
RubyCommand.Argument(name: "s3_access_key", value: s3AccessKey),
|
|
4552
|
+
RubyCommand.Argument(name: "s3_secret_access_key", value: s3SecretAccessKey),
|
|
4553
|
+
RubyCommand.Argument(name: "s3_bucket", value: s3Bucket),
|
|
4512
4554
|
RubyCommand.Argument(name: "keychain_name", value: keychainName),
|
|
4513
4555
|
RubyCommand.Argument(name: "keychain_password", value: keychainPassword),
|
|
4514
4556
|
RubyCommand.Argument(name: "force", value: force),
|
|
@@ -7000,7 +7042,7 @@ func supply(packageName: String,
|
|
|
7000
7042
|
releaseStatus: String = "completed",
|
|
7001
7043
|
track: String = "production",
|
|
7002
7044
|
rollout: String? = nil,
|
|
7003
|
-
metadataPath: String
|
|
7045
|
+
metadataPath: String = "./metadata",
|
|
7004
7046
|
key: String? = nil,
|
|
7005
7047
|
issuer: String? = nil,
|
|
7006
7048
|
jsonKey: String? = nil,
|
|
@@ -7137,6 +7179,10 @@ func swiftlint(mode: Any = "lint",
|
|
|
7137
7179
|
- googleCloudBucketName: Name of the Google Cloud Storage bucket to use
|
|
7138
7180
|
- googleCloudKeysFile: Path to the gc_keys.json file
|
|
7139
7181
|
- googleCloudProjectId: ID of the Google Cloud project to use for authentication
|
|
7182
|
+
- s3Region: Name of the S3 region
|
|
7183
|
+
- s3AccessKey: S3 access key
|
|
7184
|
+
- s3SecretAccessKey: S3 secret secret access key
|
|
7185
|
+
- s3Bucket: Name of the S3 bucket
|
|
7140
7186
|
- keychainName: Keychain the items should be imported to
|
|
7141
7187
|
- keychainPassword: This might be required the first time you access certificates on a new mac. For the login/default keychain this is your account password
|
|
7142
7188
|
- force: Renew the provisioning profiles every time you run match
|
|
@@ -7171,6 +7217,10 @@ func syncCodeSigning(type: String = "development",
|
|
|
7171
7217
|
googleCloudBucketName: String? = nil,
|
|
7172
7218
|
googleCloudKeysFile: String? = nil,
|
|
7173
7219
|
googleCloudProjectId: String? = nil,
|
|
7220
|
+
s3Region: String? = nil,
|
|
7221
|
+
s3AccessKey: String? = nil,
|
|
7222
|
+
s3SecretAccessKey: String? = nil,
|
|
7223
|
+
s3Bucket: String? = nil,
|
|
7174
7224
|
keychainName: String = "login.keychain",
|
|
7175
7225
|
keychainPassword: String? = nil,
|
|
7176
7226
|
force: Bool = false,
|
|
@@ -7202,6 +7252,10 @@ func syncCodeSigning(type: String = "development",
|
|
|
7202
7252
|
RubyCommand.Argument(name: "google_cloud_bucket_name", value: googleCloudBucketName),
|
|
7203
7253
|
RubyCommand.Argument(name: "google_cloud_keys_file", value: googleCloudKeysFile),
|
|
7204
7254
|
RubyCommand.Argument(name: "google_cloud_project_id", value: googleCloudProjectId),
|
|
7255
|
+
RubyCommand.Argument(name: "s3_region", value: s3Region),
|
|
7256
|
+
RubyCommand.Argument(name: "s3_access_key", value: s3AccessKey),
|
|
7257
|
+
RubyCommand.Argument(name: "s3_secret_access_key", value: s3SecretAccessKey),
|
|
7258
|
+
RubyCommand.Argument(name: "s3_bucket", value: s3Bucket),
|
|
7205
7259
|
RubyCommand.Argument(name: "keychain_name", value: keychainName),
|
|
7206
7260
|
RubyCommand.Argument(name: "keychain_password", value: keychainPassword),
|
|
7207
7261
|
RubyCommand.Argument(name: "force", value: force),
|
|
@@ -8037,7 +8091,7 @@ func uploadToPlayStore(packageName: String,
|
|
|
8037
8091
|
releaseStatus: String = "completed",
|
|
8038
8092
|
track: String = "production",
|
|
8039
8093
|
rollout: String? = nil,
|
|
8040
|
-
metadataPath: String
|
|
8094
|
+
metadataPath: String = "./metadata",
|
|
8041
8095
|
key: String? = nil,
|
|
8042
8096
|
issuer: String? = nil,
|
|
8043
8097
|
jsonKey: String? = nil,
|
|
@@ -8536,7 +8590,7 @@ func xcov(workspace: String? = nil,
|
|
|
8536
8590
|
coverallsServiceJobId: String? = nil,
|
|
8537
8591
|
coverallsRepoToken: String? = nil,
|
|
8538
8592
|
xcconfig: String? = nil,
|
|
8539
|
-
ideFoundationPath: String = "/Applications/Xcode-11.
|
|
8593
|
+
ideFoundationPath: String = "/Applications/Xcode-11.2.1.app/Contents/Developer/../Frameworks/IDEFoundation.framework/Versions/A/IDEFoundation",
|
|
8540
8594
|
legacySupport: Bool = false) {
|
|
8541
8595
|
let command = RubyCommand(commandID: "", methodName: "xcov", className: nil, args: [RubyCommand.Argument(name: "workspace", value: workspace),
|
|
8542
8596
|
RubyCommand.Argument(name: "project", value: project),
|
|
@@ -8681,4 +8735,4 @@ let snapshotfile: Snapshotfile = Snapshotfile()
|
|
|
8681
8735
|
|
|
8682
8736
|
// Please don't remove the lines below
|
|
8683
8737
|
// They are used to detect outdated files
|
|
8684
|
-
// FastlaneRunnerAPIVersion [0.9.
|
|
8738
|
+
// FastlaneRunnerAPIVersion [0.9.71]
|
|
Binary file
|
|
@@ -63,6 +63,18 @@ protocol MatchfileProtocol: class {
|
|
|
63
63
|
/// ID of the Google Cloud project to use for authentication
|
|
64
64
|
var googleCloudProjectId: String? { get }
|
|
65
65
|
|
|
66
|
+
/// Name of the S3 region
|
|
67
|
+
var s3Region: String? { get }
|
|
68
|
+
|
|
69
|
+
/// S3 access key
|
|
70
|
+
var s3AccessKey: String? { get }
|
|
71
|
+
|
|
72
|
+
/// S3 secret secret access key
|
|
73
|
+
var s3SecretAccessKey: String? { get }
|
|
74
|
+
|
|
75
|
+
/// Name of the S3 bucket
|
|
76
|
+
var s3Bucket: String? { get }
|
|
77
|
+
|
|
66
78
|
/// Keychain the items should be imported to
|
|
67
79
|
var keychainName: String { get }
|
|
68
80
|
|
|
@@ -116,6 +128,10 @@ extension MatchfileProtocol {
|
|
|
116
128
|
var googleCloudBucketName: String? { return nil }
|
|
117
129
|
var googleCloudKeysFile: String? { return nil }
|
|
118
130
|
var googleCloudProjectId: String? { return nil }
|
|
131
|
+
var s3Region: String? { return nil }
|
|
132
|
+
var s3AccessKey: String? { return nil }
|
|
133
|
+
var s3SecretAccessKey: String? { return nil }
|
|
134
|
+
var s3Bucket: String? { return nil }
|
|
119
135
|
var keychainName: String { return "login.keychain" }
|
|
120
136
|
var keychainPassword: String? { return nil }
|
|
121
137
|
var force: Bool { return false }
|
|
@@ -130,4 +146,4 @@ extension MatchfileProtocol {
|
|
|
130
146
|
|
|
131
147
|
// Please don't remove the lines below
|
|
132
148
|
// They are used to detect outdated files
|
|
133
|
-
// FastlaneRunnerAPIVersion [0.9.
|
|
149
|
+
// FastlaneRunnerAPIVersion [0.9.14]
|
|
@@ -37,6 +37,7 @@ module FastlaneCore
|
|
|
37
37
|
|
|
38
38
|
def self.fetch_info_plist_file(path)
|
|
39
39
|
UI.user_error!("Could not find file at path '#{path}'") unless File.exist?(path)
|
|
40
|
+
Zip.validate_entry_sizes = true # https://github.com/rubyzip/rubyzip/releases/tag/v2.0.0
|
|
40
41
|
Zip::File.open(path, "rb") do |zipfile|
|
|
41
42
|
file = zipfile.glob('**/Payload/*.app/Info.plist').first
|
|
42
43
|
return nil unless file
|
|
@@ -7,6 +7,7 @@ require_relative 'device_types'
|
|
|
7
7
|
require_relative 'runner'
|
|
8
8
|
require_relative 'options'
|
|
9
9
|
require_relative 'dependency_checker'
|
|
10
|
+
require_relative 'device'
|
|
10
11
|
|
|
11
12
|
HighLine.track_eof = false
|
|
12
13
|
|
|
@@ -80,6 +81,30 @@ module Frameit
|
|
|
80
81
|
end
|
|
81
82
|
end
|
|
82
83
|
|
|
84
|
+
command :android do |c|
|
|
85
|
+
c.syntax = 'fastlane frameit android'
|
|
86
|
+
c.description = "Adds Android frames around all screenshots"
|
|
87
|
+
|
|
88
|
+
FastlaneCore::CommanderGenerator.new.generate(Frameit::Options.available_options, command: c)
|
|
89
|
+
|
|
90
|
+
c.action do |args, options|
|
|
91
|
+
load_config(options)
|
|
92
|
+
Frameit::Runner.new.run('.', nil, Platform::ANDROID)
|
|
93
|
+
end
|
|
94
|
+
end
|
|
95
|
+
|
|
96
|
+
command :ios do |c|
|
|
97
|
+
c.syntax = 'fastlane frameit ios'
|
|
98
|
+
c.description = "Adds iOS frames around all screenshots"
|
|
99
|
+
|
|
100
|
+
FastlaneCore::CommanderGenerator.new.generate(Frameit::Options.available_options, command: c)
|
|
101
|
+
|
|
102
|
+
c.action do |args, options|
|
|
103
|
+
load_config(options)
|
|
104
|
+
Frameit::Runner.new.run('.', nil, Platform::IOS)
|
|
105
|
+
end
|
|
106
|
+
end
|
|
107
|
+
|
|
83
108
|
command :setup do |c|
|
|
84
109
|
c.syntax = 'fastlane frameit setup'
|
|
85
110
|
c.description = "Downloads and sets up the latest device frames"
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
require_relative '
|
|
1
|
+
require_relative 'device_types'
|
|
2
2
|
|
|
3
3
|
module Frameit
|
|
4
4
|
class ConfigParser
|
|
@@ -79,13 +79,7 @@ module Frameit
|
|
|
79
79
|
when 'font'
|
|
80
80
|
UI.user_error!("Could not find font at path '#{File.expand_path(value)}'") unless File.exist?(value)
|
|
81
81
|
when 'fonts'
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
value.each do |current|
|
|
85
|
-
UI.user_error!("You must specify a font path") if current.fetch('font', '').length == 0
|
|
86
|
-
UI.user_error!("Could not find font at path '#{File.expand_path(current.fetch('font'))}'") unless File.exist?(current.fetch('font'))
|
|
87
|
-
UI.user_error!("`supported` must be an array") unless current.fetch('supported', []).kind_of?(Array)
|
|
88
|
-
end
|
|
82
|
+
check_fonts(value)
|
|
89
83
|
when 'background'
|
|
90
84
|
UI.user_error!("Could not find background image at path '#{File.expand_path(value)}'") unless File.exist?(value)
|
|
91
85
|
when 'color'
|
|
@@ -103,12 +97,40 @@ module Frameit
|
|
|
103
97
|
when 'font_scale_factor'
|
|
104
98
|
UI.user_error!("font_scale_factor must be numeric") unless value.kind_of?(Numeric)
|
|
105
99
|
when 'frame'
|
|
106
|
-
UI.user_error!("
|
|
100
|
+
UI.user_error!("Invalid frame color '#{value}'. Frame color must be one of " + Color.all_colors.join(', ')) unless ConfigParser.supported_color?(value)
|
|
101
|
+
when 'use_platform'
|
|
102
|
+
UI.user_error!("Invalid platform type '#{value}'. Available values are " + Platform.all_platforms.join(', ') + ".") unless ConfigParser.supported_platform?(value)
|
|
103
|
+
when 'force_device_type'
|
|
104
|
+
UI.user_error!("Invalid device type '#{value}'. Available values: " + Devices.all_device_names_without_apple.join(', ')) unless ConfigParser.supported_device?(value)
|
|
105
|
+
end
|
|
106
|
+
end
|
|
107
|
+
|
|
108
|
+
def check_fonts(value)
|
|
109
|
+
UI.user_error!("`fonts` must be an array") unless value.kind_of?(Array)
|
|
110
|
+
|
|
111
|
+
value.each do |current|
|
|
112
|
+
UI.user_error!("You must specify a font path") if current.fetch('font', '').length == 0
|
|
113
|
+
UI.user_error!("Could not find font at path '#{File.expand_path(current.fetch('font'))}'") unless File.exist?(current.fetch('font'))
|
|
114
|
+
UI.user_error!("`supported` must be an array") unless current.fetch('supported', []).kind_of?(Array)
|
|
107
115
|
end
|
|
108
116
|
end
|
|
109
117
|
|
|
110
118
|
def integer_or_percentage(value)
|
|
111
119
|
value.kind_of?(Integer) || (value.end_with?('%') && value.to_f > 0)
|
|
112
120
|
end
|
|
121
|
+
|
|
122
|
+
def self.supported_color?(value)
|
|
123
|
+
return false if value.nil?
|
|
124
|
+
Color.all_colors.any? { |c| c == value }
|
|
125
|
+
end
|
|
126
|
+
|
|
127
|
+
def self.supported_platform?(value)
|
|
128
|
+
return false if value.nil?
|
|
129
|
+
Platform.all_platforms.any? { |c| c == value }
|
|
130
|
+
end
|
|
131
|
+
|
|
132
|
+
def self.supported_device?(value)
|
|
133
|
+
return !Device.find_device_by_id_or_name(value).nil?
|
|
134
|
+
end
|
|
113
135
|
end
|
|
114
136
|
end
|