fastlane 2.203.0 → 2.204.3

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 +92 -92
  3. data/fastlane/lib/fastlane/actions/read_podspec.rb +1 -1
  4. data/fastlane/lib/fastlane/actions/trainer.rb +2 -2
  5. data/fastlane/lib/fastlane/actions/verify_build.rb +1 -1
  6. data/fastlane/lib/fastlane/swift_fastlane_api_generator.rb +1 -1
  7. data/fastlane/lib/fastlane/swift_lane_manager.rb +11 -3
  8. data/fastlane/lib/fastlane/swift_runner_upgrader.rb +54 -1
  9. data/fastlane/lib/fastlane/version.rb +1 -1
  10. data/fastlane/swift/Atomic.swift +150 -0
  11. data/fastlane/swift/Deliverfile.swift +1 -1
  12. data/fastlane/swift/DeliverfileProtocol.swift +2 -2
  13. data/fastlane/swift/Fastlane.swift +35 -11
  14. data/fastlane/swift/FastlaneSwiftRunner/FastlaneSwiftRunner.xcodeproj/project.pbxproj +30 -20
  15. data/fastlane/swift/FastlaneSwiftRunner/FastlaneSwiftRunner.xcodeproj/xcshareddata/xcschemes/FastlaneRunner.xcscheme +1 -1
  16. data/fastlane/swift/Gymfile.swift +1 -1
  17. data/fastlane/swift/GymfileProtocol.swift +2 -2
  18. data/fastlane/swift/LaneFileProtocol.swift +1 -1
  19. data/fastlane/swift/Matchfile.swift +1 -1
  20. data/fastlane/swift/MatchfileProtocol.swift +7 -3
  21. data/fastlane/swift/Precheckfile.swift +1 -1
  22. data/fastlane/swift/PrecheckfileProtocol.swift +2 -2
  23. data/fastlane/swift/Runner.swift +9 -1
  24. data/fastlane/swift/Scanfile.swift +1 -1
  25. data/fastlane/swift/ScanfileProtocol.swift +2 -2
  26. data/fastlane/swift/Screengrabfile.swift +1 -1
  27. data/fastlane/swift/ScreengrabfileProtocol.swift +2 -2
  28. data/fastlane/swift/Snapshotfile.swift +1 -1
  29. data/fastlane/swift/SnapshotfileProtocol.swift +2 -2
  30. data/fastlane/swift/SocketClient.swift +5 -1
  31. data/fastlane/swift/SocketClientDelegateProtocol.swift +1 -1
  32. data/fastlane/swift/formatting/Brewfile.lock.json +19 -19
  33. data/fastlane/swift/upgrade_manifest.json +1 -1
  34. data/fastlane_core/lib/fastlane_core/device_manager.rb +5 -1
  35. data/match/lib/match/nuke.rb +33 -9
  36. data/match/lib/match/options.rb +6 -1
  37. data/match/lib/match/storage/s3_storage.rb +3 -3
  38. data/pilot/lib/pilot/build_manager.rb +17 -7
  39. data/pilot/lib/pilot/options.rb +6 -1
  40. data/scan/lib/scan/runner.rb +9 -5
  41. data/snapshot/lib/assets/SnapshotHelper.swift +2 -2
  42. data/snapshot/lib/snapshot/simulator_launchers/simulator_launcher_base.rb +5 -1
  43. data/spaceship/lib/spaceship/portal/certificate.rb +4 -3
  44. data/trainer/lib/assets/junit.xml.erb +4 -1
  45. data/trainer/lib/trainer/.test_parser.rb.swp +0 -0
  46. data/trainer/lib/trainer/test_parser.rb +11 -2
  47. metadata +21 -22
  48. data/fastlane_core/lib/fastlane_core/.helper.rb.swp +0 -0
  49. data/scan/lib/scan/.detect_values.rb.swp +0 -0
  50. data/scan/lib/scan/.runner.rb.swp +0 -0
