codemagic-cli-tools 0.48.2__tar.gz → 0.50.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (413) hide show
  1. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/PKG-INFO +1 -1
  2. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/pyproject.toml +1 -1
  3. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/src/codemagic/__version__.py +1 -1
  4. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/src/codemagic/__version__.py-e +1 -1
  5. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/src/codemagic/apple/resources/bundle_id_capability.py +11 -0
  6. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/src/codemagic/apple/resources/enums.py +46 -2
  7. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/src/codemagic/cli/__init__.py +2 -1
  8. codemagic_cli_tools-0.50.0/src/codemagic/cli/action.py +99 -0
  9. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/src/codemagic/cli/argument/__init__.py +1 -0
  10. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/src/codemagic/cli/argument/action_callable.py +6 -1
  11. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/src/codemagic/cli/argument/argument_parser_builder.py +8 -3
  12. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/src/codemagic/cli/cli_app.py +6 -75
  13. codemagic_cli_tools-0.50.0/src/codemagic/tools/app_store_connect/__init__.py +1 -0
  14. codemagic_cli_tools-0.50.0/src/codemagic/tools/app_store_connect/__main__.py +4 -0
  15. {codemagic_cli_tools-0.48.2/src/codemagic/tools/_app_store_connect → codemagic_cli_tools-0.50.0/src/codemagic/tools/app_store_connect}/abstract_base_action.py +152 -4
  16. {codemagic_cli_tools-0.48.2/src/codemagic/tools/_app_store_connect → codemagic_cli_tools-0.50.0/src/codemagic/tools/app_store_connect}/action_group.py +16 -0
  17. {codemagic_cli_tools-0.48.2/src/codemagic/tools/_app_store_connect → codemagic_cli_tools-0.50.0/src/codemagic/tools/app_store_connect}/action_groups/__init__.py +4 -0
  18. {codemagic_cli_tools-0.48.2/src/codemagic/tools/_app_store_connect → codemagic_cli_tools-0.50.0/src/codemagic/tools/app_store_connect}/action_groups/builds_action_group.py +43 -0
  19. codemagic_cli_tools-0.50.0/src/codemagic/tools/app_store_connect/action_groups/bundle_ids_action_group.py +317 -0
  20. codemagic_cli_tools-0.50.0/src/codemagic/tools/app_store_connect/action_groups/certificates_action_group.py +228 -0
  21. codemagic_cli_tools-0.50.0/src/codemagic/tools/app_store_connect/action_groups/devices_action_group.py +114 -0
  22. codemagic_cli_tools-0.50.0/src/codemagic/tools/app_store_connect/action_groups/profiles_action_group.py +147 -0
  23. {codemagic_cli_tools-0.48.2/src/codemagic/tools/_app_store_connect → codemagic_cli_tools-0.50.0/src/codemagic/tools/app_store_connect}/actions/__init__.py +1 -0
  24. codemagic_cli_tools-0.50.0/src/codemagic/tools/app_store_connect/actions/fetch_signing_files_action.py +237 -0
  25. {codemagic_cli_tools-0.48.2/src/codemagic/tools/_app_store_connect → codemagic_cli_tools-0.50.0/src/codemagic/tools/app_store_connect}/actions/publish_action.py +1 -1
  26. codemagic_cli_tools-0.50.0/src/codemagic/tools/app_store_connect/app_store_connect.py +202 -0
  27. {codemagic_cli_tools-0.48.2/src/codemagic/tools/_app_store_connect → codemagic_cli_tools-0.50.0/src/codemagic/tools/app_store_connect}/arguments.py +12 -0
  28. codemagic_cli_tools-0.50.0/src/codemagic/tools/app_store_connect/mixins/__init__.py +2 -0
  29. {codemagic_cli_tools-0.48.2/src/codemagic/tools/_app_store_connect → codemagic_cli_tools-0.50.0/src/codemagic/tools/app_store_connect/mixins}/resource_manager_mixin.py +2 -2
  30. codemagic_cli_tools-0.50.0/src/codemagic/tools/app_store_connect/mixins/signing_file_saver_mixin.py +82 -0
  31. codemagic_cli_tools-0.50.0/tests/apple/resources/enums/test_capability_type.py +77 -0
  32. codemagic_cli_tools-0.50.0/tests/apple/resources/test_bundle_id_capability_resource.py +21 -0
  33. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/tests/tools/app_store_connect/arguments/test_beta_build_localizations.py +2 -2
  34. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/tests/tools/app_store_connect/conftest.py +4 -3
  35. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/tests/tools/app_store_connect/test_from_cli_args.py +6 -6
  36. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/tests/tools/app_store_connect/test_publish_action.py +6 -5
  37. codemagic_cli_tools-0.48.2/src/codemagic/tools/app_store_connect.py +0 -1091
  38. codemagic_cli_tools-0.48.2/tests/apple/resources/test_bundle_id_capability_resource.py +0 -8
  39. codemagic_cli_tools-0.48.2/tests/utilities/decorators/__init__.py +0 -0
  40. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/LICENSE +0 -0
  41. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/README.md +0 -0
  42. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/src/codemagic/__init__.py +0 -0
  43. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/src/codemagic/apple/__init__.py +0 -0
  44. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/src/codemagic/apple/app_store_connect/__init__.py +0 -0
  45. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/src/codemagic/apple/app_store_connect/api_client.py +0 -0
  46. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/src/codemagic/apple/app_store_connect/api_error.py +0 -0
  47. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/src/codemagic/apple/app_store_connect/api_session.py +0 -0
  48. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/src/codemagic/apple/app_store_connect/apps/__init__.py +0 -0
  49. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/src/codemagic/apple/app_store_connect/apps/apps.py +0 -0
  50. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/src/codemagic/apple/app_store_connect/builds/__init__.py +0 -0
  51. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/src/codemagic/apple/app_store_connect/builds/builds.py +0 -0
  52. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/src/codemagic/apple/app_store_connect/json_web_token_manager.py +0 -0
  53. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/src/codemagic/apple/app_store_connect/provisioning/__init__.py +0 -0
  54. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/src/codemagic/apple/app_store_connect/provisioning/bundle_id_capabilities.py +0 -0
  55. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/src/codemagic/apple/app_store_connect/provisioning/bundle_ids.py +0 -0
  56. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/src/codemagic/apple/app_store_connect/provisioning/devices.py +0 -0
  57. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/src/codemagic/apple/app_store_connect/provisioning/profiles.py +0 -0
  58. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/src/codemagic/apple/app_store_connect/provisioning/signing_certificates.py +0 -0
  59. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/src/codemagic/apple/app_store_connect/resource_manager.py +0 -0
  60. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/src/codemagic/apple/app_store_connect/testflight/__init__.py +0 -0
  61. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/src/codemagic/apple/app_store_connect/testflight/beta_groups.py +0 -0
  62. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/src/codemagic/apple/app_store_connect/type_declarations.py +0 -0
  63. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/src/codemagic/apple/app_store_connect/versioning/__init__.py +0 -0
  64. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/src/codemagic/apple/app_store_connect/versioning/app_store_version_localizations.py +0 -0
  65. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/src/codemagic/apple/app_store_connect/versioning/app_store_version_submissions.py +0 -0
  66. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/src/codemagic/apple/app_store_connect/versioning/app_store_versions.py +0 -0
  67. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/src/codemagic/apple/app_store_connect/versioning/beta_app_review_submissions.py +0 -0
  68. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/src/codemagic/apple/app_store_connect/versioning/beta_build_localizations.py +0 -0
  69. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/src/codemagic/apple/app_store_connect/versioning/pre_release_versions.py +0 -0
  70. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/src/codemagic/apple/app_store_connect/versioning/review_submission_items.py +0 -0
  71. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/src/codemagic/apple/app_store_connect/versioning/review_submissions.py +0 -0
  72. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/src/codemagic/apple/resources/__init__.py +0 -0
  73. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/src/codemagic/apple/resources/app.py +0 -0
  74. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/src/codemagic/apple/resources/app_store_version.py +0 -0
  75. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/src/codemagic/apple/resources/app_store_version_localization.py +0 -0
  76. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/src/codemagic/apple/resources/app_store_version_submission.py +0 -0
  77. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/src/codemagic/apple/resources/beta_app_localization.py +0 -0
  78. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/src/codemagic/apple/resources/beta_app_review_detail.py +0 -0
  79. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/src/codemagic/apple/resources/beta_app_review_submission.py +0 -0
  80. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/src/codemagic/apple/resources/beta_build_localization.py +0 -0
  81. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/src/codemagic/apple/resources/beta_group.py +0 -0
  82. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/src/codemagic/apple/resources/build.py +0 -0
  83. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/src/codemagic/apple/resources/build_beta_detail.py +0 -0
  84. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/src/codemagic/apple/resources/bundle_id.py +0 -0
  85. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/src/codemagic/apple/resources/device.py +0 -0
  86. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/src/codemagic/apple/resources/error_response.py +0 -0
  87. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/src/codemagic/apple/resources/pre_release_version.py +0 -0
  88. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/src/codemagic/apple/resources/profile.py +0 -0
  89. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/src/codemagic/apple/resources/resource.py +0 -0
  90. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/src/codemagic/apple/resources/review_submission.py +0 -0
  91. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/src/codemagic/apple/resources/review_submission_item.py +0 -0
  92. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/src/codemagic/apple/resources/signing_certificate.py +0 -0
  93. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/src/codemagic/cli/action_group.py +0 -0
  94. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/src/codemagic/cli/argument/argument.py +0 -0
  95. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/src/codemagic/cli/argument/argument_formatter.py +0 -0
  96. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/src/codemagic/cli/argument/argument_properties.py +0 -0
  97. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/src/codemagic/cli/argument/common_argument_types.py +0 -0
  98. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/src/codemagic/cli/argument/typed_cli_argument.py +0 -0
  99. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/src/codemagic/cli/cli_help_formatter.py +0 -0
  100. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/src/codemagic/cli/cli_process.py +0 -0
  101. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/src/codemagic/cli/cli_process_stream.py +0 -0
  102. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/src/codemagic/cli/cli_types.py +0 -0
  103. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/src/codemagic/cli/colors.py +0 -0
  104. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/src/codemagic/cli/environment.py +0 -0
  105. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/src/codemagic/data/jars/bundletool-all-1.13.1.jar +0 -0
  106. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/src/codemagic/google/__init__.py +0 -0
  107. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/src/codemagic/google/errors.py +0 -0
  108. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/src/codemagic/google/firebase_client.py +0 -0
  109. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/src/codemagic/google/google_client.py +0 -0
  110. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/src/codemagic/google/resource_managers/__init__.py +0 -0
  111. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/src/codemagic/google/resource_managers/mixins/__init__.py +0 -0
  112. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/src/codemagic/google/resource_managers/mixins/acting_manager_mixin.py +0 -0
  113. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/src/codemagic/google/resource_managers/mixins/listing_manager_mixin.py +0 -0
  114. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/src/codemagic/google/resource_managers/release_manager.py +0 -0
  115. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/src/codemagic/google/resource_managers/resource_manager.py +0 -0
  116. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/src/codemagic/google/resources/__init__.py +0 -0
  117. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/src/codemagic/google/resources/identifiers/__init__.py +0 -0
  118. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/src/codemagic/google/resources/identifiers/app_identifier.py +0 -0
  119. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/src/codemagic/google/resources/identifiers/resource_identifier.py +0 -0
  120. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/src/codemagic/google/resources/release.py +0 -0
  121. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/src/codemagic/google/resources/release_notes.py +0 -0
  122. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/src/codemagic/google/resources/resource.py +0 -0
  123. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/src/codemagic/google_play/__init__.py +0 -0
  124. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/src/codemagic/google_play/api_client.py +0 -0
  125. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/src/codemagic/google_play/api_error.py +0 -0
  126. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/src/codemagic/google_play/resources/__init__.py +0 -0
  127. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/src/codemagic/google_play/resources/edit.py +0 -0
  128. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/src/codemagic/google_play/resources/enums.py +0 -0
  129. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/src/codemagic/google_play/resources/resource.py +0 -0
  130. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/src/codemagic/google_play/resources/track.py +0 -0
  131. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/src/codemagic/mixins/__init__.py +0 -0
  132. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/src/codemagic/mixins/path_finder.py +0 -0
  133. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/src/codemagic/mixins/running_cli_app.py +0 -0
  134. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/src/codemagic/mixins/str_converter.py +0 -0
  135. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/src/codemagic/models/__init__.py +0 -0
  136. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/src/codemagic/models/altool/__init__.py +0 -0
  137. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/src/codemagic/models/altool/altool.py +0 -0
  138. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/src/codemagic/models/altool/altool_result.py +0 -0
  139. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/src/codemagic/models/altool/enums.py +0 -0
  140. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/src/codemagic/models/android_signing_info.py +0 -0
  141. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/src/codemagic/models/application_package/__init__.py +0 -0
  142. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/src/codemagic/models/application_package/abstract_package.py +0 -0
  143. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/src/codemagic/models/application_package/ipa.py +0 -0
  144. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/src/codemagic/models/application_package/macos_package.py +0 -0
  145. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/src/codemagic/models/bundle_id_detector.py +0 -0
  146. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/src/codemagic/models/certificate.py +0 -0
  147. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/src/codemagic/models/certificate_attributes.py +0 -0
  148. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/src/codemagic/models/certificate_p12_exporter.py +0 -0
  149. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/src/codemagic/models/code_sign_entitlements.py +0 -0
  150. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/src/codemagic/models/code_signing_settings_manager.py +0 -0
  151. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/src/codemagic/models/enums.py +0 -0
  152. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/src/codemagic/models/export_options.py +0 -0
  153. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/src/codemagic/models/json_serializable.py +0 -0
  154. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/src/codemagic/models/junit/__init__.py +0 -0
  155. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/src/codemagic/models/junit/definitions.py +0 -0
  156. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/src/codemagic/models/junit/printer.py +0 -0
  157. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/src/codemagic/models/keystore.py +0 -0
  158. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/src/codemagic/models/pbx_project.py +0 -0
  159. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/src/codemagic/models/private_key.py +0 -0
  160. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/src/codemagic/models/provisioning_profile.py +0 -0
  161. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/src/codemagic/models/simulator/__init__.py +0 -0
  162. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/src/codemagic/models/simulator/core_simulator_service.py +0 -0
  163. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/src/codemagic/models/simulator/runtime.py +0 -0
  164. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/src/codemagic/models/simulator/simulator.py +0 -0
  165. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/src/codemagic/models/table/__init__.py +0 -0
  166. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/src/codemagic/models/table/line.py +0 -0
  167. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/src/codemagic/models/table/table.py +0 -0
  168. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/src/codemagic/models/xcode.py +0 -0
  169. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/src/codemagic/models/xcodebuild.py +0 -0
  170. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/src/codemagic/models/xcpretty.py +0 -0
  171. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/src/codemagic/models/xctests/__init__.py +0 -0
  172. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/src/codemagic/models/xctests/collector.py +0 -0
  173. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/src/codemagic/models/xctests/converter.py +0 -0
  174. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/src/codemagic/models/xctests/xcresult.py +0 -0
  175. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/src/codemagic/models/xctests/xcresulttool.py +0 -0
  176. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/src/codemagic/py.typed +0 -0
  177. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/src/codemagic/scripts/code_signing_manager.rb +0 -0
  178. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/src/codemagic/shell_tools/__init__.py +0 -0
  179. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/src/codemagic/shell_tools/abstract_shell_tool.py +0 -0
  180. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/src/codemagic/shell_tools/keytool.py +0 -0
  181. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/src/codemagic/tools/__init__.py +0 -0
  182. {codemagic_cli_tools-0.48.2/src/codemagic/tools/_app_store_connect → codemagic_cli_tools-0.50.0/src/codemagic/tools/_xcode_project}/__init__.py +0 -0
  183. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/src/codemagic/tools/_xcode_project/arguments.py +0 -0
  184. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/src/codemagic/tools/android_app_bundle.py +0 -0
  185. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/src/codemagic/tools/android_keystore/__init__.py +0 -0
  186. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/src/codemagic/tools/android_keystore/__main__.py +0 -0
  187. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/src/codemagic/tools/android_keystore/android_keystore.py +0 -0
  188. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/src/codemagic/tools/android_keystore/argument_types.py +0 -0
  189. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/src/codemagic/tools/android_keystore/arguments.py +0 -0
  190. {codemagic_cli_tools-0.48.2/src/codemagic/tools/_app_store_connect → codemagic_cli_tools-0.50.0/src/codemagic/tools/app_store_connect}/action_groups/app_store_version_localizations_action_group.py +0 -0
  191. {codemagic_cli_tools-0.48.2/src/codemagic/tools/_app_store_connect → codemagic_cli_tools-0.50.0/src/codemagic/tools/app_store_connect}/action_groups/app_store_version_submissions_action_group.py +0 -0
  192. {codemagic_cli_tools-0.48.2/src/codemagic/tools/_app_store_connect → codemagic_cli_tools-0.50.0/src/codemagic/tools/app_store_connect}/action_groups/app_store_versions_action_group.py +0 -0
  193. {codemagic_cli_tools-0.48.2/src/codemagic/tools/_app_store_connect → codemagic_cli_tools-0.50.0/src/codemagic/tools/app_store_connect}/action_groups/apps_action_group.py +0 -0
  194. {codemagic_cli_tools-0.48.2/src/codemagic/tools/_app_store_connect → codemagic_cli_tools-0.50.0/src/codemagic/tools/app_store_connect}/action_groups/beta_app_review_submissions_action_group.py +0 -0
  195. {codemagic_cli_tools-0.48.2/src/codemagic/tools/_app_store_connect → codemagic_cli_tools-0.50.0/src/codemagic/tools/app_store_connect}/action_groups/beta_build_localizations_action_group.py +0 -0
  196. {codemagic_cli_tools-0.48.2/src/codemagic/tools/_app_store_connect → codemagic_cli_tools-0.50.0/src/codemagic/tools/app_store_connect}/action_groups/beta_groups_action_group.py +0 -0
  197. {codemagic_cli_tools-0.48.2/src/codemagic/tools/_app_store_connect → codemagic_cli_tools-0.50.0/src/codemagic/tools/app_store_connect}/action_groups/review_submission_items_actions_group.py +0 -0
  198. {codemagic_cli_tools-0.48.2/src/codemagic/tools/_app_store_connect → codemagic_cli_tools-0.50.0/src/codemagic/tools/app_store_connect}/action_groups/review_submissions_actions_group.py +0 -0
  199. {codemagic_cli_tools-0.48.2/src/codemagic/tools/_app_store_connect → codemagic_cli_tools-0.50.0/src/codemagic/tools/app_store_connect}/actions/latest_build_number_actions.py +0 -0
  200. {codemagic_cli_tools-0.48.2/src/codemagic/tools/_app_store_connect → codemagic_cli_tools-0.50.0/src/codemagic/tools/app_store_connect}/errors.py +0 -0
  201. {codemagic_cli_tools-0.48.2/src/codemagic/tools/_app_store_connect → codemagic_cli_tools-0.50.0/src/codemagic/tools/app_store_connect}/resource_printer.py +0 -0
  202. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/src/codemagic/tools/codemagic_cli_tools.py +0 -0
  203. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/src/codemagic/tools/firebase_app_distribution/__init__.py +0 -0
  204. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/src/codemagic/tools/firebase_app_distribution/__main__.py +0 -0
  205. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/src/codemagic/tools/firebase_app_distribution/action_groups/__init__.py +0 -0
  206. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/src/codemagic/tools/firebase_app_distribution/action_groups/firebase_action_groups.py +0 -0
  207. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/src/codemagic/tools/firebase_app_distribution/action_groups/releases_action_group.py +0 -0
  208. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/src/codemagic/tools/firebase_app_distribution/actions/__init__.py +0 -0
  209. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/src/codemagic/tools/firebase_app_distribution/actions/get_latest_build_version_action.py +0 -0
  210. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/src/codemagic/tools/firebase_app_distribution/argument_types.py +0 -0
  211. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/src/codemagic/tools/firebase_app_distribution/arguments.py +0 -0
  212. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/src/codemagic/tools/firebase_app_distribution/errors.py +0 -0
  213. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/src/codemagic/tools/firebase_app_distribution/firebase_app_distribution.py +0 -0
  214. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/src/codemagic/tools/firebase_app_distribution/firebase_app_distribution_action.py +0 -0
  215. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/src/codemagic/tools/firebase_app_distribution/resource_printer.py +0 -0
  216. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/src/codemagic/tools/git_changelog.py +0 -0
  217. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/src/codemagic/tools/google_play/__init__.py +0 -0
  218. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/src/codemagic/tools/google_play/__main__.py +0 -0
  219. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/src/codemagic/tools/google_play/action_groups/__init__.py +0 -0
  220. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/src/codemagic/tools/google_play/action_groups/google_play_action_groups.py +0 -0
  221. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/src/codemagic/tools/google_play/action_groups/tracks_action_group.py +0 -0
  222. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/src/codemagic/tools/google_play/actions/__init__.py +0 -0
  223. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/src/codemagic/tools/google_play/actions/get_latest_build_number_action.py +0 -0
  224. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/src/codemagic/tools/google_play/argument_types.py +0 -0
  225. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/src/codemagic/tools/google_play/arguments.py +0 -0
  226. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/src/codemagic/tools/google_play/errors.py +0 -0
  227. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/src/codemagic/tools/google_play/google_play.py +0 -0
  228. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/src/codemagic/tools/google_play/google_play_base_action.py +0 -0
  229. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/src/codemagic/tools/keychain.py +0 -0
  230. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/src/codemagic/tools/universal_apk_generator.py +0 -0
  231. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/src/codemagic/tools/xcode_project.py +0 -0
  232. {codemagic_cli_tools-0.48.2/src/codemagic/tools/_xcode_project → codemagic_cli_tools-0.50.0/src/codemagic/utilities}/__init__.py +0 -0
  233. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/src/codemagic/utilities/auditing/__init__.py +0 -0
  234. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/src/codemagic/utilities/auditing/base_auditor.py +0 -0
  235. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/src/codemagic/utilities/auditing/exception_auditor.py +0 -0
  236. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/src/codemagic/utilities/auditing/http_request_auditor.py +0 -0
  237. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/src/codemagic/utilities/backwards_file_reader.py +0 -0
  238. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/src/codemagic/utilities/case_conversion.py +0 -0
  239. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/src/codemagic/utilities/decorators.py +0 -0
  240. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/src/codemagic/utilities/levenshtein_distance.py +0 -0
  241. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/src/codemagic/utilities/log.py +0 -0
  242. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/src/codemagic/utilities/versions.py +0 -0
  243. {codemagic_cli_tools-0.48.2/src/codemagic/utilities → codemagic_cli_tools-0.50.0/tests}/__init__.py +0 -0
  244. {codemagic_cli_tools-0.48.2/tests → codemagic_cli_tools-0.50.0/tests/apple}/__init__.py +0 -0
  245. {codemagic_cli_tools-0.48.2/tests/apple → codemagic_cli_tools-0.50.0/tests/apple/app_store_connect}/__init__.py +0 -0
  246. {codemagic_cli_tools-0.48.2/tests/apple/app_store_connect → codemagic_cli_tools-0.50.0/tests/apple/app_store_connect/apps}/__init__.py +0 -0
  247. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/tests/apple/app_store_connect/apps/test_apps.py +0 -0
  248. {codemagic_cli_tools-0.48.2/tests/apple/app_store_connect/apps → codemagic_cli_tools-0.50.0/tests/apple/app_store_connect/builds}/__init__.py +0 -0
  249. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/tests/apple/app_store_connect/builds/test_builds.py +0 -0
  250. {codemagic_cli_tools-0.48.2/tests/apple/app_store_connect/builds → codemagic_cli_tools-0.50.0/tests/apple/app_store_connect/provisioning}/__init__.py +0 -0
  251. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/tests/apple/app_store_connect/provisioning/conftest.py +0 -0
  252. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/tests/apple/app_store_connect/provisioning/test_bundle_id_capabilities.py +0 -0
  253. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/tests/apple/app_store_connect/provisioning/test_bundle_ids.py +0 -0
  254. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/tests/apple/app_store_connect/provisioning/test_devices.py +0 -0
  255. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/tests/apple/app_store_connect/provisioning/test_profiles.py +0 -0
  256. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/tests/apple/app_store_connect/provisioning/test_signing_certificates.py +0 -0
  257. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/tests/apple/app_store_connect/resource_manager_test_base.py +0 -0
  258. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/tests/apple/app_store_connect/test_api_client.py +0 -0
  259. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/tests/apple/app_store_connect/test_api_session.py +0 -0
  260. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/tests/apple/app_store_connect/test_json_web_token_manager.py +0 -0
  261. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/tests/apple/app_store_connect/test_resource_manager.py +0 -0
  262. {codemagic_cli_tools-0.48.2/tests/apple/app_store_connect/provisioning → codemagic_cli_tools-0.50.0/tests/apple/app_store_connect/testflight}/__init__.py +0 -0
  263. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/tests/apple/app_store_connect/testflight/test_beta_groups.py +0 -0
  264. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/tests/apple/app_store_connect/versioning/test_app_store_version_localizations.py +0 -0
  265. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/tests/apple/app_store_connect/versioning/test_app_store_version_submissions.py +0 -0
  266. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/tests/apple/app_store_connect/versioning/test_app_store_versions.py +0 -0
  267. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/tests/apple/app_store_connect/versioning/test_beta_app_review_submissions.py +0 -0
  268. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/tests/apple/app_store_connect/versioning/test_beta_build_localizations.py +0 -0
  269. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/tests/apple/app_store_connect/versioning/test_pre_release_versions.py +0 -0
  270. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/tests/apple/app_store_connect/versioning/test_review_submission_items.py +0 -0
  271. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/tests/apple/app_store_connect/versioning/test_review_submissions.py +0 -0
  272. {codemagic_cli_tools-0.48.2/tests/apple/app_store_connect/testflight → codemagic_cli_tools-0.50.0/tests/apple/resources}/__init__.py +0 -0
  273. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/tests/apple/resources/conftest.py +0 -0
  274. {codemagic_cli_tools-0.48.2/tests/apple/resources → codemagic_cli_tools-0.50.0/tests/apple/resources/enums}/__init__.py +0 -0
  275. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/tests/apple/resources/enums/test_certificate_type.py +0 -0
  276. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/tests/apple/resources/enums/test_profile_type.py +0 -0
  277. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/tests/apple/resources/mocks/app_store_version.json +0 -0
  278. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/tests/apple/resources/mocks/build.json +0 -0
  279. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/tests/apple/resources/mocks/bundle_id.json +0 -0
  280. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/tests/apple/resources/mocks/bundle_id_capability.json +0 -0
  281. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/tests/apple/resources/mocks/certificate.json +0 -0
  282. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/tests/apple/resources/mocks/device.json +0 -0
  283. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/tests/apple/resources/mocks/error_response.json +0 -0
  284. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/tests/apple/resources/mocks/error_response_entity_state_invalid.json +0 -0
  285. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/tests/apple/resources/mocks/error_response_with_links.json +0 -0
  286. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/tests/apple/resources/mocks/mock_resource.json +0 -0
  287. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/tests/apple/resources/mocks/pre_release_version.json +0 -0
  288. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/tests/apple/resources/mocks/profile.json +0 -0
  289. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/tests/apple/resources/test_app_store_version_resource.py +0 -0
  290. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/tests/apple/resources/test_build_resource.py +0 -0
  291. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/tests/apple/resources/test_bundle_id_resource.py +0 -0
  292. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/tests/apple/resources/test_device_resource.py +0 -0
  293. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/tests/apple/resources/test_error_response.py +0 -0
  294. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/tests/apple/resources/test_pre_release_version_resource.py +0 -0
  295. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/tests/apple/resources/test_profile_resource.py +0 -0
  296. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/tests/apple/resources/test_resource.py +0 -0
  297. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/tests/apple/resources/test_signing_certificate_resource.py +0 -0
  298. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/tests/apple/resources/test_undefined_resource_fields.py +0 -0
  299. {codemagic_cli_tools-0.48.2/tests/apple/resources/enums → codemagic_cli_tools-0.50.0/tests/cli}/__init__.py +0 -0
  300. {codemagic_cli_tools-0.48.2/tests/cli → codemagic_cli_tools-0.50.0/tests/cli/argument}/__init__.py +0 -0
  301. {codemagic_cli_tools-0.48.2/tests/cli/argument → codemagic_cli_tools-0.50.0/tests/cli/argument/common_argument_types}/__init__.py +0 -0
  302. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/tests/cli/argument/common_argument_types/test_bounded_number.py +0 -0
  303. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/tests/cli/argument/common_argument_types/test_iso_8601_datetime.py +0 -0
  304. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/tests/cli/argument/common_argument_types/test_maybe_dir.py +0 -0
  305. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/tests/cli/argument/test_argument.py +0 -0
  306. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/tests/cli/mocks/utf-8-sample.txt +0 -0
  307. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/tests/cli/test_cli_process.py +0 -0
  308. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/tests/cli/test_decorators.py +0 -0
  309. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/tests/conftest.py +0 -0
  310. {codemagic_cli_tools-0.48.2/tests/cli/argument/common_argument_types → codemagic_cli_tools-0.50.0/tests/google}/__init__.py +0 -0
  311. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/tests/google/conftest.py +0 -0
  312. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/tests/google/test_firebase_client.py +0 -0
  313. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/tests/google/test_live_firebase_client.py +0 -0
  314. {codemagic_cli_tools-0.48.2/tests/google → codemagic_cli_tools-0.50.0/tests/google_play}/__init__.py +0 -0
  315. {codemagic_cli_tools-0.48.2/tests/google_play → codemagic_cli_tools-0.50.0/tests/google_play/resources}/__init__.py +0 -0
  316. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/tests/google_play/resources/conftest.py +0 -0
  317. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/tests/google_play/resources/mocks/edit.json +0 -0
  318. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/tests/google_play/resources/mocks/track.json +0 -0
  319. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/tests/google_play/resources/test_edit_resource.py +0 -0
  320. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/tests/google_play/resources/test_resource_print.py +0 -0
  321. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/tests/google_play/resources/test_track_resource.py +0 -0
  322. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/tests/google_play/test_api_client.py +0 -0
  323. {codemagic_cli_tools-0.48.2/tests/google_play/resources → codemagic_cli_tools-0.50.0/tests/mixins}/__init__.py +0 -0
  324. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/tests/mixins/test_string_converter.py +0 -0
  325. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/tests/mocks/certificate.asn1 +0 -0
  326. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/tests/mocks/encrypted.pem +0 -0
  327. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/tests/mocks/encrypted.pem.pub +0 -0
  328. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/tests/mocks/unencrypted.pem +0 -0
  329. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/tests/mocks/unencrypted.pem.pub +0 -0
  330. {codemagic_cli_tools-0.48.2/tests/mixins → codemagic_cli_tools-0.50.0/tests/models}/__init__.py +0 -0
  331. {codemagic_cli_tools-0.48.2/tests/models → codemagic_cli_tools-0.50.0/tests/models/altool}/__init__.py +0 -0
  332. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/tests/models/altool/mocks/mock_failure_auth.txt +0 -0
  333. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/tests/models/altool/mocks/mock_failure_other.txt +0 -0
  334. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/tests/models/altool/mocks/mock_upload_success.json +0 -0
  335. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/tests/models/altool/mocks/mock_validation_failure.json +0 -0
  336. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/tests/models/altool/test_altool_result.py +0 -0
  337. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/tests/models/altool/test_altool_retrying.py +0 -0
  338. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/tests/models/conftest.py +0 -0
  339. {codemagic_cli_tools-0.48.2/tests/models/altool → codemagic_cli_tools-0.50.0/tests/models/enums}/__init__.py +0 -0
  340. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/tests/models/enums/test_resource_enum.py +0 -0
  341. {codemagic_cli_tools-0.48.2/tests/models/enums → codemagic_cli_tools-0.50.0/tests/models/junit}/__init__.py +0 -0
  342. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/tests/models/junit/mocks/testsuite.xml +0 -0
  343. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/tests/models/junit/test_xml_generation.py +0 -0
  344. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/tests/models/mocks/certificate-no-password.p12 +0 -0
  345. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/tests/models/mocks/certificate.p12 +0 -0
  346. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/tests/models/mocks/codemagic_io_wildcard_development.mobileprovision +0 -0
  347. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/tests/models/mocks/export_options.plist +0 -0
  348. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/tests/models/mocks/mock.ipa +0 -0
  349. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/tests/models/mocks/mock.xcarchive/Products/Applications/Capybara App.app/Capybara App +0 -0
  350. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/tests/models/mocks/mock_0_icloud_container_environments.plist +0 -0
  351. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/tests/models/mocks/mock_1_icloud_container_environments.plist +0 -0
  352. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/tests/models/mocks/mock_2_icloud_container_environments.plist +0 -0
  353. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/tests/models/mocks/mock_openssh_private_key +0 -0
  354. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/tests/models/mocks/mock_rsa_private_key +0 -0
  355. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/tests/models/mocks/mock_xcode/Contents/version.plist +0 -0
  356. {codemagic_cli_tools-0.48.2/tests/models/junit → codemagic_cli_tools-0.50.0/tests/models/simulator}/__init__.py +0 -0
  357. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/tests/models/simulator/mocks/devices.json +0 -0
  358. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/tests/models/simulator/mocks/simulator.json +0 -0
  359. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/tests/models/simulator/test_runtime.py +0 -0
  360. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/tests/models/simulator/test_simulator.py +0 -0
  361. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/tests/models/test_certificate.py +0 -0
  362. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/tests/models/test_certificate_attributes.py +0 -0
  363. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/tests/models/test_code_sign_entitlements.py +0 -0
  364. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/tests/models/test_export_options.py +0 -0
  365. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/tests/models/test_private_key.py +0 -0
  366. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/tests/models/test_provisioning_profile.py +0 -0
  367. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/tests/models/test_table.py +0 -0
  368. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/tests/models/test_xcode.py +0 -0
  369. {codemagic_cli_tools-0.48.2/tests/models/simulator → codemagic_cli_tools-0.50.0/tests/models/xctests}/__init__.py +0 -0
  370. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/tests/models/xctests/conftest.py +0 -0
  371. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/tests/models/xctests/mocks/0_1NtPgUPcB1A83X977l5Q91ElstUeVDnqAhumk_VJG8DIS4GA1sb8ElPPHZZGYEHmNvnHU1VVaPDCw1tI8n3uXg__.json +0 -0
  372. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/tests/models/xctests/mocks/0_5rAUs3HknUI7DU8Jyc5RlFcosqCXTOV-qwOaOE1Mul_ppK8QCta-NSxxCdtVg6i12km4zTR5l0SjgzfHGUNxog__.json +0 -0
  373. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/tests/models/xctests/mocks/0_97T9qQZ3dEI1oDS6NvYTPcFk_jUXFJ0NRwyd5FZ2S585JGMtlqbF28Hc85yeifgKEnNoInoW93Za9c5QJCspeQ__.json +0 -0
  374. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/tests/models/xctests/mocks/0_DVcJZnHFaQQlzl8czovv7RuDRQIToEr5_3lLe-Mn1Sm6VreJ5xoXEFqBaWNv0XRmSg00NJ77XzQKgddhfkuk7w__.json +0 -0
  375. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/tests/models/xctests/mocks/0_FZMbIp5VAUEiJv1wUUM-K78Dtmb4o-titbTusDJqRuarbS9OatzAykygXo4NUqEoR9sxCIoeu8VDioQmbba6mw__.json +0 -0
  376. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/tests/models/xctests/mocks/0_Hj6SOUxY1APmxdQEA2HdqbA52GD3WJE571nqr_Z-w8vi_buxP-GUjNxCsGYQvnKnnwlyykwxY-KJmjqKYmPyXQ__.json +0 -0
  377. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/tests/models/xctests/mocks/0_NnCmQ8rMqVyUBgL3ZDjfjJ9Vt1AMGeMzZPkDH30rGMYer0pFDpp4UDZlCEHRImO-48LdC_KdcbjP70IZA6zKUQ__.json +0 -0
  378. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/tests/models/xctests/mocks/0_YK9aPHVT-grv_ZVooRT79GBO9n82BNogkuWVzFO6itJEtbtsRTQpK2-0ZDLot1JpCfPb26aZwEZjeb9G4GHiBQ__.json +0 -0
  379. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/tests/models/xctests/mocks/0__H1_RrdBT9b-ZhkWCQiRKpHlwURmyWUudeOhj5UslLXhXl8mr9w5CGqdobi9A5wCVEIRMsO4yuFyzx2gMPr-_Q__.json +0 -0
  380. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/tests/models/xctests/mocks/0_evvkuGf92MVrmIvhr07911LuRTiPBKDjIQ0q_7L-mPGGYkWVKMBPQ5pB5lbjoaOnvr0fpC9k003EunfwSdss2g__.json +0 -0
  381. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/tests/models/xctests/mocks/actions_invocation_record.json +0 -0
  382. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/tests/models/xctests/test_collector.py +0 -0
  383. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/tests/models/xctests/test_converter.py +0 -0
  384. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/tests/models/xctests/test_xcresult.py +0 -0
  385. {codemagic_cli_tools-0.48.2/tests/models/xctests → codemagic_cli_tools-0.50.0/tests/shell_tools}/__init__.py +0 -0
  386. {codemagic_cli_tools-0.48.2/tests/shell_tools → codemagic_cli_tools-0.50.0/tests/shell_tools/keytool}/__init__.py +0 -0
  387. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/tests/shell_tools/keytool/conftest.py +0 -0
  388. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/tests/shell_tools/keytool/mocks/android.ks +0 -0
  389. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/tests/shell_tools/keytool/mocks/non-rfc-cert-keystore.jks +0 -0
  390. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/tests/shell_tools/keytool/mocks/non-rfc-cert-keystore.p12 +0 -0
  391. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/tests/shell_tools/keytool/mocks/rfc-cert-keystore.jks +0 -0
  392. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/tests/shell_tools/keytool/mocks/rfc-cert-keystore.p12 +0 -0
  393. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/tests/shell_tools/keytool/test_get_certificate.py +0 -0
  394. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/tests/shell_tools/keytool/test_get_certificates.py +0 -0
  395. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/tests/shell_tools/keytool/test_validate.py +0 -0
  396. {codemagic_cli_tools-0.48.2/tests/shell_tools/keytool → codemagic_cli_tools-0.50.0/tests/tools}/__init__.py +0 -0
  397. {codemagic_cli_tools-0.48.2/tests/tools → codemagic_cli_tools-0.50.0/tests/tools/app_store_connect}/__init__.py +0 -0
  398. {codemagic_cli_tools-0.48.2/tests/tools/app_store_connect → codemagic_cli_tools-0.50.0/tests/tools/app_store_connect/arguments}/__init__.py +0 -0
  399. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/tests/tools/app_store_connect/mocks/AuthKeyMock.p8 +0 -0
  400. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/tests/tools/mocks/firebase_releases.json +0 -0
  401. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/tests/tools/mocks/google_play_tracks.json +0 -0
  402. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/tests/tools/test_android_app_bundle.py +0 -0
  403. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/tests/tools/test_firebase_app_distribution.py +0 -0
  404. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/tests/tools/test_google_play.py +0 -0
  405. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/tests/tools/test_keychain.py +0 -0
  406. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/tests/tools/test_universal_apk_generator.py +0 -0
  407. {codemagic_cli_tools-0.48.2/tests/tools/app_store_connect/arguments → codemagic_cli_tools-0.50.0/tests/utilities}/__init__.py +0 -0
  408. {codemagic_cli_tools-0.48.2/tests/utilities → codemagic_cli_tools-0.50.0/tests/utilities/decorators}/__init__.py +0 -0
  409. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/tests/utilities/decorators/test_deprecated.py +0 -0
  410. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/tests/utilities/test_backwards_file_reader.py +0 -0
  411. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/tests/utilities/test_case_conversion.py +0 -0
  412. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/tests/utilities/test_levenshtein_distance.py +0 -0
  413. {codemagic_cli_tools-0.48.2 → codemagic_cli_tools-0.50.0}/tests/utilities/test_versions.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: codemagic-cli-tools
