fastlane 2.146.1 → 2.147.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +82 -82
- data/fastlane/lib/assets/custom_action_template.rb +6 -6
- data/fastlane/lib/fastlane/actions/cocoapods.rb +1 -1
- data/fastlane/lib/fastlane/actions/docs/capture_ios_screenshots.md +3 -1
- data/fastlane/lib/fastlane/actions/docs/frame_screenshots.md +1 -1
- data/fastlane/lib/fastlane/actions/git_branch.rb +1 -1
- data/fastlane/lib/fastlane/actions/set_pod_key.rb +3 -3
- data/fastlane/lib/fastlane/actions/testfairy.rb +18 -3
- data/fastlane/lib/fastlane/actions/verify_xcode.rb +7 -0
- data/fastlane/lib/fastlane/commands_generator.rb +4 -1
- data/fastlane/lib/fastlane/helper/lane_helper.rb +13 -0
- data/fastlane/lib/fastlane/version.rb +1 -1
- data/fastlane/swift/Deliverfile.swift +1 -1
- data/fastlane/swift/Fastlane.swift +41 -11
- data/fastlane/swift/Gymfile.swift +1 -1
- data/fastlane/swift/Matchfile.swift +1 -1
- data/fastlane/swift/MatchfileProtocol.swift +5 -1
- data/fastlane/swift/Precheckfile.swift +1 -1
- data/fastlane/swift/Scanfile.swift +1 -1
- data/fastlane/swift/ScanfileProtocol.swift +6 -2
- 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/helper.rb +17 -0
- data/fastlane_core/lib/fastlane_core/keychain_importer.rb +46 -2
- data/frameit/lib/frameit/device_types.rb +10 -0
- data/frameit/lib/frameit/options.rb +5 -2
- data/frameit/lib/frameit/runner.rb +5 -0
- data/frameit/lib/frameit/screenshot.rb +1 -0
- data/match/lib/match/change_password.rb +1 -18
- data/match/lib/match/encryption/openssl.rb +1 -1
- data/match/lib/match/generator.rb +5 -1
- data/match/lib/match/options.rb +5 -0
- data/match/lib/match/utils.rb +1 -1
- data/scan/lib/scan/options.rb +6 -1
- data/scan/lib/scan/runner.rb +2 -0
- data/scan/lib/scan/test_command_generator.rb +1 -1
- data/snapshot/lib/assets/SnapfileTemplate +3 -0
- data/snapshot/lib/snapshot/options.rb +10 -0
- data/snapshot/lib/snapshot/simulator_launchers/launcher_configuration.rb +2 -0
- data/snapshot/lib/snapshot/simulator_launchers/simulator_launcher.rb +4 -0
- data/snapshot/lib/snapshot/simulator_launchers/simulator_launcher_base.rb +21 -0
- data/snapshot/lib/snapshot/test_command_generator_base.rb +3 -0
- data/spaceship/lib/spaceship/base.rb +1 -1
- data/spaceship/lib/spaceship/connect_api/model.rb +6 -0
- data/spaceship/lib/spaceship/tunes/iap.rb +15 -0
- data/spaceship/lib/spaceship/tunes/tunes_client.rb +14 -0
- data/supply/lib/supply/.client.rb.swp +0 -0
- metadata +35 -21
@@ -1442,6 +1442,7 @@ func captureAndroidScreenshots(androidHome: String? = nil,
|
|
1442
1442
|
- clearPreviousScreenshots: Enabling this option will automatically clear previously generated screenshots before running snapshot
|
1443
1443
|
- reinstallApp: Enabling this option will automatically uninstall the application before running it
|
1444
1444
|
- eraseSimulator: Enabling this option will automatically erase the simulator before running the application
|
1445
|
+
- overrideStatusBar: Enabling this option wil automatically override the status bar to show 9:41 AM, full battery, and full reception
|
1445
1446
|
- localizeSimulator: Enabling this option will configure the Simulator's system language
|
1446
1447
|
- darkMode: Enabling this option will configure the Simulator to be in dark mode (false for light, true for dark)
|
1447
1448
|
- appIdentifier: The bundle identifier of the app to uninstall (only needed when enabling reinstall_app)
|
@@ -1463,6 +1464,7 @@ func captureAndroidScreenshots(androidHome: String? = nil,
|
|
1463
1464
|
- concurrentSimulators: Take snapshots on multiple simulators concurrently. Note: This option is only applicable when running against Xcode 9
|
1464
1465
|
- disableSlideToType: Disable the simulator from showing the 'Slide to type' prompt
|
1465
1466
|
- clonedSourcePackagesPath: Sets a custom path for Swift Package Manager dependencies
|
1467
|
+
- testplan: The testplan associated with the scheme that should be used for testing
|
1466
1468
|
*/
|
1467
1469
|
func captureIosScreenshots(workspace: String? = nil,
|
1468
1470
|
project: String? = nil,
|
@@ -1479,6 +1481,7 @@ func captureIosScreenshots(workspace: String? = nil,
|
|
1479
1481
|
clearPreviousScreenshots: Bool = false,
|
1480
1482
|
reinstallApp: Bool = false,
|
1481
1483
|
eraseSimulator: Bool = false,
|
1484
|
+
overrideStatusBar: Bool = false,
|
1482
1485
|
localizeSimulator: Bool = false,
|
1483
1486
|
darkMode: Bool? = nil,
|
1484
1487
|
appIdentifier: String? = nil,
|
@@ -1499,7 +1502,8 @@ func captureIosScreenshots(workspace: String? = nil,
|
|
1499
1502
|
namespaceLogFiles: Any? = nil,
|
1500
1503
|
concurrentSimulators: Bool = true,
|
1501
1504
|
disableSlideToType: Bool = false,
|
1502
|
-
clonedSourcePackagesPath: String? = nil
|
1505
|
+
clonedSourcePackagesPath: String? = nil,
|
1506
|
+
testplan: String? = nil) {
|
1503
1507
|
let command = RubyCommand(commandID: "", methodName: "capture_ios_screenshots", className: nil, args: [RubyCommand.Argument(name: "workspace", value: workspace),
|
1504
1508
|
RubyCommand.Argument(name: "project", value: project),
|
1505
1509
|
RubyCommand.Argument(name: "xcargs", value: xcargs),
|
@@ -1515,6 +1519,7 @@ func captureIosScreenshots(workspace: String? = nil,
|
|
1515
1519
|
RubyCommand.Argument(name: "clear_previous_screenshots", value: clearPreviousScreenshots),
|
1516
1520
|
RubyCommand.Argument(name: "reinstall_app", value: reinstallApp),
|
1517
1521
|
RubyCommand.Argument(name: "erase_simulator", value: eraseSimulator),
|
1522
|
+
RubyCommand.Argument(name: "override_status_bar", value: overrideStatusBar),
|
1518
1523
|
RubyCommand.Argument(name: "localize_simulator", value: localizeSimulator),
|
1519
1524
|
RubyCommand.Argument(name: "dark_mode", value: darkMode),
|
1520
1525
|
RubyCommand.Argument(name: "app_identifier", value: appIdentifier),
|
@@ -1535,7 +1540,8 @@ func captureIosScreenshots(workspace: String? = nil,
|
|
1535
1540
|
RubyCommand.Argument(name: "namespace_log_files", value: namespaceLogFiles),
|
1536
1541
|
RubyCommand.Argument(name: "concurrent_simulators", value: concurrentSimulators),
|
1537
1542
|
RubyCommand.Argument(name: "disable_slide_to_type", value: disableSlideToType),
|
1538
|
-
RubyCommand.Argument(name: "cloned_source_packages_path", value: clonedSourcePackagesPath)
|
1543
|
+
RubyCommand.Argument(name: "cloned_source_packages_path", value: clonedSourcePackagesPath),
|
1544
|
+
RubyCommand.Argument(name: "testplan", value: testplan)])
|
1539
1545
|
_ = runner.executeCommand(command)
|
1540
1546
|
}
|
1541
1547
|
|
@@ -1558,6 +1564,7 @@ func captureIosScreenshots(workspace: String? = nil,
|
|
1558
1564
|
- clearPreviousScreenshots: Enabling this option will automatically clear previously generated screenshots before running snapshot
|
1559
1565
|
- reinstallApp: Enabling this option will automatically uninstall the application before running it
|
1560
1566
|
- eraseSimulator: Enabling this option will automatically erase the simulator before running the application
|
1567
|
+
- overrideStatusBar: Enabling this option wil automatically override the status bar to show 9:41 AM, full battery, and full reception
|
1561
1568
|
- localizeSimulator: Enabling this option will configure the Simulator's system language
|
1562
1569
|
- darkMode: Enabling this option will configure the Simulator to be in dark mode (false for light, true for dark)
|
1563
1570
|
- appIdentifier: The bundle identifier of the app to uninstall (only needed when enabling reinstall_app)
|
@@ -1579,6 +1586,7 @@ func captureIosScreenshots(workspace: String? = nil,
|
|
1579
1586
|
- concurrentSimulators: Take snapshots on multiple simulators concurrently. Note: This option is only applicable when running against Xcode 9
|
1580
1587
|
- disableSlideToType: Disable the simulator from showing the 'Slide to type' prompt
|
1581
1588
|
- clonedSourcePackagesPath: Sets a custom path for Swift Package Manager dependencies
|
1589
|
+
- testplan: The testplan associated with the scheme that should be used for testing
|
1582
1590
|
*/
|
1583
1591
|
func captureScreenshots(workspace: String? = nil,
|
1584
1592
|
project: String? = nil,
|
@@ -1595,6 +1603,7 @@ func captureScreenshots(workspace: String? = nil,
|
|
1595
1603
|
clearPreviousScreenshots: Bool = false,
|
1596
1604
|
reinstallApp: Bool = false,
|
1597
1605
|
eraseSimulator: Bool = false,
|
1606
|
+
overrideStatusBar: Bool = false,
|
1598
1607
|
localizeSimulator: Bool = false,
|
1599
1608
|
darkMode: Bool? = nil,
|
1600
1609
|
appIdentifier: String? = nil,
|
@@ -1615,7 +1624,8 @@ func captureScreenshots(workspace: String? = nil,
|
|
1615
1624
|
namespaceLogFiles: Any? = nil,
|
1616
1625
|
concurrentSimulators: Bool = true,
|
1617
1626
|
disableSlideToType: Bool = false,
|
1618
|
-
clonedSourcePackagesPath: String? = nil
|
1627
|
+
clonedSourcePackagesPath: String? = nil,
|
1628
|
+
testplan: String? = nil) {
|
1619
1629
|
let command = RubyCommand(commandID: "", methodName: "capture_screenshots", className: nil, args: [RubyCommand.Argument(name: "workspace", value: workspace),
|
1620
1630
|
RubyCommand.Argument(name: "project", value: project),
|
1621
1631
|
RubyCommand.Argument(name: "xcargs", value: xcargs),
|
@@ -1631,6 +1641,7 @@ func captureScreenshots(workspace: String? = nil,
|
|
1631
1641
|
RubyCommand.Argument(name: "clear_previous_screenshots", value: clearPreviousScreenshots),
|
1632
1642
|
RubyCommand.Argument(name: "reinstall_app", value: reinstallApp),
|
1633
1643
|
RubyCommand.Argument(name: "erase_simulator", value: eraseSimulator),
|
1644
|
+
RubyCommand.Argument(name: "override_status_bar", value: overrideStatusBar),
|
1634
1645
|
RubyCommand.Argument(name: "localize_simulator", value: localizeSimulator),
|
1635
1646
|
RubyCommand.Argument(name: "dark_mode", value: darkMode),
|
1636
1647
|
RubyCommand.Argument(name: "app_identifier", value: appIdentifier),
|
@@ -1651,7 +1662,8 @@ func captureScreenshots(workspace: String? = nil,
|
|
1651
1662
|
RubyCommand.Argument(name: "namespace_log_files", value: namespaceLogFiles),
|
1652
1663
|
RubyCommand.Argument(name: "concurrent_simulators", value: concurrentSimulators),
|
1653
1664
|
RubyCommand.Argument(name: "disable_slide_to_type", value: disableSlideToType),
|
1654
|
-
RubyCommand.Argument(name: "cloned_source_packages_path", value: clonedSourcePackagesPath)
|
1665
|
+
RubyCommand.Argument(name: "cloned_source_packages_path", value: clonedSourcePackagesPath),
|
1666
|
+
RubyCommand.Argument(name: "testplan", value: testplan)])
|
1655
1667
|
_ = runner.executeCommand(command)
|
1656
1668
|
}
|
1657
1669
|
|
@@ -3004,7 +3016,7 @@ func flock(message: String,
|
|
3004
3016
|
- forceOrientationBlock: [Advanced] A block to customize your screenshots' device orientation
|
3005
3017
|
- debugMode: Output debug information in framed screenshots
|
3006
3018
|
- resume: Resume frameit instead of reprocessing all screenshots
|
3007
|
-
- usePlatform: Choose a platform, the valid options are IOS, ANDROID and ANY (
|
3019
|
+
- usePlatform: Choose a platform, the valid options are IOS, ANDROID and ANY (default is either general platform defined in the fastfile or IOS to ensure backward compatibility)
|
3008
3020
|
- path: The path to the directory containing the screenshots
|
3009
3021
|
|
3010
3022
|
Uses [frameit](https://docs.fastlane.tools/actions/frameit/) to prepare perfect screenshots for the App Store, your website, QA or emails.
|
@@ -3066,7 +3078,7 @@ func frameScreenshots(white: Bool? = nil,
|
|
3066
3078
|
- forceOrientationBlock: [Advanced] A block to customize your screenshots' device orientation
|
3067
3079
|
- debugMode: Output debug information in framed screenshots
|
3068
3080
|
- resume: Resume frameit instead of reprocessing all screenshots
|
3069
|
-
- usePlatform: Choose a platform, the valid options are IOS, ANDROID and ANY (
|
3081
|
+
- usePlatform: Choose a platform, the valid options are IOS, ANDROID and ANY (default is either general platform defined in the fastfile or IOS to ensure backward compatibility)
|
3070
3082
|
- path: The path to the directory containing the screenshots
|
3071
3083
|
|
3072
3084
|
Uses [frameit](https://docs.fastlane.tools/actions/frameit/) to prepare perfect screenshots for the App Store, your website, QA or emails.
|
@@ -4496,6 +4508,7 @@ func makeChangelogFromJenkins(fallbackChangelog: String = "",
|
|
4496
4508
|
- skipDocs: Skip generation of a README.md for the created git repository
|
4497
4509
|
- platform: Set the provisioning profile's platform to work with (i.e. ios, tvos, macos)
|
4498
4510
|
- templateName: The name of provisioning profile template. If the developer account has provisioning profile templates (aka: custom entitlements), the template name can be found by inspecting the Entitlements drop-down while creating/editing a provisioning profile (e.g. "Apple Pay Pass Suppression Development")
|
4511
|
+
- profileName: A custom name for the provisioning profile. This will replace the default provisioning profile name if specified
|
4499
4512
|
- outputPath: Path in which to export certificates, key and profile
|
4500
4513
|
- verbose: Print out extra information and all commands
|
4501
4514
|
|
@@ -4534,6 +4547,7 @@ func match(type: Any = matchfile.type,
|
|
4534
4547
|
skipDocs: Bool = matchfile.skipDocs,
|
4535
4548
|
platform: Any = matchfile.platform,
|
4536
4549
|
templateName: Any? = matchfile.templateName,
|
4550
|
+
profileName: Any? = matchfile.profileName,
|
4537
4551
|
outputPath: Any? = matchfile.outputPath,
|
4538
4552
|
verbose: Bool = matchfile.verbose) {
|
4539
4553
|
let command = RubyCommand(commandID: "", methodName: "match", className: nil, args: [RubyCommand.Argument(name: "type", value: type),
|
@@ -4569,6 +4583,7 @@ func match(type: Any = matchfile.type,
|
|
4569
4583
|
RubyCommand.Argument(name: "skip_docs", value: skipDocs),
|
4570
4584
|
RubyCommand.Argument(name: "platform", value: platform),
|
4571
4585
|
RubyCommand.Argument(name: "template_name", value: templateName),
|
4586
|
+
RubyCommand.Argument(name: "profile_name", value: profileName),
|
4572
4587
|
RubyCommand.Argument(name: "output_path", value: outputPath),
|
4573
4588
|
RubyCommand.Argument(name: "verbose", value: verbose)])
|
4574
4589
|
_ = runner.executeCommand(command)
|
@@ -5670,8 +5685,9 @@ func rubyVersion() {
|
|
5670
5685
|
- addressSanitizer: Should the address sanitizer be turned on?
|
5671
5686
|
- threadSanitizer: Should the thread sanitizer be turned on?
|
5672
5687
|
- openReport: Should the HTML report be opened when tests are completed?
|
5688
|
+
- disableXcpretty: Disable xcpretty formatting of build, similar to `output_style='raw'` but this will also skip the test results table
|
5673
5689
|
- outputDirectory: The directory in which all reports will be stored
|
5674
|
-
- outputStyle: Define how the output should look like. Valid values are: standard, basic, rspec, or raw (disables xcpretty)
|
5690
|
+
- outputStyle: Define how the output should look like. Valid values are: standard, basic, rspec, or raw (disables xcpretty during xcodebuild)
|
5675
5691
|
- outputTypes: Comma separated list of the output types (e.g. html, junit, json-compilation-database)
|
5676
5692
|
- outputFiles: Comma separated list of the output files, corresponding to the types provided by :output_types (order should match). If specifying an output type of json-compilation-database with :use_clang_report_name enabled, that option will take precedence
|
5677
5693
|
- buildlogPath: The directory where to store the raw log
|
@@ -5733,6 +5749,7 @@ func runTests(workspace: String? = nil,
|
|
5733
5749
|
addressSanitizer: Bool? = nil,
|
5734
5750
|
threadSanitizer: Bool? = nil,
|
5735
5751
|
openReport: Bool = false,
|
5752
|
+
disableXcpretty: Bool? = nil,
|
5736
5753
|
outputDirectory: String = "./test_output",
|
5737
5754
|
outputStyle: String? = nil,
|
5738
5755
|
outputTypes: String = "html,junit",
|
@@ -5793,6 +5810,7 @@ func runTests(workspace: String? = nil,
|
|
5793
5810
|
RubyCommand.Argument(name: "address_sanitizer", value: addressSanitizer),
|
5794
5811
|
RubyCommand.Argument(name: "thread_sanitizer", value: threadSanitizer),
|
5795
5812
|
RubyCommand.Argument(name: "open_report", value: openReport),
|
5813
|
+
RubyCommand.Argument(name: "disable_xcpretty", value: disableXcpretty),
|
5796
5814
|
RubyCommand.Argument(name: "output_directory", value: outputDirectory),
|
5797
5815
|
RubyCommand.Argument(name: "output_style", value: outputStyle),
|
5798
5816
|
RubyCommand.Argument(name: "output_types", value: outputTypes),
|
@@ -5934,8 +5952,9 @@ func say(text: Any,
|
|
5934
5952
|
- addressSanitizer: Should the address sanitizer be turned on?
|
5935
5953
|
- threadSanitizer: Should the thread sanitizer be turned on?
|
5936
5954
|
- openReport: Should the HTML report be opened when tests are completed?
|
5955
|
+
- disableXcpretty: Disable xcpretty formatting of build, similar to `output_style='raw'` but this will also skip the test results table
|
5937
5956
|
- outputDirectory: The directory in which all reports will be stored
|
5938
|
-
- outputStyle: Define how the output should look like. Valid values are: standard, basic, rspec, or raw (disables xcpretty)
|
5957
|
+
- outputStyle: Define how the output should look like. Valid values are: standard, basic, rspec, or raw (disables xcpretty during xcodebuild)
|
5939
5958
|
- outputTypes: Comma separated list of the output types (e.g. html, junit, json-compilation-database)
|
5940
5959
|
- outputFiles: Comma separated list of the output files, corresponding to the types provided by :output_types (order should match). If specifying an output type of json-compilation-database with :use_clang_report_name enabled, that option will take precedence
|
5941
5960
|
- buildlogPath: The directory where to store the raw log
|
@@ -5997,6 +6016,7 @@ func scan(workspace: Any? = scanfile.workspace,
|
|
5997
6016
|
addressSanitizer: Bool? = scanfile.addressSanitizer,
|
5998
6017
|
threadSanitizer: Bool? = scanfile.threadSanitizer,
|
5999
6018
|
openReport: Bool = scanfile.openReport,
|
6019
|
+
disableXcpretty: Bool? = scanfile.disableXcpretty,
|
6000
6020
|
outputDirectory: Any = scanfile.outputDirectory,
|
6001
6021
|
outputStyle: Any? = scanfile.outputStyle,
|
6002
6022
|
outputTypes: Any = scanfile.outputTypes,
|
@@ -6057,6 +6077,7 @@ func scan(workspace: Any? = scanfile.workspace,
|
|
6057
6077
|
RubyCommand.Argument(name: "address_sanitizer", value: addressSanitizer),
|
6058
6078
|
RubyCommand.Argument(name: "thread_sanitizer", value: threadSanitizer),
|
6059
6079
|
RubyCommand.Argument(name: "open_report", value: openReport),
|
6080
|
+
RubyCommand.Argument(name: "disable_xcpretty", value: disableXcpretty),
|
6060
6081
|
RubyCommand.Argument(name: "output_directory", value: outputDirectory),
|
6061
6082
|
RubyCommand.Argument(name: "output_style", value: outputStyle),
|
6062
6083
|
RubyCommand.Argument(name: "output_types", value: outputTypes),
|
@@ -6751,6 +6772,7 @@ func slather(buildDirectory: String? = nil,
|
|
6751
6772
|
- clearPreviousScreenshots: Enabling this option will automatically clear previously generated screenshots before running snapshot
|
6752
6773
|
- reinstallApp: Enabling this option will automatically uninstall the application before running it
|
6753
6774
|
- eraseSimulator: Enabling this option will automatically erase the simulator before running the application
|
6775
|
+
- overrideStatusBar: Enabling this option wil automatically override the status bar to show 9:41 AM, full battery, and full reception
|
6754
6776
|
- localizeSimulator: Enabling this option will configure the Simulator's system language
|
6755
6777
|
- darkMode: Enabling this option will configure the Simulator to be in dark mode (false for light, true for dark)
|
6756
6778
|
- appIdentifier: The bundle identifier of the app to uninstall (only needed when enabling reinstall_app)
|
@@ -6772,6 +6794,7 @@ func slather(buildDirectory: String? = nil,
|
|
6772
6794
|
- concurrentSimulators: Take snapshots on multiple simulators concurrently. Note: This option is only applicable when running against Xcode 9
|
6773
6795
|
- disableSlideToType: Disable the simulator from showing the 'Slide to type' prompt
|
6774
6796
|
- clonedSourcePackagesPath: Sets a custom path for Swift Package Manager dependencies
|
6797
|
+
- testplan: The testplan associated with the scheme that should be used for testing
|
6775
6798
|
*/
|
6776
6799
|
func snapshot(workspace: Any? = snapshotfile.workspace,
|
6777
6800
|
project: Any? = snapshotfile.project,
|
@@ -6788,6 +6811,7 @@ func snapshot(workspace: Any? = snapshotfile.workspace,
|
|
6788
6811
|
clearPreviousScreenshots: Bool = snapshotfile.clearPreviousScreenshots,
|
6789
6812
|
reinstallApp: Bool = snapshotfile.reinstallApp,
|
6790
6813
|
eraseSimulator: Bool = snapshotfile.eraseSimulator,
|
6814
|
+
overrideStatusBar: Bool = snapshotfile.overrideStatusBar,
|
6791
6815
|
localizeSimulator: Bool = snapshotfile.localizeSimulator,
|
6792
6816
|
darkMode: Bool? = snapshotfile.darkMode,
|
6793
6817
|
appIdentifier: Any? = snapshotfile.appIdentifier,
|
@@ -6808,7 +6832,8 @@ func snapshot(workspace: Any? = snapshotfile.workspace,
|
|
6808
6832
|
namespaceLogFiles: Any? = snapshotfile.namespaceLogFiles,
|
6809
6833
|
concurrentSimulators: Bool = snapshotfile.concurrentSimulators,
|
6810
6834
|
disableSlideToType: Bool = snapshotfile.disableSlideToType,
|
6811
|
-
clonedSourcePackagesPath: Any? = snapshotfile.clonedSourcePackagesPath
|
6835
|
+
clonedSourcePackagesPath: Any? = snapshotfile.clonedSourcePackagesPath,
|
6836
|
+
testplan: Any? = snapshotfile.testplan) {
|
6812
6837
|
let command = RubyCommand(commandID: "", methodName: "snapshot", className: nil, args: [RubyCommand.Argument(name: "workspace", value: workspace),
|
6813
6838
|
RubyCommand.Argument(name: "project", value: project),
|
6814
6839
|
RubyCommand.Argument(name: "xcargs", value: xcargs),
|
@@ -6824,6 +6849,7 @@ func snapshot(workspace: Any? = snapshotfile.workspace,
|
|
6824
6849
|
RubyCommand.Argument(name: "clear_previous_screenshots", value: clearPreviousScreenshots),
|
6825
6850
|
RubyCommand.Argument(name: "reinstall_app", value: reinstallApp),
|
6826
6851
|
RubyCommand.Argument(name: "erase_simulator", value: eraseSimulator),
|
6852
|
+
RubyCommand.Argument(name: "override_status_bar", value: overrideStatusBar),
|
6827
6853
|
RubyCommand.Argument(name: "localize_simulator", value: localizeSimulator),
|
6828
6854
|
RubyCommand.Argument(name: "dark_mode", value: darkMode),
|
6829
6855
|
RubyCommand.Argument(name: "app_identifier", value: appIdentifier),
|
@@ -6844,7 +6870,8 @@ func snapshot(workspace: Any? = snapshotfile.workspace,
|
|
6844
6870
|
RubyCommand.Argument(name: "namespace_log_files", value: namespaceLogFiles),
|
6845
6871
|
RubyCommand.Argument(name: "concurrent_simulators", value: concurrentSimulators),
|
6846
6872
|
RubyCommand.Argument(name: "disable_slide_to_type", value: disableSlideToType),
|
6847
|
-
RubyCommand.Argument(name: "cloned_source_packages_path", value: clonedSourcePackagesPath)
|
6873
|
+
RubyCommand.Argument(name: "cloned_source_packages_path", value: clonedSourcePackagesPath),
|
6874
|
+
RubyCommand.Argument(name: "testplan", value: testplan)])
|
6848
6875
|
_ = runner.executeCommand(command)
|
6849
6876
|
}
|
6850
6877
|
|
@@ -7225,6 +7252,7 @@ func swiftlint(mode: Any = "lint",
|
|
7225
7252
|
- skipDocs: Skip generation of a README.md for the created git repository
|
7226
7253
|
- platform: Set the provisioning profile's platform to work with (i.e. ios, tvos, macos)
|
7227
7254
|
- templateName: The name of provisioning profile template. If the developer account has provisioning profile templates (aka: custom entitlements), the template name can be found by inspecting the Entitlements drop-down while creating/editing a provisioning profile (e.g. "Apple Pay Pass Suppression Development")
|
7255
|
+
- profileName: A custom name for the provisioning profile. This will replace the default provisioning profile name if specified
|
7228
7256
|
- outputPath: Path in which to export certificates, key and profile
|
7229
7257
|
- verbose: Print out extra information and all commands
|
7230
7258
|
|
@@ -7263,6 +7291,7 @@ func syncCodeSigning(type: String = "development",
|
|
7263
7291
|
skipDocs: Bool = false,
|
7264
7292
|
platform: String = "ios",
|
7265
7293
|
templateName: String? = nil,
|
7294
|
+
profileName: String? = nil,
|
7266
7295
|
outputPath: String? = nil,
|
7267
7296
|
verbose: Bool = false) {
|
7268
7297
|
let command = RubyCommand(commandID: "", methodName: "sync_code_signing", className: nil, args: [RubyCommand.Argument(name: "type", value: type),
|
@@ -7298,6 +7327,7 @@ func syncCodeSigning(type: String = "development",
|
|
7298
7327
|
RubyCommand.Argument(name: "skip_docs", value: skipDocs),
|
7299
7328
|
RubyCommand.Argument(name: "platform", value: platform),
|
7300
7329
|
RubyCommand.Argument(name: "template_name", value: templateName),
|
7330
|
+
RubyCommand.Argument(name: "profile_name", value: profileName),
|
7301
7331
|
RubyCommand.Argument(name: "output_path", value: outputPath),
|
7302
7332
|
RubyCommand.Argument(name: "verbose", value: verbose)])
|
7303
7333
|
_ = runner.executeCommand(command)
|
@@ -8820,4 +8850,4 @@ let snapshotfile: Snapshotfile = Snapshotfile()
|
|
8820
8850
|
|
8821
8851
|
// Please don't remove the lines below
|
8822
8852
|
// They are used to detect outdated files
|
8823
|
-
// FastlaneRunnerAPIVersion [0.9.
|
8853
|
+
// FastlaneRunnerAPIVersion [0.9.75]
|
@@ -99,6 +99,9 @@ protocol MatchfileProtocol: class {
|
|
99
99
|
/// The name of provisioning profile template. If the developer account has provisioning profile templates (aka: custom entitlements), the template name can be found by inspecting the Entitlements drop-down while creating/editing a provisioning profile (e.g. "Apple Pay Pass Suppression Development")
|
100
100
|
var templateName: String? { get }
|
101
101
|
|
102
|
+
/// A custom name for the provisioning profile. This will replace the default provisioning profile name if specified
|
103
|
+
var profileName: String? { get }
|
104
|
+
|
102
105
|
/// Path in which to export certificates, key and profile
|
103
106
|
var outputPath: String? { get }
|
104
107
|
|
@@ -140,10 +143,11 @@ extension MatchfileProtocol {
|
|
140
143
|
var skipDocs: Bool { return false }
|
141
144
|
var platform: String { return "ios" }
|
142
145
|
var templateName: String? { return nil }
|
146
|
+
var profileName: String? { return nil }
|
143
147
|
var outputPath: String? { return nil }
|
144
148
|
var verbose: Bool { return false }
|
145
149
|
}
|
146
150
|
|
147
151
|
// Please don't remove the lines below
|
148
152
|
// They are used to detect outdated files
|
149
|
-
// FastlaneRunnerAPIVersion [0.9.
|
153
|
+
// FastlaneRunnerAPIVersion [0.9.16]
|
@@ -66,10 +66,13 @@ protocol ScanfileProtocol: class {
|
|
66
66
|
/// Should the HTML report be opened when tests are completed?
|
67
67
|
var openReport: Bool { get }
|
68
68
|
|
69
|
+
/// Disable xcpretty formatting of build, similar to `output_style='raw'` but this will also skip the test results table
|
70
|
+
var disableXcpretty: Bool? { get }
|
71
|
+
|
69
72
|
/// The directory in which all reports will be stored
|
70
73
|
var outputDirectory: String { get }
|
71
74
|
|
72
|
-
/// Define how the output should look like. Valid values are: standard, basic, rspec, or raw (disables xcpretty)
|
75
|
+
/// Define how the output should look like. Valid values are: standard, basic, rspec, or raw (disables xcpretty during xcodebuild)
|
73
76
|
var outputStyle: String? { get }
|
74
77
|
|
75
78
|
/// Comma separated list of the output types (e.g. html, junit, json-compilation-database)
|
@@ -204,6 +207,7 @@ extension ScanfileProtocol {
|
|
204
207
|
var addressSanitizer: Bool? { return nil }
|
205
208
|
var threadSanitizer: Bool? { return nil }
|
206
209
|
var openReport: Bool { return false }
|
210
|
+
var disableXcpretty: Bool? { return nil }
|
207
211
|
var outputDirectory: String { return "./test_output" }
|
208
212
|
var outputStyle: String? { return nil }
|
209
213
|
var outputTypes: String { return "html,junit" }
|
@@ -246,4 +250,4 @@ extension ScanfileProtocol {
|
|
246
250
|
|
247
251
|
// Please don't remove the lines below
|
248
252
|
// They are used to detect outdated files
|
249
|
-
// FastlaneRunnerAPIVersion [0.9.
|
253
|
+
// FastlaneRunnerAPIVersion [0.9.28]
|
@@ -45,6 +45,9 @@ protocol SnapshotfileProtocol: class {
|
|
45
45
|
/// Enabling this option will automatically erase the simulator before running the application
|
46
46
|
var eraseSimulator: Bool { get }
|
47
47
|
|
48
|
+
/// Enabling this option wil automatically override the status bar to show 9:41 AM, full battery, and full reception
|
49
|
+
var overrideStatusBar: Bool { get }
|
50
|
+
|
48
51
|
/// Enabling this option will configure the Simulator's system language
|
49
52
|
var localizeSimulator: Bool { get }
|
50
53
|
|
@@ -107,6 +110,9 @@ protocol SnapshotfileProtocol: class {
|
|
107
110
|
|
108
111
|
/// Sets a custom path for Swift Package Manager dependencies
|
109
112
|
var clonedSourcePackagesPath: String? { get }
|
113
|
+
|
114
|
+
/// The testplan associated with the scheme that should be used for testing
|
115
|
+
var testplan: String? { get }
|
110
116
|
}
|
111
117
|
|
112
118
|
extension SnapshotfileProtocol {
|
@@ -125,6 +131,7 @@ extension SnapshotfileProtocol {
|
|
125
131
|
var clearPreviousScreenshots: Bool { return false }
|
126
132
|
var reinstallApp: Bool { return false }
|
127
133
|
var eraseSimulator: Bool { return false }
|
134
|
+
var overrideStatusBar: Bool { return false }
|
128
135
|
var localizeSimulator: Bool { return false }
|
129
136
|
var darkMode: Bool? { return nil }
|
130
137
|
var appIdentifier: String? { return nil }
|
@@ -146,8 +153,9 @@ extension SnapshotfileProtocol {
|
|
146
153
|
var concurrentSimulators: Bool { return true }
|
147
154
|
var disableSlideToType: Bool { return false }
|
148
155
|
var clonedSourcePackagesPath: String? { return nil }
|
156
|
+
var testplan: String? { return nil }
|
149
157
|
}
|
150
158
|
|
151
159
|
// Please don't remove the lines below
|
152
160
|
// They are used to detect outdated files
|
153
|
-
// FastlaneRunnerAPIVersion [0.9.
|
161
|
+
// FastlaneRunnerAPIVersion [0.9.8]
|
@@ -416,5 +416,22 @@ module FastlaneCore
|
|
416
416
|
UI.deprecated("Helper.log is deprecated. Use `UI` class instead")
|
417
417
|
UI.current.log
|
418
418
|
end
|
419
|
+
|
420
|
+
def self.ask_password(message: "Passphrase: ", confirm: nil)
|
421
|
+
raise "This code should only run in interactive mode" unless UI.interactive?
|
422
|
+
|
423
|
+
loop do
|
424
|
+
password = UI.password(message)
|
425
|
+
if confirm
|
426
|
+
password2 = UI.password("Type passphrase again: ")
|
427
|
+
if password == password2
|
428
|
+
return password
|
429
|
+
end
|
430
|
+
else
|
431
|
+
return password
|
432
|
+
end
|
433
|
+
UI.error("Passphrases differ. Try again")
|
434
|
+
end
|
435
|
+
end
|
419
436
|
end
|
420
437
|
end
|
@@ -1,9 +1,10 @@
|
|
1
1
|
require_relative 'helper'
|
2
2
|
require 'open3'
|
3
|
+
require 'security'
|
3
4
|
|
4
5
|
module FastlaneCore
|
5
6
|
class KeychainImporter
|
6
|
-
def self.import_file(path, keychain_path, keychain_password:
|
7
|
+
def self.import_file(path, keychain_path, keychain_password: nil, certificate_password: "", output: FastlaneCore::Globals.verbose?)
|
7
8
|
UI.user_error!("Could not find file '#{path}'") unless File.exist?(path)
|
8
9
|
|
9
10
|
command = "security import #{path.shellescape} -k '#{keychain_path.shellescape}'"
|
@@ -19,6 +20,7 @@ module FastlaneCore
|
|
19
20
|
|
20
21
|
# Set partition list only if success since it can be a time consuming process if a lot of keys are installed
|
21
22
|
if thrd.value.success?
|
23
|
+
keychain_password ||= resolve_keychain_password(keychain_path)
|
22
24
|
set_partition_list(path, keychain_path, keychain_password: keychain_password, output: output)
|
23
25
|
else
|
24
26
|
# Output verbose if file is already installed since not an error otherwise we will show the whole error
|
@@ -32,7 +34,7 @@ module FastlaneCore
|
|
32
34
|
end
|
33
35
|
end
|
34
36
|
|
35
|
-
def self.set_partition_list(path, keychain_path, keychain_password:
|
37
|
+
def self.set_partition_list(path, keychain_path, keychain_password: nil, output: FastlaneCore::Globals.verbose?)
|
36
38
|
# When security supports partition lists, also add the partition IDs
|
37
39
|
# See https://openradar.appspot.com/28524119
|
38
40
|
if Helper.backticks('security -h | grep set-key-partition-list', print: false).length > 0
|
@@ -53,6 +55,9 @@ module FastlaneCore
|
|
53
55
|
|
54
56
|
# Inform user when no/wrong password was used as its needed to prevent UI permission popup from Xcode when signing
|
55
57
|
if err.include?("SecKeychainItemSetAccessWithPassword")
|
58
|
+
keychain_name = File.basename(keychain_path, ".*")
|
59
|
+
Security::InternetPassword.delete(server: server_name(keychain_name))
|
60
|
+
|
56
61
|
UI.important("")
|
57
62
|
UI.important("Could not configure imported keychain item (certificate) to prevent UI permission popup when code signing\n" \
|
58
63
|
"Check if you supplied the correct `keychain_password` for keychain: `#{keychain_path}`\n" \
|
@@ -72,5 +77,44 @@ module FastlaneCore
|
|
72
77
|
|
73
78
|
end
|
74
79
|
end
|
80
|
+
|
81
|
+
# https://github.com/fastlane/fastlane/issues/14196
|
82
|
+
# Keychain password is needed to set the partition list to
|
83
|
+
# prevent Xcode from prompting dialog for keychain password when signing
|
84
|
+
# 1. Uses keychain password from login keychain if found
|
85
|
+
# 2. Prompts user for keychain password and stores it in login keychain for user later
|
86
|
+
def self.resolve_keychain_password(keychain_path)
|
87
|
+
keychain_name = File.basename(keychain_path, ".*")
|
88
|
+
server = server_name(keychain_name)
|
89
|
+
|
90
|
+
# Attempt to find password in keychain for keychain
|
91
|
+
item = Security::InternetPassword.find(server: server)
|
92
|
+
if item
|
93
|
+
keychain_password = item.password
|
94
|
+
UI.important("Using keychain password from keychain item #{server} in #{keychain_path}")
|
95
|
+
end
|
96
|
+
|
97
|
+
if keychain_password.nil?
|
98
|
+
if UI.interactive?
|
99
|
+
UI.important("Enter the password for #{keychain_path}")
|
100
|
+
UI.important("This passphrase will be stored in your local keychain with the name #{server} and used in future runs")
|
101
|
+
UI.important("This prompt can be avoided by specifying the 'keychain_password' option or 'MATCH_KEYCHAIN_PASSWORD' environment variable")
|
102
|
+
keychain_password = FastlaneCore::Helper.ask_password(message: "Password for #{keychain_name} keychain: ", confirm: true)
|
103
|
+
Security::InternetPassword.add(server, "", keychain_password)
|
104
|
+
else
|
105
|
+
UI.important("Keychain password for #{keychain_path} was not specified and not found in your keychain. Specify the 'keychain_password' option to prevent the UI permission popup when code signing")
|
106
|
+
keychain_password = ""
|
107
|
+
end
|
108
|
+
end
|
109
|
+
|
110
|
+
return keychain_password
|
111
|
+
end
|
112
|
+
|
113
|
+
# server name used for accessing the macOS keychain
|
114
|
+
def self.server_name(keychain_name)
|
115
|
+
["fastlane", "keychain", keychain_name].join("_")
|
116
|
+
end
|
117
|
+
|
118
|
+
private_class_method :server_name
|
75
119
|
end
|
76
120
|
end
|
@@ -64,6 +64,14 @@ module Frameit
|
|
64
64
|
def self.all_platforms
|
65
65
|
Platform.constants.map { |c| Platform.const_get(c) }
|
66
66
|
end
|
67
|
+
|
68
|
+
def self.symbol_to_constant(symbol)
|
69
|
+
if symbol == :android
|
70
|
+
ANDROID
|
71
|
+
else
|
72
|
+
IOS
|
73
|
+
end
|
74
|
+
end
|
67
75
|
end
|
68
76
|
|
69
77
|
module Devices
|
@@ -119,6 +127,8 @@ module Frameit
|
|
119
127
|
IPAD_PRO = Frameit::Device.new("ipad-pro", "Apple iPad Pro", 3, [[2048, 2732], [2732, 2048]], 264, Color::SPACE_GRAY, Platform::IOS, Deliver::AppScreenshot::ScreenSize::IOS_IPAD_PRO)
|
120
128
|
# 3rd generation:
|
121
129
|
IPAD_PRO_12_9 = Frameit::Device.new("ipadPro129", "Apple iPad Pro (12.9-inch) (3rd generation)", 4, [[2048, 2732], [2732, 2048]], 264, Color::SPACE_GRAY, Platform::IOS, Deliver::AppScreenshot::ScreenSize::IOS_IPAD_PRO_12_9)
|
130
|
+
# 4th generation:
|
131
|
+
IPAD_PRO_12_9_4 = Frameit::Device.new("ipadPro129", "Apple iPad Pro (12.9-inch) (4th generation)", 5, [[2048, 2732], [2732, 2048]], 264, Color::SPACE_GRAY, Platform::IOS, Deliver::AppScreenshot::ScreenSize::IOS_IPAD_PRO_12_9)
|
122
132
|
# iPad Pro (10.5-inch) is not in frameit-frames repo, but must be included so that we are backward compatible with PR #15373
|
123
133
|
# priority must be lower so that users who didn't copy the frame to their frameit frames folder will not get an error
|
124
134
|
# ID and formatted name must be exactly as specified so that device.detect_device() will select this device if the filename includes them
|
@@ -1,4 +1,6 @@
|
|
1
1
|
require 'fastlane_core/configuration/config_item'
|
2
|
+
require 'fastlane/actions/actions_helper'
|
3
|
+
require 'fastlane/helper/lane_helper'
|
2
4
|
|
3
5
|
require_relative 'module'
|
4
6
|
require_relative 'config_parser'
|
@@ -97,9 +99,10 @@ module Frameit
|
|
97
99
|
type: Boolean),
|
98
100
|
FastlaneCore::ConfigItem.new(key: :use_platform,
|
99
101
|
env_name: "FRAMEIT_USE_PLATFORM",
|
100
|
-
description: "Choose a platform, the valid options are IOS, ANDROID and ANY (
|
102
|
+
description: "Choose a platform, the valid options are IOS, ANDROID and ANY (default is either general platform defined in the fastfile or IOS to ensure backward compatibility)",
|
101
103
|
optional: true,
|
102
|
-
default_value: Platform::
|
104
|
+
default_value: Platform.symbol_to_constant(Fastlane::Helper::LaneHelper.current_platform),
|
105
|
+
default_value_dynamic: true,
|
103
106
|
verify_block: proc do |value|
|
104
107
|
UI.user_error!("Invalid platform type '#{value}'. Available values are " + Platform.all_platforms.join(', ') + ".") unless ConfigParser.supported_platform?(value)
|
105
108
|
end)
|
@@ -82,8 +82,13 @@ module Frameit
|
|
82
82
|
# Loads the config (colors, background, texts, etc.)
|
83
83
|
# Don't use this method to access the actual text and use `fetch_texts` instead
|
84
84
|
def create_config(screenshot_path)
|
85
|
+
# Screengrab pulls screenshots to a different folder location
|
86
|
+
# frameit only handles two levels of folders, to not break
|
87
|
+
# compatibility with Supply we look into a different path for Android
|
88
|
+
# Issue https://github.com/fastlane/fastlane/issues/16289
|
85
89
|
config_path = File.join(File.expand_path("..", screenshot_path), "Framefile.json")
|
86
90
|
config_path = File.join(File.expand_path("../..", screenshot_path), "Framefile.json") unless File.exist?(config_path)
|
91
|
+
config_path = File.join(File.expand_path("../../../..", screenshot_path), "Framefile.json") unless File.exist?(config_path)
|
87
92
|
file = ConfigParser.new.load(config_path)
|
88
93
|
return {} unless file # no config file at all
|
89
94
|
file.fetch_value(screenshot_path)
|
@@ -27,6 +27,7 @@ module Frameit
|
|
27
27
|
# - see Parameters in the doc
|
28
28
|
# - contains default values and validates values
|
29
29
|
# - accessed via Frameit.config[:key]
|
30
|
+
# - default value is either general platform from fastfile or IOS if run directly
|
30
31
|
# - lowest priority
|
31
32
|
# - commands_generator.rb
|
32
33
|
# - commands entered directly to CLI (e. g. fastlane frameit android)
|
@@ -16,7 +16,7 @@ module Match
|
|
16
16
|
|
17
17
|
ensure_ui_interactive
|
18
18
|
|
19
|
-
to =
|
19
|
+
to = FastlaneCore::Helper.ask_password(message: "New passphrase for Git Repo: ", confirm: true)
|
20
20
|
|
21
21
|
# Choose the right storage and encryption implementations
|
22
22
|
storage = Storage.for_mode(params[:storage_mode], {
|
@@ -44,23 +44,6 @@ module Match
|
|
44
44
|
storage.save_changes!(files_to_commit: files_to_commit, custom_message: message)
|
45
45
|
end
|
46
46
|
|
47
|
-
# This method is called from both here, and from `openssl.rb`
|
48
|
-
def self.ask_password(message: "Passphrase for Match storage: ", confirm: nil)
|
49
|
-
ensure_ui_interactive
|
50
|
-
loop do
|
51
|
-
password = UI.password(message)
|
52
|
-
if confirm
|
53
|
-
password2 = UI.password("Type passphrase again: ")
|
54
|
-
if password == password2
|
55
|
-
return password
|
56
|
-
end
|
57
|
-
else
|
58
|
-
return password
|
59
|
-
end
|
60
|
-
UI.error("Passphrases differ. Try again")
|
61
|
-
end
|
62
|
-
end
|
63
|
-
|
64
47
|
def self.ensure_ui_interactive
|
65
48
|
raise "This code should only run in interactive mode" unless UI.interactive?
|
66
49
|
end
|