fastlane 2.146.1 → 2.147.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (50) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +82 -82
  3. data/fastlane/lib/assets/custom_action_template.rb +6 -6
  4. data/fastlane/lib/fastlane/actions/cocoapods.rb +1 -1
  5. data/fastlane/lib/fastlane/actions/docs/capture_ios_screenshots.md +3 -1
  6. data/fastlane/lib/fastlane/actions/docs/frame_screenshots.md +1 -1
  7. data/fastlane/lib/fastlane/actions/git_branch.rb +1 -1
  8. data/fastlane/lib/fastlane/actions/set_pod_key.rb +3 -3
  9. data/fastlane/lib/fastlane/actions/testfairy.rb +18 -3
  10. data/fastlane/lib/fastlane/actions/verify_xcode.rb +7 -0
  11. data/fastlane/lib/fastlane/commands_generator.rb +4 -1
  12. data/fastlane/lib/fastlane/helper/lane_helper.rb +13 -0
  13. data/fastlane/lib/fastlane/version.rb +1 -1
  14. data/fastlane/swift/Deliverfile.swift +1 -1
  15. data/fastlane/swift/Fastlane.swift +41 -11
  16. data/fastlane/swift/Gymfile.swift +1 -1
  17. data/fastlane/swift/Matchfile.swift +1 -1
  18. data/fastlane/swift/MatchfileProtocol.swift +5 -1
  19. data/fastlane/swift/Precheckfile.swift +1 -1
  20. data/fastlane/swift/Scanfile.swift +1 -1
  21. data/fastlane/swift/ScanfileProtocol.swift +6 -2
  22. data/fastlane/swift/Screengrabfile.swift +1 -1
  23. data/fastlane/swift/Snapshotfile.swift +1 -1
  24. data/fastlane/swift/SnapshotfileProtocol.swift +9 -1
  25. data/fastlane_core/lib/fastlane_core/helper.rb +17 -0
  26. data/fastlane_core/lib/fastlane_core/keychain_importer.rb +46 -2
  27. data/frameit/lib/frameit/device_types.rb +10 -0
  28. data/frameit/lib/frameit/options.rb +5 -2
  29. data/frameit/lib/frameit/runner.rb +5 -0
  30. data/frameit/lib/frameit/screenshot.rb +1 -0
  31. data/match/lib/match/change_password.rb +1 -18
  32. data/match/lib/match/encryption/openssl.rb +1 -1
  33. data/match/lib/match/generator.rb +5 -1
  34. data/match/lib/match/options.rb +5 -0
  35. data/match/lib/match/utils.rb +1 -1
  36. data/scan/lib/scan/options.rb +6 -1
  37. data/scan/lib/scan/runner.rb +2 -0
  38. data/scan/lib/scan/test_command_generator.rb +1 -1
  39. data/snapshot/lib/assets/SnapfileTemplate +3 -0
  40. data/snapshot/lib/snapshot/options.rb +10 -0
  41. data/snapshot/lib/snapshot/simulator_launchers/launcher_configuration.rb +2 -0
  42. data/snapshot/lib/snapshot/simulator_launchers/simulator_launcher.rb +4 -0
  43. data/snapshot/lib/snapshot/simulator_launchers/simulator_launcher_base.rb +21 -0
  44. data/snapshot/lib/snapshot/test_command_generator_base.rb +3 -0
  45. data/spaceship/lib/spaceship/base.rb +1 -1
  46. data/spaceship/lib/spaceship/connect_api/model.rb +6 -0
  47. data/spaceship/lib/spaceship/tunes/iap.rb +15 -0
  48. data/spaceship/lib/spaceship/tunes/tunes_client.rb +14 -0
  49. data/supply/lib/supply/.client.rb.swp +0 -0
  50. 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 (IOS is default to ensure backward compatibility)
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 (IOS is default to ensure backward compatibility)
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.74]
8853
+ // FastlaneRunnerAPIVersion [0.9.75]
@@ -18,4 +18,4 @@ class Gymfile: GymfileProtocol {
18
18
 
19
19
 
20
20
 
21
- // Generated with fastlane 2.146.1
21
+ // Generated with fastlane 2.147.0
@@ -18,4 +18,4 @@ class Matchfile: MatchfileProtocol {
18
18
 
19
19
 
20
20
 
21
- // Generated with fastlane 2.146.1
21
+ // Generated with fastlane 2.147.0
@@ -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.15]
153
+ // FastlaneRunnerAPIVersion [0.9.16]
@@ -18,4 +18,4 @@ class Precheckfile: PrecheckfileProtocol {
18
18
 
19
19
 
20
20
 
21
- // Generated with fastlane 2.146.1
21
+ // Generated with fastlane 2.147.0
@@ -18,4 +18,4 @@ class Scanfile: ScanfileProtocol {
18
18
 
19
19
 
20
20
 
21
- // Generated with fastlane 2.146.1
21
+ // Generated with fastlane 2.147.0
@@ -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.27]
253
+ // FastlaneRunnerAPIVersion [0.9.28]
@@ -18,4 +18,4 @@ class Screengrabfile: ScreengrabfileProtocol {
18
18
 
19
19
 
20
20
 
21
- // Generated with fastlane 2.146.1
21
+ // Generated with fastlane 2.147.0
@@ -18,4 +18,4 @@ class Snapshotfile: SnapshotfileProtocol {
18
18
 
19
19
 
20
20
 
21
- // Generated with fastlane 2.146.1
21
+ // Generated with fastlane 2.147.0
@@ -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.7]
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: "", certificate_password: "", output: FastlaneCore::Globals.verbose?)
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: "", output: FastlaneCore::Globals.verbose?)
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 (IOS is default to ensure backward compatibility)",
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::IOS,
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 = ChangePassword.ask_password(message: "New passphrase for Git Repo: ", confirm: true)
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