3
- Version: 0.48.2
3
+ Version: 0.50.0
4
4
  Summary: CLI tools used in Codemagic builds
5
5
  Home-page: https://github.com/codemagic-ci-cd/cli-tools
6
6
  License: GPL-3.0-or-later
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "codemagic-cli-tools"
3
- version = "0.48.2"
3
+ version = "0.50.0"
4
4
  description = "CLI tools used in Codemagic builds"
5
5
  readme = "README.md"
6
6
  authors = [
@@ -1,5 +1,5 @@
1
1
  __title__ = "codemagic-cli-tools"
2
2
  __description__ = "CLI tools used in Codemagic builds"
3
- __version__ = '0.48.2'
3
+ __version__ = '0.50.0'
4
4
  __url__ = "https://github.com/codemagic-ci-cd/cli-tools"
5
5
  __licence__ = "GNU General Public License v3.0"
@@ -1,5 +1,5 @@
1
1
  __title__ = "codemagic-cli-tools"
2
2
  __description__ = "CLI tools used in Codemagic builds"
3
- __version__ = "0.48.2.dev"
3
+ __version__ = "0.50.0.dev"
4
4
  __url__ = "https://github.com/codemagic-ci-cd/cli-tools"
5
5
  __licence__ = "GNU General Public License v3.0"
@@ -1,6 +1,7 @@
1
1
  from __future__ import annotations
2
2
 
3
3
  from dataclasses import dataclass
4
+ from typing import Any
4
5
  from typing import Optional
5
6
 
6
7
  from .enums import CapabilityOptionKey
@@ -66,3 +67,13 @@ class BundleIdCapability(Resource):
66
67
  @dataclass
67
68
  class Relationships(Resource.Relationships):
68
69
  bundleId: Relationship
70
+
71
+ def _format_attribute_value(self, attribute_name: str, value: Any) -> Any:
72
+ if attribute_name == "capabilityType":
73
+ # In case we get an unknown capability type from API response, then this is stored as
74
+ # a runtime-created fallback enumeration `GracefulCapabilityType` which does not have
75
+ # the properties and methods that `CapabilityType` has.
76
+ if isinstance(self.attributes.capabilityType, CapabilityType):
77
+ return self.attributes.capabilityType.display_name
78
+ return CapabilityType.get_default_display_name(self.attributes.capabilityType.value)
79
+ return super()._format_attribute_value(attribute_name, value)
@@ -1,5 +1,6 @@
1
1
  from __future__ import annotations
2
2
 
3
+ import re
3
4
  from typing import Tuple
4
5
 
5
6
  from codemagic.models.enums import ResourceEnum
@@ -78,30 +79,73 @@ class CapabilitySettingKey(ResourceEnum):
78
79
 
79
80
 
80
81
  class CapabilityType(ResourceEnum):
82
+ """
83
+ https://developer.apple.com/documentation/appstoreconnectapi/capabilitytype
84
+ """
85
+
81
86
  ACCESS_WIFI_INFORMATION = "ACCESS_WIFI_INFORMATION"
82
- APP_GROUPS = "APP_GROUPS"
87
+ APPLE_ID_AUTH = "APPLE_ID_AUTH"
83
88
  APPLE_PAY = "APPLE_PAY"
89
+ APP_GROUPS = "APP_GROUPS"
84
90
  ASSOCIATED_DOMAINS = "ASSOCIATED_DOMAINS"
85
91
  AUTOFILL_CREDENTIAL_PROVIDER = "AUTOFILL_CREDENTIAL_PROVIDER"
86
92
  CLASSKIT = "CLASSKIT"
93
+ COREMEDIA_HLS_LOW_LATENCY = "COREMEDIA_HLS_LOW_LATENCY"
87
94
  DATA_PROTECTION = "DATA_PROTECTION"
88
95
  GAME_CENTER = "GAME_CENTER"
89
96
  HEALTHKIT = "HEALTHKIT"
90
97
  HOMEKIT = "HOMEKIT"
91
98
  HOT_SPOT = "HOT_SPOT"
92
99
  ICLOUD = "ICLOUD"
93
- IN_APP_PURCHASE = "IN_APP_PURCHASE"
94
100
  INTER_APP_AUDIO = "INTER_APP_AUDIO"
101
+ IN_APP_PURCHASE = "IN_APP_PURCHASE"
95
102
  MAPS = "MAPS"
96
103
  MULTIPATH = "MULTIPATH"
104
+ NETWORK_CUSTOM_PROTOCOL = "NETWORK_CUSTOM_PROTOCOL"
97
105
  NETWORK_EXTENSIONS = "NETWORK_EXTENSIONS"
106
+ NETWORK_SLICING = "NETWORK_SLICING"
98
107
  NFC_TAG_READING = "NFC_TAG_READING"
99
108
  PERSONAL_VPN = "PERSONAL_VPN"
100
109
  PUSH_NOTIFICATIONS = "PUSH_NOTIFICATIONS"
101
110
  SIRIKIT = "SIRIKIT"
111
+ SYSTEM_EXTENSION_INSTALL = "SYSTEM_EXTENSION_INSTALL"
112
+ USER_MANAGEMENT = "USER_MANAGEMENT"
102
113
  WALLET = "WALLET"
103
114
  WIRELESS_ACCESSORY_CONFIGURATION = "WIRELESS_ACCESSORY_CONFIGURATION"
104
115
 
116
+ @classmethod
117
+ def from_display_name(cls, display_name: str) -> CapabilityType:
118
+ for capability_type in cls:
119
+ if capability_type.display_name == display_name:
120
+ return capability_type
121
+ raise ValueError("Unknown capability type", display_name)
122
+
123
+ @property
124
+ def display_name(self) -> str:
125
+ try:
126
+ return {
127
+ CapabilityType.ACCESS_WIFI_INFORMATION: "Access Wi-Fi Information",
128
+ CapabilityType.APPLE_ID_AUTH: "Sign In with Apple",
129
+ CapabilityType.COREMEDIA_HLS_LOW_LATENCY: "Low Latency HLS",
130
+ CapabilityType.HOT_SPOT: "Hotspot",
131
+ CapabilityType.ICLOUD: "iCloud",
132
+ CapabilityType.INTER_APP_AUDIO: "Inter-App Audio",
133
+ CapabilityType.IN_APP_PURCHASE: "In-App Purchase",
134
+ CapabilityType.NETWORK_CUSTOM_PROTOCOL: "Custom Network Protocol",
135
+ CapabilityType.NETWORK_SLICING: "5G Network Slicing",
136
+ CapabilityType.NFC_TAG_READING: "NFC Tag Reading",
137
+ CapabilityType.PERSONAL_VPN: "Personal VPN",
138
+ CapabilityType.SYSTEM_EXTENSION_INSTALL: "System Extension",
139
+ }[self]
140
+ except KeyError:
141
+ return self.get_default_display_name(self.value)
142
+
143
+ @classmethod
144
+ def get_default_display_name(cls, capability_type_value: str) -> str:
145
+ parts = capability_type_value.split("_")
146
+ title = " ".join(parts).title()
147
+ return re.sub(r"(kit)$", "Kit", title)
148
+
105
149
 
106
150
  class CertificateType(ResourceEnum):
107
151
  DEVELOPER_ID_APPLICATION = "DEVELOPER_ID_APPLICATION"
@@ -1,3 +1,5 @@
1
+ from .action import ActionDeprecationInfo
2
+ from .action import action
1
3
  from .action_group import ActionGroup
2
4
  from .action_group import ActionGroupProperties
3
5
  from .argument import Argument
@@ -7,7 +9,6 @@ from .argument import EnvironmentArgumentValue
7
9
  from .argument import TypedCliArgument
8
10
  from .cli_app import CliApp
9
11
  from .cli_app import CliAppException
10
- from .cli_app import action
11
12
  from .cli_app import common_arguments
12
13
  from .cli_process import CliProcess
13
14
  from .cli_types import CommandArg
@@ -0,0 +1,99 @@
1
+ from __future__ import annotations
2
+
3
+ import dataclasses
4
+ import sys
5
+ from functools import wraps
6
+ from typing import TYPE_CHECKING
7
+ from typing import Any
8
+ from typing import Callable
9
+ from typing import Dict
10
+ from typing import Optional
11
+ from typing import TypeVar
12
+
13
+ from .colors import Colors
14
+
15
+ if TYPE_CHECKING:
16
+ from .action_group import ActionGroup
17
+ from .argument import Argument
18
+ from .cli_app import CliApp
19
+
20
+
21
+ _Fn = TypeVar("_Fn", bound=Callable[..., object])
22
+
23
+
24
+ @dataclasses.dataclass(frozen=True)
25
+ class ActionDeprecationInfo:
26
+ alias: str
27
+ version: str
28
+
29
+ def get_message(self, replacement_action_name: str, *colors: Colors) -> str:
30
+ executable_name, _ = replacement_action_name.split(maxsplit=1)
31
+ deprecated_action_name = f"{executable_name} {self.alias}"
32
+ deprecation_message = (
33
+ f"Action `{deprecated_action_name}` was deprecated in version {self.version} "
34
+ f"and replaced by equivalent action `{replacement_action_name}`.\n"
35
+ f"Use `{replacement_action_name}` instead as `{deprecated_action_name}` "
36
+ f"is subject for removal in future releases."
37
+ )
38
+ return Colors.apply(deprecation_message, *colors)
39
+
40
+
41
+ def action(
42
+ action_name: str,
43
+ *arguments: Argument,
44
+ action_group: Optional[ActionGroup] = None,
45
+ action_options: Optional[Dict[str, Any]] = None,
46
+ deprecation_info: Optional[ActionDeprecationInfo] = None,
47
+ ) -> Callable[[_Fn], _Fn]:
48
+ """
49
+ Decorator to mark that the method is usable from CLI
50
+ :param action_name: Name of the CLI parameter
51
+ :param arguments: CLI arguments that are required for this method to work
52
+ :param action_group: CLI argument group under which this action belongs
53
+ :param action_options: Meta information about the action to check whether some conditions are met
54
+ :param deprecation_info: Name and version pair describing the deprecated name of the action for
55
+ backwards compatibility, and in which version it was deprecated.
56
+ The action is registered on the root arguments parser with this name
57
+ without explicit documentation.
58
+ """
59
+
60
+ # Ensure that each argument is used exactly once
61
+ unique_arguments = set()
62
+ function_cli_arguments = []
63
+ for argument in arguments:
64
+ argument_name = f"{argument.__class__.__name__}.{argument.name}"
65
+ if argument_name not in unique_arguments:
66
+ function_cli_arguments.append(argument)
67
+ unique_arguments.add(argument_name)
68
+
69
+ def decorator(func):
70
+ if func.__doc__ is None:
71
+ raise RuntimeError(f'Action "{action_name}" defined by {func} is not documented')
72
+ func.action_group = action_group
73
+ func.action_name = action_name
74
+ func.arguments = function_cli_arguments
75
+ func.is_cli_action = True
76
+ func.deprecation_info = deprecation_info
77
+ func.action_options = action_options or {}
78
+
79
+ @wraps(func)
80
+ def wrapper(self: CliApp, *args, **kwargs):
81
+ if deprecation_info and deprecation_info.alias in sys.argv:
82
+ _notify_deprecated_action_usage(self, action_name, action_group, deprecation_info)
83
+ return func(self, *args, **kwargs)
84
+
85
+ return wrapper
86
+
87
+ return decorator
88
+
89
+
90
+ def _notify_deprecated_action_usage(
91
+ cli_app: CliApp,
92
+ action_name: str,
93
+ action_group: Optional[ActionGroup],
94
+ deprecation_info: ActionDeprecationInfo,
95
+ ):
96
+ executable = cli_app.get_executable_name()
97
+ name_parts = (executable, action_group.name if action_group else None, action_name)
98
+ full_action_name = " ".join(p for p in name_parts if p)
99
+ cli_app.echo(deprecation_info.get_message(full_action_name, Colors.YELLOW, Colors.BOLD))
@@ -1,4 +1,5 @@
1
1
  from .action_callable import ActionCallable
2
+ from .action_callable import DeprecatedActionCallable
2
3
  from .argument import Argument
3
4
  from .argument_formatter import ArgumentFormatter
4
5
  from .argument_parser_builder import ArgumentParserBuilder
@@ -9,6 +9,7 @@ from typing import Optional
9
9
  from typing import Sequence
10
10
 
11
11
  if TYPE_CHECKING:
12
+ from ..action import ActionDeprecationInfo
12
13
  from ..action_group import ActionGroup
13
14
  from .argument import Argument
14
15
 
@@ -19,6 +20,10 @@ class ActionCallable:
19
20
  arguments: Sequence[Argument]
20
21
  is_cli_action: bool
21
22
  action_options: Dict[str, Any]
22
- deprecated_alias: Optional[str]
23
+ deprecation_info: Optional[ActionDeprecationInfo]
23
24
  __name__: str
24
25
  __call__: Callable
26
+
27
+
28
+ class DeprecatedActionCallable(ActionCallable):
29
+ deprecation_info: ActionDeprecationInfo
@@ -39,11 +39,16 @@ class ArgumentParserBuilder:
39
39
 
40
40
  def _create_action_parser(self, parent_parser: SubParsersAction, for_deprecated_alias: bool):
41
41
  if for_deprecated_alias:
42
- if self._cli_action.deprecated_alias is None:
42
+ if self._cli_action.deprecation_info is None:
43
43
  raise RuntimeError(f"Deprecated alias requested for {self._cli_action.action_name} without alias")
44
- deprecation_message = Colors.YELLOW(Colors.BOLD(f"Deprecated alias for `{self._full_action_name}`."))
44
+
45
+ deprecation_message = self._cli_action.deprecation_info.get_message(
46
+ self._full_action_name,
47
+ Colors.YELLOW,
48
+ Colors.BOLD,
49
+ )
45
50
  return parent_parser.add_parser(
46
- self._cli_action.deprecated_alias,
51
+ self._cli_action.deprecation_info.alias,
47
52
  formatter_class=CliHelpFormatter,
48
53
  description=f"{deprecation_message} {Colors.BOLD(self._cli_action.__doc__)}",
49
54
  )
@@ -12,7 +12,6 @@ import shlex
12
12
  import shutil
13
13
  import sys
14
14
  import time
15
- from functools import wraps
16
15
  from itertools import chain
17
16
  from typing import TYPE_CHECKING
18
17
  from typing import Any
@@ -36,6 +35,7 @@ from .action_group import ActionGroup
36
35
  from .argument import ActionCallable
37
36
  from .argument import Argument
38
37
  from .argument import ArgumentParserBuilder
38
+ from .argument import DeprecatedActionCallable
39
39
  from .cli_help_formatter import CliHelpFormatter
40
40
  from .cli_process import CliProcess
41
41
  from .cli_types import CommandArg
@@ -173,7 +173,7 @@ class CliApp(metaclass=abc.ABCMeta):
173
173
  try:
174
174
  return cli_actions[action_key]
175
175
  except KeyError:
176
- deprecated_cli_actions = {ac.deprecated_alias: ac for ac in self.iter_deprecated_cli_actions()}
176
+ deprecated_cli_actions = {ac.deprecation_info.alias: ac for ac in self.iter_deprecated_cli_actions()}
177
177
  return deprecated_cli_actions[action_key]
178
178
 
179
179
  def _invoke_action(self, args: argparse.Namespace):
@@ -320,9 +320,9 @@ class CliApp(metaclass=abc.ABCMeta):
320
320
  for class_action in self.iter_class_cli_actions(action_group=action_group):
321
321
  yield getattr(self, class_action.__name__)
322
322
 
323
- def iter_deprecated_cli_actions(self) -> Iterable[ActionCallable]:
323
+ def iter_deprecated_cli_actions(self) -> Iterable[DeprecatedActionCallable]:
324
324
  for class_action in self.iter_class_cli_actions(include_all=True):
325
- if class_action.deprecated_alias:
325
+ if class_action.deprecation_info:
326
326
  yield getattr(self, class_action.__name__)
327
327
 
328
328
  @classmethod
@@ -385,12 +385,12 @@ class CliApp(metaclass=abc.ABCMeta):
385
385
  deprecated_action_parsers: SubParsersAction,
386
386
  ):