@@ -6643,8 +6643,9 @@ public func makeChangelogFromJenkins(fallbackChangelog: String = "",
6643
6643
  - force: Renew the provisioning profiles every time you run match
6644
6644
  - forceForNewDevices: Renew the provisioning profiles if the device count on the developer portal has changed. Ignored for profile types 'appstore' and 'developer_id'
6645
6645
  - includeAllCertificates: Include all matching certificates in the provisioning profile. Works only for the 'development' provisioning profile type
6646
- - forceForNewCertificates: Renew the provisioning profiles if the device count on the developer portal has changed. Works only for the 'development' provisioning profile type. Requires 'include_all_certificates' option to be 'true'
6646
+ - forceForNewCertificates: Renew the provisioning profiles if the certificate count on the developer portal has changed. Works only for the 'development' provisioning profile type. Requires 'include_all_certificates' option to be 'true'
6647
6647
  - skipConfirmation: Disables confirmation prompts during nuke, answering them with yes
6648
+ - safeRemoveCerts: Remove certs from repository during nuke without revoking them on the developer portal
6648
6649
  - skipDocs: Skip generation of a README.md for the created git repository
6649
6650
  - platform: Set the provisioning profile's platform to work with (i.e. ios, tvos, macos, catalyst)
6650
6651
  - deriveCatalystAppIdentifier: Enable this if you have the Mac Catalyst capability enabled and your project was created with Xcode 11.3 or earlier. Prepends 'maccatalyst.' to the app identifier for the provisioning profile mapping
@@ -6694,6 +6695,7 @@ public func match(type: String = matchfile.type,
6694
6695
  includeAllCertificates: OptionalConfigValue<Bool> = .fastlaneDefault(matchfile.includeAllCertificates),
6695
6696
  forceForNewCertificates: OptionalConfigValue<Bool> = .fastlaneDefault(matchfile.forceForNewCertificates),
6696
6697
  skipConfirmation: OptionalConfigValue<Bool> = .fastlaneDefault(matchfile.skipConfirmation),
6698
+ safeRemoveCerts: OptionalConfigValue<Bool> = .fastlaneDefault(matchfile.safeRemoveCerts),
6697
6699
  skipDocs: OptionalConfigValue<Bool> = .fastlaneDefault(matchfile.skipDocs),
6698
6700
  platform: String = matchfile.platform,
6699
6701
  deriveCatalystAppIdentifier: OptionalConfigValue<Bool> = .fastlaneDefault(matchfile.deriveCatalystAppIdentifier),
@@ -6741,6 +6743,7 @@ public func match(type: String = matchfile.type,
6741
6743
  let includeAllCertificatesArg = includeAllCertificates.asRubyArgument(name: "include_all_certificates", type: nil)
6742
6744
  let forceForNewCertificatesArg = forceForNewCertificates.asRubyArgument(name: "force_for_new_certificates", type: nil)
6743
6745
  let skipConfirmationArg = skipConfirmation.asRubyArgument(name: "skip_confirmation", type: nil)
6746
+ let safeRemoveCertsArg = safeRemoveCerts.asRubyArgument(name: "safe_remove_certs", type: nil)
6744
6747
  let skipDocsArg = skipDocs.asRubyArgument(name: "skip_docs", type: nil)
6745
6748
  let platformArg = RubyCommand.Argument(name: "platform", value: platform, type: nil)
6746
6749
  let deriveCatalystAppIdentifierArg = deriveCatalystAppIdentifier.asRubyArgument(name: "derive_catalyst_app_identifier", type: nil)
@@ -6787,6 +6790,7 @@ public func match(type: String = matchfile.type,
6787
6790
  includeAllCertificatesArg,
6788
6791
  forceForNewCertificatesArg,
6789
6792
  skipConfirmationArg,
6793
+ safeRemoveCertsArg,
6790
6794
  skipDocsArg,
6791
6795
  platformArg,
6792
6796
  deriveCatalystAppIdentifierArg,
@@ -6842,8 +6846,9 @@ public func match(type: String = matchfile.type,
6842
6846
  - force: Renew the provisioning profiles every time you run match
6843
6847
  - forceForNewDevices: Renew the provisioning profiles if the device count on the developer portal has changed. Ignored for profile types 'appstore' and 'developer_id'
6844
6848
  - includeAllCertificates: Include all matching certificates in the provisioning profile. Works only for the 'development' provisioning profile type
6845
- - forceForNewCertificates: Renew the provisioning profiles if the device count on the developer portal has changed. Works only for the 'development' provisioning profile type. Requires 'include_all_certificates' option to be 'true'
6849
+ - forceForNewCertificates: Renew the provisioning profiles if the certificate count on the developer portal has changed. Works only for the 'development' provisioning profile type. Requires 'include_all_certificates' option to be 'true'
6846
6850
  - skipConfirmation: Disables confirmation prompts during nuke, answering them with yes
6851
+ - safeRemoveCerts: Remove certs from repository during nuke without revoking them on the developer portal
6847
6852
  - skipDocs: Skip generation of a README.md for the created git repository
6848
6853
  - platform: Set the provisioning profile's platform to work with (i.e. ios, tvos, macos, catalyst)
6849
6854
  - deriveCatalystAppIdentifier: Enable this if you have the Mac Catalyst capability enabled and your project was created with Xcode 11.3 or earlier. Prepends 'maccatalyst.' to the app identifier for the provisioning profile mapping
@@ -6897,6 +6902,7 @@ public func matchNuke(type: String = "development",
6897
6902
  includeAllCertificates: OptionalConfigValue<Bool> = .fastlaneDefault(false),
6898
6903
  forceForNewCertificates: OptionalConfigValue<Bool> = .fastlaneDefault(false),
6899
6904
  skipConfirmation: OptionalConfigValue<Bool> = .fastlaneDefault(false),
6905
+ safeRemoveCerts: OptionalConfigValue<Bool> = .fastlaneDefault(false),
6900
6906
  skipDocs: OptionalConfigValue<Bool> = .fastlaneDefault(false),
6901
6907
  platform: String = "ios",
6902
6908
  deriveCatalystAppIdentifier: OptionalConfigValue<Bool> = .fastlaneDefault(false),
@@ -6944,6 +6950,7 @@ public func matchNuke(type: String = "development",
6944
6950
  let includeAllCertificatesArg = includeAllCertificates.asRubyArgument(name: "include_all_certificates", type: nil)
6945
6951
  let forceForNewCertificatesArg = forceForNewCertificates.asRubyArgument(name: "force_for_new_certificates", type: nil)
6946
6952
  let skipConfirmationArg = skipConfirmation.asRubyArgument(name: "skip_confirmation", type: nil)
6953
+ let safeRemoveCertsArg = safeRemoveCerts.asRubyArgument(name: "safe_remove_certs", type: nil)
6947
6954
  let skipDocsArg = skipDocs.asRubyArgument(name: "skip_docs", type: nil)
6948
6955
  let platformArg = RubyCommand.Argument(name: "platform", value: platform, type: nil)
6949
6956
  let deriveCatalystAppIdentifierArg = deriveCatalystAppIdentifier.asRubyArgument(name: "derive_catalyst_app_identifier", type: nil)
@@ -6990,6 +6997,7 @@ public func matchNuke(type: String = "development",
6990
6997
  includeAllCertificatesArg,
6991
6998
  forceForNewCertificatesArg,
6992
6999
  skipConfirmationArg,
7000
+ safeRemoveCertsArg,
6993
7001
  skipDocsArg,
6994
7002
  platformArg,
6995
7003
  deriveCatalystAppIdentifierArg,
@@ -7562,6 +7570,7 @@ public func pem(platform: String = "ios",
7562
7570
  - waitProcessingTimeoutDuration: Timeout duration in seconds to wait for App Store Connect processing. If set, after exceeding timeout duration, this will `force stop` to wait for App Store Connect processing and exit with exception
7563
7571
  - waitForUploadedBuild: **DEPRECATED!** No longer needed with the transition over to the App Store Connect API - Use version info from uploaded ipa file to determine what build to use for distribution. If set to false, latest processing or any latest build will be used
7564
7572
  - rejectBuildWaitingForReview: Expire previous if it's 'waiting for review'
7573
+ - submitBetaReview: Send the build for a beta review
7565
7574
 
7566
7575
  More details can be found on https://docs.fastlane.tools/actions/pilot/.
7567
7576
  This integration will only do the TestFlight upload.
@@ -7603,7 +7612,8 @@ public func pilot(apiKeyPath: OptionalConfigValue<String?> = .fastlaneDefault(ni
7603
7612
  waitProcessingInterval: Int = 30,
7604
7613
  waitProcessingTimeoutDuration: OptionalConfigValue<Int?> = .fastlaneDefault(nil),
7605
7614
  waitForUploadedBuild: OptionalConfigValue<Bool> = .fastlaneDefault(false),
7606
- rejectBuildWaitingForReview: OptionalConfigValue<Bool> = .fastlaneDefault(false))
7615
+ rejectBuildWaitingForReview: OptionalConfigValue<Bool> = .fastlaneDefault(false),
7616
+ submitBetaReview: OptionalConfigValue<Bool> = .fastlaneDefault(true))
7607
7617
  {
7608
7618
  let apiKeyPathArg = apiKeyPath.asRubyArgument(name: "api_key_path", type: nil)
7609
7619
  let apiKeyArg = apiKey.asRubyArgument(name: "api_key", type: nil)
@@ -7643,6 +7653,7 @@ public func pilot(apiKeyPath: OptionalConfigValue<String?> = .fastlaneDefault(ni
7643
7653
  let waitProcessingTimeoutDurationArg = waitProcessingTimeoutDuration.asRubyArgument(name: "wait_processing_timeout_duration", type: nil)
7644
7654
  let waitForUploadedBuildArg = waitForUploadedBuild.asRubyArgument(name: "wait_for_uploaded_build", type: nil)
7645
7655
  let rejectBuildWaitingForReviewArg = rejectBuildWaitingForReview.asRubyArgument(name: "reject_build_waiting_for_review", type: nil)
7656
+ let submitBetaReviewArg = submitBetaReview.asRubyArgument(name: "submit_beta_review", type: nil)
7646
7657
  let array: [RubyCommand.Argument?] = [apiKeyPathArg,
7647
7658
  apiKeyArg,
7648
7659
  usernameArg,
@@ -7680,7 +7691,8 @@ public func pilot(apiKeyPath: OptionalConfigValue<String?> = .fastlaneDefault(ni
7680
7691
  waitProcessingIntervalArg,
7681
7692
  waitProcessingTimeoutDurationArg,
7682
7693
  waitForUploadedBuildArg,
7683
- rejectBuildWaitingForReviewArg]
7694
+ rejectBuildWaitingForReviewArg,
7695
+ submitBetaReviewArg]
7684
7696
  let args: [RubyCommand.Argument] = array
7685
7697
  .filter { $0?.value != nil }
7686
7698
  .compactMap { $0 }
@@ -8228,7 +8240,7 @@ public func puts(message: OptionalConfigValue<String?> = .fastlaneDefault(nil))
8228
8240
  This can be useful when basing your release process on the version string only stored in one place - in the podspec.
8229
8241
  As one of the first steps you'd read the podspec and its version and the rest of the workflow can use that version string (when e.g. creating a new git tag or a GitHub Release).
8230
8242
  */
8231
- @discardableResult public func readPodspec(path: String) -> [String: String] {
8243
+ @discardableResult public func readPodspec(path: String) -> [String: Any] {
8232
8244
  let pathArg = RubyCommand.Argument(name: "path", value: path, type: nil)
8233
8245
  let array: [RubyCommand.Argument?] = [pathArg]
8234
8246
  let args: [RubyCommand.Argument] = array
@@ -11024,8 +11036,9 @@ public func swiftlint(mode: String = "lint",
11024
11036
  - force: Renew the provisioning profiles every time you run match
11025
11037
  - forceForNewDevices: Renew the provisioning profiles if the device count on the developer portal has changed. Ignored for profile types 'appstore' and 'developer_id'
11026
11038
  - includeAllCertificates: Include all matching certificates in the provisioning profile. Works only for the 'development' provisioning profile type
11027
- - forceForNewCertificates: Renew the provisioning profiles if the device count on the developer portal has changed. Works only for the 'development' provisioning profile type. Requires 'include_all_certificates' option to be 'true'
11039
+ - forceForNewCertificates: Renew the provisioning profiles if the certificate count on the developer portal has changed. Works only for the 'development' provisioning profile type. Requires 'include_all_certificates' option to be 'true'
11028
11040
  - skipConfirmation: Disables confirmation prompts during nuke, answering them with yes
11041
+ - safeRemoveCerts: Remove certs from repository during nuke without revoking them on the developer portal
11029
11042
  - skipDocs: Skip generation of a README.md for the created git repository
11030
11043
  - platform: Set the provisioning profile's platform to work with (i.e. ios, tvos, macos, catalyst)
11031
11044
  - deriveCatalystAppIdentifier: Enable this if you have the Mac Catalyst capability enabled and your project was created with Xcode 11.3 or earlier. Prepends 'maccatalyst.' to the app identifier for the provisioning profile mapping
@@ -11075,6 +11088,7 @@ public func syncCodeSigning(type: String = "development",
11075
11088
  includeAllCertificates: OptionalConfigValue<Bool> = .fastlaneDefault(false),
11076
11089
  forceForNewCertificates: OptionalConfigValue<Bool> = .fastlaneDefault(false),
11077
11090
  skipConfirmation: OptionalConfigValue<Bool> = .fastlaneDefault(false),
11091
+ safeRemoveCerts: OptionalConfigValue<Bool> = .fastlaneDefault(false),
11078
11092
  skipDocs: OptionalConfigValue<Bool> = .fastlaneDefault(false),
11079
11093
  platform: String = "ios",
11080
11094
  deriveCatalystAppIdentifier: OptionalConfigValue<Bool> = .fastlaneDefault(false),
@@ -11122,6 +11136,7 @@ public func syncCodeSigning(type: String = "development",
11122
11136
  let includeAllCertificatesArg = includeAllCertificates.asRubyArgument(name: "include_all_certificates", type: nil)
11123
11137
  let forceForNewCertificatesArg = forceForNewCertificates.asRubyArgument(name: "force_for_new_certificates", type: nil)
11124
11138
  let skipConfirmationArg = skipConfirmation.asRubyArgument(name: "skip_confirmation", type: nil)
11139
+ let safeRemoveCertsArg = safeRemoveCerts.asRubyArgument(name: "safe_remove_certs", type: nil)
11125
11140
  let skipDocsArg = skipDocs.asRubyArgument(name: "skip_docs", type: nil)
11126
11141
  let platformArg = RubyCommand.Argument(name: "platform", value: platform, type: nil)
11127
11142
  let deriveCatalystAppIdentifierArg = deriveCatalystAppIdentifier.asRubyArgument(name: "derive_catalyst_app_identifier", type: nil)
@@ -11168,6 +11183,7 @@ public func syncCodeSigning(type: String = "development",
11168
11183
  includeAllCertificatesArg,
11169
11184
  forceForNewCertificatesArg,
11170
11185
  skipConfirmationArg,
11186
+ safeRemoveCertsArg,
11171
11187
  skipDocsArg,
11172
11188
  platformArg,
11173
11189
  deriveCatalystAppIdentifierArg,
@@ -11312,6 +11328,7 @@ public func testfairy(apiKey: String,
11312
11328
  - waitProcessingTimeoutDuration: Timeout duration in seconds to wait for App Store Connect processing. If set, after exceeding timeout duration, this will `force stop` to wait for App Store Connect processing and exit with exception
11313
11329
  - waitForUploadedBuild: **DEPRECATED!** No longer needed with the transition over to the App Store Connect API - Use version info from uploaded ipa file to determine what build to use for distribution. If set to false, latest processing or any latest build will be used
11314
11330
  - rejectBuildWaitingForReview: Expire previous if it's 'waiting for review'
11331
+ - submitBetaReview: Send the build for a beta review
11315
11332
 
11316
11333
  More details can be found on https://docs.fastlane.tools/actions/pilot/.
11317
11334
  This integration will only do the TestFlight upload.
@@ -11353,7 +11370,8 @@ public func testflight(apiKeyPath: OptionalConfigValue<String?> = .fastlaneDefau
11353
11370
  waitProcessingInterval: Int = 30,
11354
11371
  waitProcessingTimeoutDuration: OptionalConfigValue<Int?> = .fastlaneDefault(nil),
11355
11372
  waitForUploadedBuild: OptionalConfigValue<Bool> = .fastlaneDefault(false),
11356
- rejectBuildWaitingForReview: OptionalConfigValue<Bool> = .fastlaneDefault(false))
11373
+ rejectBuildWaitingForReview: OptionalConfigValue<Bool> = .fastlaneDefault(false),
11374
+ submitBetaReview: OptionalConfigValue<Bool> = .fastlaneDefault(true))
11357
11375
  {
11358
11376
  let apiKeyPathArg = apiKeyPath.asRubyArgument(name: "api_key_path", type: nil)
11359
11377
  let apiKeyArg = apiKey.asRubyArgument(name: "api_key", type: nil)
@@ -11393,6 +11411,7 @@ public func testflight(apiKeyPath: OptionalConfigValue<String?> = .fastlaneDefau
11393
11411
  let waitProcessingTimeoutDurationArg = waitProcessingTimeoutDuration.asRubyArgument(name: "wait_processing_timeout_duration", type: nil)
11394
11412
  let waitForUploadedBuildArg = waitForUploadedBuild.asRubyArgument(name: "wait_for_uploaded_build", type: nil)
11395
11413
  let rejectBuildWaitingForReviewArg = rejectBuildWaitingForReview.asRubyArgument(name: "reject_build_waiting_for_review", type: nil)
11414
+ let submitBetaReviewArg = submitBetaReview.asRubyArgument(name: "submit_beta_review", type: nil)
11396
11415
  let array: [RubyCommand.Argument?] = [apiKeyPathArg,
11397
11416
  apiKeyArg,
11398
11417
  usernameArg,
@@ -11430,7 +11449,8 @@ public func testflight(apiKeyPath: OptionalConfigValue<String?> = .fastlaneDefau
11430
11449
  waitProcessingIntervalArg,
11431
11450
  waitProcessingTimeoutDurationArg,
11432
11451
  waitForUploadedBuildArg,
11433
- rejectBuildWaitingForReviewArg]
11452
+ rejectBuildWaitingForReviewArg,
11453
+ submitBetaReviewArg]
11434
11454
  let args: [RubyCommand.Argument] = array
11435
11455
  .filter { $0?.value != nil }
11436
11456
  .compactMap { $0 }
@@ -12707,6 +12727,7 @@ public func uploadToPlayStoreInternalAppSharing(packageName: String,
12707
12727
  - waitProcessingTimeoutDuration: Timeout duration in seconds to wait for App Store Connect processing. If set, after exceeding timeout duration, this will `force stop` to wait for App Store Connect processing and exit with exception
12708
12728
  - waitForUploadedBuild: **DEPRECATED!** No longer needed with the transition over to the App Store Connect API - Use version info from uploaded ipa file to determine what build to use for distribution. If set to false, latest processing or any latest build will be used
12709
12729
  - rejectBuildWaitingForReview: Expire previous if it's 'waiting for review'
12730
+ - submitBetaReview: Send the build for a beta review
12710
12731
 
12711
12732
  More details can be found on https://docs.fastlane.tools/actions/pilot/.
12712
12733
  This integration will only do the TestFlight upload.
@@ -12748,7 +12769,8 @@ public func uploadToTestflight(apiKeyPath: OptionalConfigValue<String?> = .fastl
12748
12769
  waitProcessingInterval: Int = 30,
12749
12770
  waitProcessingTimeoutDuration: OptionalConfigValue<Int?> = .fastlaneDefault(nil),
12750
12771
  waitForUploadedBuild: OptionalConfigValue<Bool> = .fastlaneDefault(false),
12751
- rejectBuildWaitingForReview: OptionalConfigValue<Bool> = .fastlaneDefault(false))
12772
+ rejectBuildWaitingForReview: OptionalConfigValue<Bool> = .fastlaneDefault(false),
12773
+ submitBetaReview: OptionalConfigValue<Bool> = .fastlaneDefault(true))
12752
12774
  {
12753
12775
  let apiKeyPathArg = apiKeyPath.asRubyArgument(name: "api_key_path", type: nil)
12754
12776
  let apiKeyArg = apiKey.asRubyArgument(name: "api_key", type: nil)
@@ -12788,6 +12810,7 @@ public func uploadToTestflight(apiKeyPath: OptionalConfigValue<String?> = .fastl
12788
12810
  let waitProcessingTimeoutDurationArg = waitProcessingTimeoutDuration.asRubyArgument(name: "wait_processing_timeout_duration", type: nil)
12789
12811
  let waitForUploadedBuildArg = waitForUploadedBuild.asRubyArgument(name: "wait_for_uploaded_build", type: nil)
12790
12812
  let rejectBuildWaitingForReviewArg = rejectBuildWaitingForReview.asRubyArgument(name: "reject_build_waiting_for_review", type: nil)
12813
+ let submitBetaReviewArg = submitBetaReview.asRubyArgument(name: "submit_beta_review", type: nil)
12791
12814
  let array: [RubyCommand.Argument?] = [apiKeyPathArg,
12792
12815
  apiKeyArg,
12793
12816
  usernameArg,
@@ -12825,7 +12848,8 @@ public func uploadToTestflight(apiKeyPath: OptionalConfigValue<String?> = .fastl
12825
12848
  waitProcessingIntervalArg,
12826
12849
  waitProcessingTimeoutDurationArg,
12827
12850
  waitForUploadedBuildArg,
12828
- rejectBuildWaitingForReviewArg]
12851
+ rejectBuildWaitingForReviewArg,
12852
+ submitBetaReviewArg]
12829
12853
  let args: [RubyCommand.Argument] = array
12830
12854
  .filter { $0?.value != nil }
12831
12855
  .compactMap { $0 }
@@ -13406,4 +13430,4 @@ public let snapshotfile: Snapshotfile = .init()
13406
13430
 
13407
13431
  // Please don't remove the lines below
13408
13432
  // They are used to detect outdated files
13409
- // FastlaneRunnerAPIVersion [0.9.148]
13433
+ // FastlaneRunnerAPIVersion [0.9.152]
@@ -10,6 +10,7 @@
10
10
  0311E387230AC1B20060BB5C /* Plugins.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0311E386230AC1B20060BB5C /* Plugins.swift */; };
11
11
  0311E38B230AC9490060BB5C /* Actions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0311E38A230AC9490060BB5C /* Actions.swift */; };
12
12
  1257253924B7992C00E04FA3 /* main.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1257253824B7992B00E04FA3 /* main.swift */; };
13
+ 1267C3F42773A43E004DE48A /* Atomic.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1267C3F32773A43E004DE48A /* Atomic.swift */; };
13
14
  12D2EB8D2620D83C00844013 /* OptionalConfigValue.swift in Sources */ = {isa = PBXBuildFile; fileRef = 12D2EB8C2620D83B00844013 /* OptionalConfigValue.swift */; };
14
15
  B302067B1F5E3E9000DE6EBD /* SnapshotfileProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = B30206741F5E3E9000DE6EBD /* SnapshotfileProtocol.swift */; };
15
16
  B302067C1F5E3E9000DE6EBD /* GymfileProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = B30206751F5E3E9000DE6EBD /* GymfileProtocol.swift */; };
@@ -26,6 +27,7 @@
26
27
  B3BA65AC1F5A269100B34850 /* SocketClientDelegateProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = B3BA65A31F5A269100B34850 /* SocketClientDelegateProtocol.swift */; };
27
28
  B3BA65AD1F5A269100B34850 /* SocketResponse.swift in Sources */ = {isa = PBXBuildFile; fileRef = B3BA65A41F5A269100B34850 /* SocketResponse.swift */; };
28
29
  B3BA65AF1F5A2D5C00B34850 /* RunnerArgument.swift in Sources */ = {isa = PBXBuildFile; fileRef = B3BA65AE1F5A2D5C00B34850 /* RunnerArgument.swift */; };
30
+ C0459CAC27261897002CDFB9 /* FastlaneRunner in CopyFiles */ = {isa = PBXBuildFile; fileRef = D556D6A91F6A08F5003108E3 /* FastlaneRunner */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; };
29
31
  D55B28C31F6C588300DC42C5 /* Deliverfile.swift in Sources */ = {isa = PBXBuildFile; fileRef = D55B28BC1F6C588300DC42C5 /* Deliverfile.swift */; };
30
32
  D55B28C41F6C588300DC42C5 /* Gymfile.swift in Sources */ = {isa = PBXBuildFile; fileRef = D55B28BD1F6C588300DC42C5 /* Gymfile.swift */; };
31
33
  D55B28C51F6C588300DC42C5 /* Matchfile.swift in Sources */ = {isa = PBXBuildFile; fileRef = D55B28BE1F6C588300DC42C5 /* Matchfile.swift */; };
@@ -40,10 +42,24 @@
40
42
  D5D1DE991FFEE8EA00502A00 /* RubyCommandable.swift in Sources */ = {isa = PBXBuildFile; fileRef = D5D1DE981FFEE8E900502A00 /* RubyCommandable.swift */; };
41
43
  /* End PBXBuildFile section */
42
44
 
45
+ /* Begin PBXCopyFilesBuildPhase section */
46
+ C0459CAB27261886002CDFB9 /* CopyFiles */ = {
47
+ isa = PBXCopyFilesBuildPhase;
48
+ buildActionMask = 2147483647;
49
+ dstPath = $SRCROOT/../..;
50
+ dstSubfolderSpec = 0;
51
+ files = (
52
+ C0459CAC27261897002CDFB9 /* FastlaneRunner in CopyFiles */,
53
+ );
54
+ runOnlyForDeploymentPostprocessing = 0;
55
+ };
56
+ /* End PBXCopyFilesBuildPhase section */
57
+
43
58
  /* Begin PBXFileReference section */
44
59
  0311E386230AC1B20060BB5C /* Plugins.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = Plugins.swift; path = ../Plugins.swift; sourceTree = "<group>"; };
45
60
  0311E38A230AC9490060BB5C /* Actions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = Actions.swift; path = ../Actions.swift; sourceTree = "<group>"; };
46
61
  1257253824B7992B00E04FA3 /* main.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = main.swift; path = ../main.swift; sourceTree = "<group>"; };
62
+ 1267C3F32773A43E004DE48A /* Atomic.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = Atomic.swift; path = ../Atomic.swift; sourceTree = "<group>"; };
47
63
  12D2EB8C2620D83B00844013 /* OptionalConfigValue.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = OptionalConfigValue.swift; path = ../OptionalConfigValue.swift; sourceTree = "<group>"; };
48
64
  B30206741F5E3E9000DE6EBD /* SnapshotfileProtocol.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = SnapshotfileProtocol.swift; path = ../SnapshotfileProtocol.swift; sourceTree = "<group>"; };
49
65
  B30206751F5E3E9000DE6EBD /* GymfileProtocol.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = GymfileProtocol.swift; path = ../GymfileProtocol.swift; sourceTree = "<group>"; };
@@ -121,6 +137,7 @@
121
137
  B3BA65B11F5A325E00B34850 /* Networking */ = {
122
138
  isa = PBXGroup;
123
139
  children = (
140
+ 1267C3F32773A43E004DE48A /* Atomic.swift */,
124
141
  B3144C072005533400470AFE /* README.txt */,
125
142
  D5B8A5B21FFDC49D00536B24 /* ControlCommand.swift */,
126
143
  B3BA65A01F5A269100B34850 /* RubyCommand.swift */,
@@ -181,7 +198,7 @@
181
198
  buildPhases = (
182
199
  B33BAF531F51F8D90001A751 /* Sources */,
183
200
  B33BAF541F51F8D90001A751 /* Frameworks */,
184
- D529C72B1F68BB1C0036536D /* ShellScript */,
201
+ C0459CAB27261886002CDFB9 /* CopyFiles */,
185
202
  );
186
203
  buildRules = (
187
204
  );
@@ -199,7 +216,7 @@
199
216
  isa = PBXProject;
200
217
  attributes = {
201
218
  LastSwiftUpdateCheck = 0830;
202
- LastUpgradeCheck = 0900;
219
+ LastUpgradeCheck = 1300;
203
220
  ORGANIZATIONNAME = "Joshua Liebowitz";
204
221
  TargetAttributes = {
205
222
  B33BAF561F51F8D90001A751 = {
@@ -211,11 +228,11 @@
211
228
  };
212
229
  buildConfigurationList = B33BAF521F51F8D90001A751 /* Build configuration list for PBXProject "FastlaneSwiftRunner" */;
213
230
  compatibilityVersion = "Xcode 3.2";
214
- developmentRegion = English;
231
+ developmentRegion = en;
215
232
  hasScannedForEncodings = 0;
216
233
  knownRegions = (
217
- English,
218
234
  en,
235
+ Base,
219
236
  );
220
237
  mainGroup = B33BAF4E1F51F8D90001A751;
221
238
  productRefGroup = B33BAF4E1F51F8D90001A751;
@@ -227,22 +244,6 @@
227
244
  };
228
245
  /* End PBXProject section */
229
246
 
230
- /* Begin PBXShellScriptBuildPhase section */
231
- D529C72B1F68BB1C0036536D /* ShellScript */ = {
232
- isa = PBXShellScriptBuildPhase;
233
- buildActionMask = 2147483647;
234
- files = (
235
- );
236
- inputPaths = (
237
- );
238
- outputPaths = (
239
- );
240
- runOnlyForDeploymentPostprocessing = 0;
241
- shellPath = /bin/sh;
242
- shellScript = "cd \"${SRCROOT}\"\ncd ../..\ncp \"${TARGET_BUILD_DIR}/${EXECUTABLE_PATH}\" .\n";
243
- };
244
- /* End PBXShellScriptBuildPhase section */
245
-
246
247
  /* Begin PBXSourcesBuildPhase section */
247
248
  B33BAF531F51F8D90001A751 /* Sources */ = {
248
249
  isa = PBXSourcesBuildPhase;
@@ -252,6 +253,7 @@
252
253
  D5D1DE991FFEE8EA00502A00 /* RubyCommandable.swift in Sources */,
253
254
  D55B28C41F6C588300DC42C5 /* Gymfile.swift in Sources */,
254
255
  B302067D1F5E3E9000DE6EBD /* MatchfileProtocol.swift in Sources */,
256
+ 1267C3F42773A43E004DE48A /* Atomic.swift in Sources */,
255
257
  B3BA65AC1F5A269100B34850 /* SocketClientDelegateProtocol.swift in Sources */,
256
258
  B3BA65A71F5A269100B34850 /* LaneFileProtocol.swift in Sources */,
257
259
  D55B28C61F6C588300DC42C5 /* Precheckfile.swift in Sources */,
@@ -299,6 +301,7 @@
299
301
  CLANG_WARN_BOOL_CONVERSION = YES;
300
302
  CLANG_WARN_COMMA = YES;
301
303
  CLANG_WARN_CONSTANT_CONVERSION = YES;
304
+ CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
302
305
  CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
303
306
  CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
304
307
  CLANG_WARN_EMPTY_BODY = YES;
@@ -306,8 +309,10 @@
306
309
  CLANG_WARN_INFINITE_RECURSION = YES;
307
310
  CLANG_WARN_INT_CONVERSION = YES;
308
311
  CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
312
+ CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
309
313
  CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
310
314
  CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
315
+ CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
311
316
  CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
312
317
  CLANG_WARN_STRICT_PROTOTYPES = YES;
313
318
  CLANG_WARN_SUSPICIOUS_MOVE = YES;
@@ -355,6 +360,7 @@
355
360
  CLANG_WARN_BOOL_CONVERSION = YES;
356
361
  CLANG_WARN_COMMA = YES;
357
362
  CLANG_WARN_CONSTANT_CONVERSION = YES;
363
+ CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
358
364
  CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
359
365
  CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
360
366
  CLANG_WARN_EMPTY_BODY = YES;
@@ -362,8 +368,10 @@
362
368
  CLANG_WARN_INFINITE_RECURSION = YES;
363
369
  CLANG_WARN_INT_CONVERSION = YES;
364
370
  CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
371
+ CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
365
372
  CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
366
373
  CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
374
+ CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
367
375
  CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
368
376
  CLANG_WARN_STRICT_PROTOTYPES = YES;
369
377
  CLANG_WARN_SUSPICIOUS_MOVE = YES;
@@ -394,6 +402,7 @@
394
402
  isa = XCBuildConfiguration;
395
403
  buildSettings = {
396
404
  CLANG_ENABLE_MODULES = YES;
405
+ CODE_SIGN_IDENTITY = "-";
397
406
  LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/../Frameworks";
398
407
  PRODUCT_NAME = "$(TARGET_NAME)";
399
408
  SWIFT_OPTIMIZATION_LEVEL = "-Onone";
@@ -405,6 +414,7 @@
405
414
  isa = XCBuildConfiguration;
406
415
  buildSettings = {
407
416
  CLANG_ENABLE_MODULES = YES;
417
+ CODE_SIGN_IDENTITY = "-";
408
418
  LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/../Frameworks";
409
419
  PRODUCT_NAME = "$(TARGET_NAME)";
410
420
  SWIFT_VERSION = 4.0;
@@ -1,6 +1,6 @@
1
1
  <?xml version="1.0" encoding="UTF-8"?>
2
2
  <Scheme
3
- LastUpgradeVersion = "0900"
3
+ LastUpgradeVersion = "1300"
4
4
  version = "1.3">
5
5
  <BuildAction
6
6
  parallelizeBuildables = "YES"
@@ -17,4 +17,4 @@ public class Gymfile: GymfileProtocol {
17
17
  // during the `init` process, and you won't see this message
18
18
  }
19
19
 
20
- // Generated with fastlane 2.203.0
20
+ // Generated with fastlane 2.204.3
@@ -1,7 +1,7 @@
1
1
  // GymfileProtocol.swift
2
2
  // Copyright (c) 2022 FastlaneTools
3
3
 
4
- public protocol GymfileProtocol: class {
4
+ public protocol GymfileProtocol: AnyObject {
5
5
  /// Path to the workspace file
6
6
  var workspace: String? { get }
7
7
 
@@ -204,4 +204,4 @@ public extension GymfileProtocol {
204
204
 
205
205
  // Please don't remove the lines below
206
206
  // They are used to detect outdated files
207
- // FastlaneRunnerAPIVersion [0.9.98]
207
+ // FastlaneRunnerAPIVersion [0.9.102]
@@ -10,7 +10,7 @@
10
10
 
11
11
  import Foundation
12
12
 
13
- public protocol LaneFileProtocol: class {
13
+ public protocol LaneFileProtocol: AnyObject {
14
14
  var fastlaneVersion: String { get }
15
15
  static func runLane(from fastfile: LaneFile?, named lane: String, with parameters: [String: String]) -> Bool
16
16
 
@@ -17,4 +17,4 @@ public class Matchfile: MatchfileProtocol {
17
17
  // during the `init` process, and you won't see this message
18
18
  }
19
19
 
20
- // Generated with fastlane 2.203.0
20
+ // Generated with fastlane 2.204.3
@@ -1,7 +1,7 @@
1
1
  // MatchfileProtocol.swift
2
2
  // Copyright (c) 2022 FastlaneTools
3
3
 
4
- public protocol MatchfileProtocol: class {
4
+ public protocol MatchfileProtocol: AnyObject {
5
5
  /// Define the profile type, can be appstore, adhoc, development, enterprise, developer_id, mac_installer_distribution
6
6
  var type: String { get }
7
7
 
@@ -104,12 +104,15 @@ public protocol MatchfileProtocol: class {
104
104
  /// Include all matching certificates in the provisioning profile. Works only for the 'development' provisioning profile type
105
105
  var includeAllCertificates: Bool { get }
106
106
 
107
- /// Renew the provisioning profiles if the device count on the developer portal has changed. Works only for the 'development' provisioning profile type. Requires 'include_all_certificates' option to be 'true'
107
+ /// Renew the provisioning profiles if the certificate count on the developer portal has changed. Works only for the 'development' provisioning profile type. Requires 'include_all_certificates' option to be 'true'
108
108
  var forceForNewCertificates: Bool { get }
109
109
 
110
110
  /// Disables confirmation prompts during nuke, answering them with yes
111
111
  var skipConfirmation: Bool { get }
112
112
 
113
+ /// Remove certs from repository during nuke without revoking them on the developer portal
114
+ var safeRemoveCerts: Bool { get }
115
+
113
116
  /// Skip generation of a README.md for the created git repository
114
117
  var skipDocs: Bool { get }
115
118
 
@@ -178,6 +181,7 @@ public extension MatchfileProtocol {
178
181
  var includeAllCertificates: Bool { return false }
179
182
  var forceForNewCertificates: Bool { return false }
180
183
  var skipConfirmation: Bool { return false }
184
+ var safeRemoveCerts: Bool { return false }
181
185
  var skipDocs: Bool { return false }
182
186
  var platform: String { return "ios" }
183
187
  var deriveCatalystAppIdentifier: Bool { return false }
@@ -192,4 +196,4 @@ public extension MatchfileProtocol {
192
196
 
193
197
  // Please don't remove the lines below
194
198
  // They are used to detect outdated files
195
- // FastlaneRunnerAPIVersion [0.9.92]
199
+ // FastlaneRunnerAPIVersion [0.9.96]
@@ -17,4 +17,4 @@ public class Precheckfile: PrecheckfileProtocol {
17
17
  // during the `init` process, and you won't see this message
18
18
  }
19
19
 
20
- // Generated with fastlane 2.203.0
20
+ // Generated with fastlane 2.204.3
@@ -1,7 +1,7 @@
1
1
  // PrecheckfileProtocol.swift
2
2
  // Copyright (c) 2022 FastlaneTools
3
3
 
4
- public protocol PrecheckfileProtocol: class {
4
+ public protocol PrecheckfileProtocol: AnyObject {
5
5
  /// Path to your App Store Connect API Key JSON file (https://docs.fastlane.tools/app-store-connect-api/#using-fastlane-api-key-json-file)
6
6
  var apiKeyPath: String? { get }
7
7
 
@@ -52,4 +52,4 @@ public extension PrecheckfileProtocol {
52
52
 
53
53
  // Please don't remove the lines below
54
54
  // They are used to detect outdated files
55
- // FastlaneRunnerAPIVersion [0.9.91]
55
+ // FastlaneRunnerAPIVersion [0.9.95]
@@ -25,7 +25,13 @@ class Runner {
25
25
  private var returnValue: String? // lol, so safe
26
26
  private var currentlyExecutingCommand: RubyCommandable?
27
27
  private var shouldLeaveDispatchGroupDuringDisconnect = false
28
- private var executeNext: [String: Bool] = [:]
28
+ private var executeNext: AtomicDictionary<String, Bool> = {
29
+ if #available(macOS 10.12, *) {
30
+ return UnfairAtomicDictionary<String, Bool>()
31
+ } else {
32
+ return OSSPinAtomicDictionary<String, Bool>()
33
+ }
34
+ }()
29
35
 
30
36
  func executeCommand(_ command: RubyCommandable) -> String {
31
37
  dispatchGroup.enter()
@@ -261,6 +267,8 @@ private extension DispatchTimeInterval {
261
267
  result = TimeInterval(value) * 0.000_000_001
262
268
  case .never:
263
269
  fatalError()
270
+ @unknown default:
271
+ fatalError()
264
272
  }
265
273
  return result
266
274
  }
@@ -17,4 +17,4 @@ public class Scanfile: ScanfileProtocol {
17
17
  // during the `init` process, and you won't see this message
18
18
  }
19
19
 
20
- // Generated with fastlane 2.203.0
20
+ // Generated with fastlane 2.204.3
@@ -1,7 +1,7 @@
1
1
  // ScanfileProtocol.swift
2
2
  // Copyright (c) 2022 FastlaneTools
3
3
 
4
- public protocol ScanfileProtocol: class {
4
+ public protocol ScanfileProtocol: AnyObject {
5
5
  /// Path to the workspace file
6
6
  var workspace: String? { get }
7
7
 
@@ -312,4 +312,4 @@ public extension ScanfileProtocol {
312
312
 
313
313
  // Please don't remove the lines below
314
314
  // They are used to detect outdated files
315
- // FastlaneRunnerAPIVersion [0.9.103]
315
+ // FastlaneRunnerAPIVersion [0.9.107]
@@ -17,4 +17,4 @@ public class Screengrabfile: ScreengrabfileProtocol {
17
17
  // during the `init` process, and you won't see this message
18
18
  }
19
19
 
20
- // Generated with fastlane 2.203.0
20
+ // Generated with fastlane 2.204.3
@@ -1,7 +1,7 @@
1
1
  // ScreengrabfileProtocol.swift
2
2
  // Copyright (c) 2022 FastlaneTools
3
3
 
4
- public protocol ScreengrabfileProtocol: class {
4
+ public protocol ScreengrabfileProtocol: AnyObject {
5
5
  /// Path to the root of your Android SDK installation, e.g. ~/tools/android-sdk-macosx
6
6
  var androidHome: String? { get }
7
7
 
@@ -96,4 +96,4 @@ public extension ScreengrabfileProtocol {
96
96
 
97
97
  // Please don't remove the lines below
98
98
  // They are used to detect outdated files
99
- // FastlaneRunnerAPIVersion [0.9.93]
99
+ // FastlaneRunnerAPIVersion [0.9.97]
@@ -17,4 +17,4 @@ public class Snapshotfile: SnapshotfileProtocol {
17
17
  // during the `init` process, and you won't see this message
18
18
  }
19
19
 
20
- // Generated with fastlane 2.203.0
20
+ // Generated with fastlane 2.204.3
@@ -1,7 +1,7 @@
1
1
  // SnapshotfileProtocol.swift
2
2
  // Copyright (c) 2022 FastlaneTools
3
3
 
4
- public protocol SnapshotfileProtocol: class {
4
+ public protocol SnapshotfileProtocol: AnyObject {
5
5
  /// Path the workspace file
6
6
  var workspace: String? { get }
7
7
 
@@ -204,4 +204,4 @@ public extension SnapshotfileProtocol {
204
204
 
205
205
  // Please don't remove the lines below
206
206
  // They are used to detect outdated files
207
- // FastlaneRunnerAPIVersion [0.9.87]
207
+ // FastlaneRunnerAPIVersion [0.9.91]
@@ -144,7 +144,11 @@ class SocketClient: NSObject {
144
144
 
145
145
  private func sendThroughQueue(string: String) {
146
146
  let data = string.data(using: .utf8)!
147
- _ = data.withUnsafeBytes { self.outputStream.write($0, maxLength: data.count) }
147
+ data.withUnsafeBytes { (buffer: UnsafeRawBufferPointer) in
148
+ if let buffer = buffer.baseAddress {
149
+ self.outputStream.write(buffer.assumingMemoryBound(to: UInt8.self), maxLength: data.count)
150
+ }
151
+ }
148
152
  }
149
153
 
150
154
  private func privateSend(string: String) {
@@ -10,7 +10,7 @@
10
10
 
11
11
  import Foundation
12
12
 
13
- protocol SocketClientDelegateProtocol: class {
13
+ protocol SocketClientDelegateProtocol: AnyObject {
14
14
  func connectionsOpened()
15
15
  func connectionsClosed()
16
16
  func commandExecuted(serverResponse: SocketClientResponse, completion: (SocketClient) -> Void)