387
387
  ArgumentParserBuilder(cls, main_or_group_action, current_action_parsers).build()
388
- if not main_or_group_action.deprecated_alias:
388
+ if not main_or_group_action.deprecation_info:
389
389
  return
390
390
 
391
391
  # Also register the deprecated alias
392
392
  ArgumentParserBuilder(cls, main_or_group_action, deprecated_action_parsers, for_deprecated_alias=True).build()
393
- CliHelpFormatter.suppress_deprecated_action(main_or_group_action.deprecated_alias)
393
+ CliHelpFormatter.suppress_deprecated_action(main_or_group_action.deprecation_info.alias)
394
394
 
395
395
  def _obfuscate_command(
396
396
  self,
@@ -449,80 +449,11 @@ class CliApp(metaclass=abc.ABCMeta):
449
449
  ).execute(**execute_kwargs)
450
450
 
451
451
 
452
- _Fn = TypeVar("_Fn", bound=Callable[..., object])
453
-
454
-
455
- def action(
456
- action_name: str,
457
- *arguments: Argument,
458
- action_group: Optional[ActionGroup] = None,
459
- action_options: Optional[Dict[str, Any]] = None,
460
- deprecated_alias: Optional[str] = None,
461
- ) -> Callable[[_Fn], _Fn]:
462
- """
463
- Decorator to mark that the method is usable from CLI
464
- :param action_name: Name of the CLI parameter
465
- :param arguments: CLI arguments that are required for this method to work
466
- :param action_group: CLI argument group under which this action belongs
467
- :param action_options: Meta information about the action to check whether some conditions are met
468
- :param deprecated_alias: Deprecated name of the action for backwards compatibility.
469
- The action is registered on the root arguments parser with this name
470
- without explicit documentation.
471
- """
472
-
473
- # Ensure that each argument is used exactly once
474
- unique_arguments = set()
475
- function_cli_arguments = []
476
- for argument in arguments:
477
- argument_name = f"{argument.__class__.__name__}.{argument.name}"
478
- if argument_name not in unique_arguments:
479
- function_cli_arguments.append(argument)
480
- unique_arguments.add(argument_name)
481
-
482
- def decorator(func):
483
- if func.__doc__ is None:
484
- raise RuntimeError(f'Action "{action_name}" defined by {func} is not documented')
485
- func.action_group = action_group
486
- func.action_name = action_name
487
- func.arguments = function_cli_arguments
488
- func.is_cli_action = True
489
- func.deprecated_alias = deprecated_alias
490
- func.action_options = action_options or {}
491
-
492
- @wraps(func)
493
- def wrapper(self: CliApp, *args, **kwargs):
494
- if deprecated_alias and deprecated_alias in sys.argv:
495
- _notify_deprecated_action_usage(self, action_name, action_group, deprecated_alias)
496
- return func(self, *args, **kwargs)
497
-
498
- return wrapper
499
-
500
- return decorator
501
-
502
-
503
- def _notify_deprecated_action_usage(
504
- cli_app: CliApp,
505
- action_name: str,
506
- action_group: Optional[ActionGroup],
507
- deprecated_alias: str,
508
- ):
509
- executable = cli_app.get_executable_name()
510
- name_parts = (executable, action_group.name if action_group else None, action_name)
511
- full_action_name = " ".join(p for p in name_parts if p)
512
- deprecated_action_name = f"{executable} {deprecated_alias}"
513
- deprecation_message = (
514
- f"Using `{deprecated_action_name}` is deprecated and replaced by equivalent action `{full_action_name}`.\n"
515
- f"Use `{full_action_name}` instead as `{deprecated_action_name}` is subject for removal in future releases.\n"
516
- )
517
- cli_app.echo(Colors.apply(deprecation_message, Colors.YELLOW, Colors.BOLD))
518
-
519
-
520
452
  _CliApp = TypeVar("_CliApp", bound=Type[CliApp])
521
453
 
522
454
 
523
455
  def common_arguments(*class_arguments: Argument) -> Callable[[_CliApp], _CliApp]:
524
456
  """
525
- Decorator to mark that the method is usable from CLI
526
457
  :param class_arguments: CLI arguments that are required to initialize the class
527
458
  """
528
459
 
@@ -0,0 +1 @@
1
+ from .app_store_connect import AppStoreConnect
@@ -0,0 +1,4 @@
1
+ if __name__ == "__main__":
2
+ from .app_store_connect import AppStoreConnect
3
+
4
+ AppStoreConnect.invoke_cli()
@@ -24,20 +24,32 @@ from codemagic.apple.resources import BetaBuildLocalization
24
24
  from codemagic.apple.resources import BetaReviewState
25
25
  from codemagic.apple.resources import Build
26
26
  from codemagic.apple.resources import BuildProcessingState
27
+ from codemagic.apple.resources import BundleId
28
+ from codemagic.apple.resources import BundleIdPlatform
29
+ from codemagic.apple.resources import CertificateType
30
+ from codemagic.apple.resources import Device
31
+ from codemagic.apple.resources import DeviceStatus
27
32
  from codemagic.apple.resources import Locale
28
33
  from codemagic.apple.resources import Platform
34
+ from codemagic.apple.resources import Profile
35
+ from codemagic.apple.resources import ProfileState
36
+ from codemagic.apple.resources import ProfileType
29
37
  from codemagic.apple.resources import ReleaseType
30
38
  from codemagic.apple.resources import ResourceId
31
39
  from codemagic.apple.resources import ReviewSubmission
32
40
  from codemagic.apple.resources import ReviewSubmissionItem
33
41
  from codemagic.apple.resources import ReviewSubmissionState
42
+ from codemagic.apple.resources import SigningCertificate
34
43
  from codemagic.mixins import PathFinderMixin
44
+ from codemagic.models import PrivateKey
35
45
 
36
46
  from .arguments import AppStoreVersionInfo
37
47
  from .arguments import AppStoreVersionLocalizationInfo
38
48
  from .arguments import BetaBuildInfo
49
+ from .arguments import CertificateArgument
39
50
  from .arguments import Types
40
- from .resource_manager_mixin import ResourceManagerMixin
51
+ from .mixins import ResourceManagerMixin
52
+ from .mixins import SigningFileSaverMixin
41
53
  from .resource_printer import ResourcePrinter
42
54
 
43
55
  AppStoreVersionLocalizationInfos = Union[
@@ -46,7 +58,12 @@ AppStoreVersionLocalizationInfos = Union[
46
58
  ]
47
59
 
48
60
 
49
- class AbstractBaseAction(ResourceManagerMixin, PathFinderMixin, metaclass=ABCMeta):
61
+ class AbstractBaseAction(
62
+ ResourceManagerMixin,
63
+ SigningFileSaverMixin,
64
+ PathFinderMixin,
65
+ metaclass=ABCMeta,
66
+ ):
50
67
  logger: logging.Logger
51
68
  profiles_directory: pathlib.Path
52
69
  certificates_directory: pathlib.Path
@@ -55,6 +72,21 @@ class AbstractBaseAction(ResourceManagerMixin, PathFinderMixin, metaclass=ABCMet
55
72
  _issuer_id: Optional[IssuerId]
56
73
  _private_key: Optional[str]
57
74
 
75
+ @staticmethod
76
+ def _get_certificate_key(
77
+ certificate_key: Optional[Union[PrivateKey, Types.CertificateKeyArgument]] = None,
78
+ certificate_key_password: Optional[Types.CertificateKeyPasswordArgument] = None,
79
+ ) -> Optional[PrivateKey]:
80
+ if isinstance(certificate_key, PrivateKey):
81
+ return certificate_key
82
+ password = certificate_key_password.value if certificate_key_password else None
83
+ if certificate_key is not None:
84
+ try:
85
+ return PrivateKey.from_buffer(certificate_key.value, password)
86
+ except ValueError:
87
+ CertificateArgument.PRIVATE_KEY.raise_argument_error("Not a valid certificate private key")
88
+ return None
89
+
58
90
  # Define signatures for self-reference to other action groups
59
91
 
60
92
  @property
@@ -186,6 +218,51 @@ class AbstractBaseAction(ResourceManagerMixin, PathFinderMixin, metaclass=ABCMet
186
218
  _ = BetaBuildLocalizationsActionGroup.create_beta_build_localization # Implementation
187
219
  raise NotImplementedError()
188
220
 
221
+ @abstractmethod
222
+ def create_bundle_id(
223
+ self,
224
+ bundle_id_identifier: str,
225
+ bundle_id_name: Optional[str] = None,
226
+ platform: BundleIdPlatform = BundleIdPlatform.IOS,
227
+ should_print: bool = True,
228
+ ) -> BundleId:
229
+ from .action_groups import BundleIdsActionGroup
230
+
231
+ _ = BundleIdsActionGroup.create_bundle_id # Implementation
232
+ raise NotImplementedError()
233
+
234
+ @abstractmethod
235
+ def create_certificate(
236
+ self,
237
+ certificate_type: CertificateType = CertificateType.IOS_DEVELOPMENT,
238
+ certificate_key: Optional[Union[PrivateKey, Types.CertificateKeyArgument]] = None,
239
+ certificate_key_password: Optional[Types.CertificateKeyPasswordArgument] = None,
240
+ p12_container_password: str = "",
241
+ p12_container_save_path: Optional[pathlib.Path] = None,
242
+ save: bool = False,
243
+ should_print: bool = True,
244
+ ) -> SigningCertificate:
245
+ from .action_groups import CertificatesActionGroup
246
+
247
+ _ = CertificatesActionGroup.create_certificate # Implementation
248
+ raise NotImplementedError()
249
+
250
+ @abstractmethod
251
+ def create_profile(
252
+ self,
253
+ bundle_id_resource_id: ResourceId,
254
+ certificate_resource_ids: Sequence[ResourceId],
255
+ device_resource_ids: Optional[Sequence[ResourceId]] = None,
256
+ profile_type: ProfileType = ProfileType.IOS_APP_DEVELOPMENT,
257
+ profile_name: Optional[str] = None,
258
+ save: bool = False,
259
+ should_print: bool = True,
260
+ ) -> Profile:
261
+ from .action_groups import ProfilesActionGroup
262
+
263
+ _ = ProfilesActionGroup.create_profile # Implementation
264
+ raise NotImplementedError()
265
+
189
266
  @abstractmethod
190
267
  def create_review_submission(
191
268
  self,
@@ -260,6 +337,17 @@ class AbstractBaseAction(ResourceManagerMixin, PathFinderMixin, metaclass=ABCMet
260
337
  _ = AppsActionGroup.cancel_review_submissions # Implementation
261
338
  raise NotImplementedError()
262
339
 
340
+ @abstractmethod
341
+ def get_bundle_id(
342
+ self,
343
+ bundle_id_resource_id: ResourceId,
344
+ should_print: bool = True,
345
+ ) -> BundleId:
346
+ from .action_groups import BundleIdsActionGroup
347
+
348
+ _ = BundleIdsActionGroup.get_bundle_id # Implementation
349
+ raise NotImplementedError()
350
+
263
351
  @abstractmethod
264
352
  def list_app_store_version_localizations(
265
353
  self,
@@ -303,9 +391,69 @@ class AbstractBaseAction(ResourceManagerMixin, PathFinderMixin, metaclass=ABCMet
303
391
  build_version_number: Optional[int] = None,
304
392
  should_print: bool = True,
305
393
  ) -> List[Build]:
306
- from ..app_store_connect import AppStoreConnect
394
+ from .action_groups import BuildsActionGroup
395
+
396
+ _ = BuildsActionGroup.list_builds # Implementation
397
+ raise NotImplementedError()
398
+
399
+ @abstractmethod
400
+ def list_bundle_ids(
401
+ self,
402
+ bundle_id_identifier: Optional[str] = None,
403
+ bundle_id_name: Optional[str] = None,
404
+ platform: Optional[BundleIdPlatform] = None,
405
+ bundle_id_identifier_strict_match: bool = False,
406
+ should_print: bool = True,
407
+ ) -> List[BundleId]:
408
+ from .action_groups import BundleIdsActionGroup
409
+
410
+ _ = BundleIdsActionGroup.list_bundle_ids # Implementation
411
+ raise NotImplementedError()
412
+
413
+ @abstractmethod
414
+ def list_bundle_id_profiles(
415
+ self,
416
+ bundle_id_resource_ids: Sequence[ResourceId],
417
+ profile_type: Optional[ProfileType] = None,
418
+ profile_state: Optional[ProfileState] = None,
419
+ profile_name: Optional[str] = None,
420
+ save: bool = False,
421
+ should_print: bool = True,
422
+ ) -> List[Profile]:
423
+ from .action_groups import BundleIdsActionGroup
424
+
425
+ _ = BundleIdsActionGroup.list_bundle_id_profiles # Implementation
426
+ raise NotImplementedError()
427
+
428
+ @abstractmethod
429
+ def list_certificates(
430
+ self,
431
+ certificate_types: Optional[Union[CertificateType, Sequence[CertificateType]]] = None,
432
+ profile_type: Optional[ProfileType] = None,
433
+ display_name: Optional[str] = None,
434
+ certificate_key: Optional[Union[PrivateKey, Types.CertificateKeyArgument]] = None,
435
+ certificate_key_password: Optional[Types.CertificateKeyPasswordArgument] = None,
436
+ p12_container_password: str = "",
437
+ save: bool = False,
438
+ should_print: bool = True,
439
+ **_deprecated_kwargs,
440
+ ) -> List[SigningCertificate]:
441
+ from .action_groups import CertificatesActionGroup
442
+
443
+ _ = CertificatesActionGroup.list_certificates # Implementation
444
+ raise NotImplementedError()
445
+
446
+ @abstractmethod
447
+ def list_devices(
448
+ self,
449
+ platform: Optional[BundleIdPlatform] = None,
450
+ device_name: Optional[str] = None,
451
+ device_status: Optional[DeviceStatus] = None,
452
+ should_print: bool = True,
453
+ ) -> List[Device]:
454
+ from .action_groups import DevicesActionGroup
307
455
 
308
- _ = AppStoreConnect.list_builds # Implementation
456
+ _ = DevicesActionGroup.list_devices # Implementation
309
457
  raise NotImplementedError()
310
458
 
311
459
  @abstractmethod