codemagic-cli-tools 0.49.0__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 (412) hide show
  1. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/PKG-INFO +1 -1
  2. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/pyproject.toml +1 -1
  3. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/src/codemagic/__version__.py +1 -1
  4. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/src/codemagic/__version__.py-e +1 -1
  5. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/src/codemagic/apple/resources/bundle_id_capability.py +11 -0
  6. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/src/codemagic/apple/resources/enums.py +46 -2
  7. codemagic_cli_tools-0.50.0/src/codemagic/tools/app_store_connect/action_groups/bundle_ids_action_group.py +317 -0
  8. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/src/codemagic/tools/app_store_connect/arguments.py +12 -0
  9. codemagic_cli_tools-0.50.0/tests/apple/resources/enums/test_capability_type.py +77 -0
  10. codemagic_cli_tools-0.50.0/tests/apple/resources/test_bundle_id_capability_resource.py +21 -0
  11. codemagic_cli_tools-0.49.0/src/codemagic/tools/app_store_connect/action_groups/bundle_ids_action_group.py +0 -165
  12. codemagic_cli_tools-0.49.0/tests/apple/resources/test_bundle_id_capability_resource.py +0 -8
  13. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/LICENSE +0 -0
  14. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/README.md +0 -0
  15. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/src/codemagic/__init__.py +0 -0
  16. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/src/codemagic/apple/__init__.py +0 -0
  17. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/src/codemagic/apple/app_store_connect/__init__.py +0 -0
  18. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/src/codemagic/apple/app_store_connect/api_client.py +0 -0
  19. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/src/codemagic/apple/app_store_connect/api_error.py +0 -0
  20. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/src/codemagic/apple/app_store_connect/api_session.py +0 -0
  21. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/src/codemagic/apple/app_store_connect/apps/__init__.py +0 -0
  22. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/src/codemagic/apple/app_store_connect/apps/apps.py +0 -0
  23. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/src/codemagic/apple/app_store_connect/builds/__init__.py +0 -0
  24. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/src/codemagic/apple/app_store_connect/builds/builds.py +0 -0
  25. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/src/codemagic/apple/app_store_connect/json_web_token_manager.py +0 -0
  26. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/src/codemagic/apple/app_store_connect/provisioning/__init__.py +0 -0
  27. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/src/codemagic/apple/app_store_connect/provisioning/bundle_id_capabilities.py +0 -0
  28. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/src/codemagic/apple/app_store_connect/provisioning/bundle_ids.py +0 -0
  29. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/src/codemagic/apple/app_store_connect/provisioning/devices.py +0 -0
  30. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/src/codemagic/apple/app_store_connect/provisioning/profiles.py +0 -0
  31. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/src/codemagic/apple/app_store_connect/provisioning/signing_certificates.py +0 -0
  32. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/src/codemagic/apple/app_store_connect/resource_manager.py +0 -0
  33. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/src/codemagic/apple/app_store_connect/testflight/__init__.py +0 -0
  34. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/src/codemagic/apple/app_store_connect/testflight/beta_groups.py +0 -0
  35. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/src/codemagic/apple/app_store_connect/type_declarations.py +0 -0
  36. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/src/codemagic/apple/app_store_connect/versioning/__init__.py +0 -0
  37. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/src/codemagic/apple/app_store_connect/versioning/app_store_version_localizations.py +0 -0
  38. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/src/codemagic/apple/app_store_connect/versioning/app_store_version_submissions.py +0 -0
  39. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/src/codemagic/apple/app_store_connect/versioning/app_store_versions.py +0 -0
  40. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/src/codemagic/apple/app_store_connect/versioning/beta_app_review_submissions.py +0 -0
  41. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/src/codemagic/apple/app_store_connect/versioning/beta_build_localizations.py +0 -0
  42. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/src/codemagic/apple/app_store_connect/versioning/pre_release_versions.py +0 -0
  43. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/src/codemagic/apple/app_store_connect/versioning/review_submission_items.py +0 -0
  44. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/src/codemagic/apple/app_store_connect/versioning/review_submissions.py +0 -0
  45. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/src/codemagic/apple/resources/__init__.py +0 -0
  46. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/src/codemagic/apple/resources/app.py +0 -0
  47. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/src/codemagic/apple/resources/app_store_version.py +0 -0
  48. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/src/codemagic/apple/resources/app_store_version_localization.py +0 -0
  49. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/src/codemagic/apple/resources/app_store_version_submission.py +0 -0
  50. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/src/codemagic/apple/resources/beta_app_localization.py +0 -0
  51. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/src/codemagic/apple/resources/beta_app_review_detail.py +0 -0
  52. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/src/codemagic/apple/resources/beta_app_review_submission.py +0 -0
  53. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/src/codemagic/apple/resources/beta_build_localization.py +0 -0
  54. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/src/codemagic/apple/resources/beta_group.py +0 -0
  55. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/src/codemagic/apple/resources/build.py +0 -0
  56. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/src/codemagic/apple/resources/build_beta_detail.py +0 -0
  57. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/src/codemagic/apple/resources/bundle_id.py +0 -0
  58. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/src/codemagic/apple/resources/device.py +0 -0
  59. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/src/codemagic/apple/resources/error_response.py +0 -0
  60. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/src/codemagic/apple/resources/pre_release_version.py +0 -0
  61. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/src/codemagic/apple/resources/profile.py +0 -0
  62. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/src/codemagic/apple/resources/resource.py +0 -0
  63. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/src/codemagic/apple/resources/review_submission.py +0 -0
  64. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/src/codemagic/apple/resources/review_submission_item.py +0 -0
  65. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/src/codemagic/apple/resources/signing_certificate.py +0 -0
  66. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/src/codemagic/cli/__init__.py +0 -0
  67. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/src/codemagic/cli/action.py +0 -0
  68. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/src/codemagic/cli/action_group.py +0 -0
  69. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/src/codemagic/cli/argument/__init__.py +0 -0
  70. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/src/codemagic/cli/argument/action_callable.py +0 -0
  71. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/src/codemagic/cli/argument/argument.py +0 -0
  72. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/src/codemagic/cli/argument/argument_formatter.py +0 -0
  73. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/src/codemagic/cli/argument/argument_parser_builder.py +0 -0
  74. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/src/codemagic/cli/argument/argument_properties.py +0 -0
  75. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/src/codemagic/cli/argument/common_argument_types.py +0 -0
  76. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/src/codemagic/cli/argument/typed_cli_argument.py +0 -0
  77. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/src/codemagic/cli/cli_app.py +0 -0
  78. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/src/codemagic/cli/cli_help_formatter.py +0 -0
  79. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/src/codemagic/cli/cli_process.py +0 -0
  80. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/src/codemagic/cli/cli_process_stream.py +0 -0
  81. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/src/codemagic/cli/cli_types.py +0 -0
  82. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/src/codemagic/cli/colors.py +0 -0
  83. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/src/codemagic/cli/environment.py +0 -0
  84. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/src/codemagic/data/jars/bundletool-all-1.13.1.jar +0 -0
  85. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/src/codemagic/google/__init__.py +0 -0
  86. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/src/codemagic/google/errors.py +0 -0
  87. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/src/codemagic/google/firebase_client.py +0 -0
  88. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/src/codemagic/google/google_client.py +0 -0
  89. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/src/codemagic/google/resource_managers/__init__.py +0 -0
  90. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/src/codemagic/google/resource_managers/mixins/__init__.py +0 -0
  91. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/src/codemagic/google/resource_managers/mixins/acting_manager_mixin.py +0 -0
  92. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/src/codemagic/google/resource_managers/mixins/listing_manager_mixin.py +0 -0
  93. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/src/codemagic/google/resource_managers/release_manager.py +0 -0
  94. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/src/codemagic/google/resource_managers/resource_manager.py +0 -0
  95. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/src/codemagic/google/resources/__init__.py +0 -0
  96. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/src/codemagic/google/resources/identifiers/__init__.py +0 -0
  97. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/src/codemagic/google/resources/identifiers/app_identifier.py +0 -0
  98. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/src/codemagic/google/resources/identifiers/resource_identifier.py +0 -0
  99. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/src/codemagic/google/resources/release.py +0 -0
  100. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/src/codemagic/google/resources/release_notes.py +0 -0
  101. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/src/codemagic/google/resources/resource.py +0 -0
  102. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/src/codemagic/google_play/__init__.py +0 -0
  103. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/src/codemagic/google_play/api_client.py +0 -0
  104. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/src/codemagic/google_play/api_error.py +0 -0
  105. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/src/codemagic/google_play/resources/__init__.py +0 -0
  106. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/src/codemagic/google_play/resources/edit.py +0 -0
  107. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/src/codemagic/google_play/resources/enums.py +0 -0
  108. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/src/codemagic/google_play/resources/resource.py +0 -0
  109. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/src/codemagic/google_play/resources/track.py +0 -0
  110. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/src/codemagic/mixins/__init__.py +0 -0
  111. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/src/codemagic/mixins/path_finder.py +0 -0
  112. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/src/codemagic/mixins/running_cli_app.py +0 -0
  113. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/src/codemagic/mixins/str_converter.py +0 -0
  114. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/src/codemagic/models/__init__.py +0 -0
  115. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/src/codemagic/models/altool/__init__.py +0 -0
  116. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/src/codemagic/models/altool/altool.py +0 -0
  117. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/src/codemagic/models/altool/altool_result.py +0 -0
  118. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/src/codemagic/models/altool/enums.py +0 -0
  119. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/src/codemagic/models/android_signing_info.py +0 -0
  120. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/src/codemagic/models/application_package/__init__.py +0 -0
  121. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/src/codemagic/models/application_package/abstract_package.py +0 -0
  122. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/src/codemagic/models/application_package/ipa.py +0 -0
  123. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/src/codemagic/models/application_package/macos_package.py +0 -0
  124. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/src/codemagic/models/bundle_id_detector.py +0 -0
  125. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/src/codemagic/models/certificate.py +0 -0
  126. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/src/codemagic/models/certificate_attributes.py +0 -0
  127. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/src/codemagic/models/certificate_p12_exporter.py +0 -0
  128. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/src/codemagic/models/code_sign_entitlements.py +0 -0
  129. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/src/codemagic/models/code_signing_settings_manager.py +0 -0
  130. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/src/codemagic/models/enums.py +0 -0
  131. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/src/codemagic/models/export_options.py +0 -0
  132. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/src/codemagic/models/json_serializable.py +0 -0
  133. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/src/codemagic/models/junit/__init__.py +0 -0
  134. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/src/codemagic/models/junit/definitions.py +0 -0
  135. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/src/codemagic/models/junit/printer.py +0 -0
  136. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/src/codemagic/models/keystore.py +0 -0
  137. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/src/codemagic/models/pbx_project.py +0 -0
  138. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/src/codemagic/models/private_key.py +0 -0
  139. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/src/codemagic/models/provisioning_profile.py +0 -0
  140. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/src/codemagic/models/simulator/__init__.py +0 -0
  141. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/src/codemagic/models/simulator/core_simulator_service.py +0 -0
  142. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/src/codemagic/models/simulator/runtime.py +0 -0
  143. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/src/codemagic/models/simulator/simulator.py +0 -0
  144. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/src/codemagic/models/table/__init__.py +0 -0
  145. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/src/codemagic/models/table/line.py +0 -0
  146. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/src/codemagic/models/table/table.py +0 -0
  147. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/src/codemagic/models/xcode.py +0 -0
  148. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/src/codemagic/models/xcodebuild.py +0 -0
  149. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/src/codemagic/models/xcpretty.py +0 -0
  150. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/src/codemagic/models/xctests/__init__.py +0 -0
  151. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/src/codemagic/models/xctests/collector.py +0 -0
  152. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/src/codemagic/models/xctests/converter.py +0 -0
  153. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/src/codemagic/models/xctests/xcresult.py +0 -0
  154. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/src/codemagic/models/xctests/xcresulttool.py +0 -0
  155. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/src/codemagic/py.typed +0 -0
  156. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/src/codemagic/scripts/code_signing_manager.rb +0 -0
  157. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/src/codemagic/shell_tools/__init__.py +0 -0
  158. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/src/codemagic/shell_tools/abstract_shell_tool.py +0 -0
  159. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/src/codemagic/shell_tools/keytool.py +0 -0
  160. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/src/codemagic/tools/__init__.py +0 -0
  161. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/src/codemagic/tools/_xcode_project/__init__.py +0 -0
  162. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/src/codemagic/tools/_xcode_project/arguments.py +0 -0
  163. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/src/codemagic/tools/android_app_bundle.py +0 -0
  164. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/src/codemagic/tools/android_keystore/__init__.py +0 -0
  165. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/src/codemagic/tools/android_keystore/__main__.py +0 -0
  166. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/src/codemagic/tools/android_keystore/android_keystore.py +0 -0
  167. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/src/codemagic/tools/android_keystore/argument_types.py +0 -0
  168. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/src/codemagic/tools/android_keystore/arguments.py +0 -0
  169. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/src/codemagic/tools/app_store_connect/__init__.py +0 -0
  170. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/src/codemagic/tools/app_store_connect/__main__.py +0 -0
  171. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/src/codemagic/tools/app_store_connect/abstract_base_action.py +0 -0
  172. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/src/codemagic/tools/app_store_connect/action_group.py +0 -0
  173. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/src/codemagic/tools/app_store_connect/action_groups/__init__.py +0 -0
  174. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/src/codemagic/tools/app_store_connect/action_groups/app_store_version_localizations_action_group.py +0 -0
  175. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/src/codemagic/tools/app_store_connect/action_groups/app_store_version_submissions_action_group.py +0 -0
  176. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/src/codemagic/tools/app_store_connect/action_groups/app_store_versions_action_group.py +0 -0
  177. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/src/codemagic/tools/app_store_connect/action_groups/apps_action_group.py +0 -0
  178. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/src/codemagic/tools/app_store_connect/action_groups/beta_app_review_submissions_action_group.py +0 -0
  179. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/src/codemagic/tools/app_store_connect/action_groups/beta_build_localizations_action_group.py +0 -0
  180. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/src/codemagic/tools/app_store_connect/action_groups/beta_groups_action_group.py +0 -0
  181. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/src/codemagic/tools/app_store_connect/action_groups/builds_action_group.py +0 -0
  182. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/src/codemagic/tools/app_store_connect/action_groups/certificates_action_group.py +0 -0
  183. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/src/codemagic/tools/app_store_connect/action_groups/devices_action_group.py +0 -0
  184. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/src/codemagic/tools/app_store_connect/action_groups/profiles_action_group.py +0 -0
  185. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/src/codemagic/tools/app_store_connect/action_groups/review_submission_items_actions_group.py +0 -0
  186. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/src/codemagic/tools/app_store_connect/action_groups/review_submissions_actions_group.py +0 -0
  187. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/src/codemagic/tools/app_store_connect/actions/__init__.py +0 -0
  188. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/src/codemagic/tools/app_store_connect/actions/fetch_signing_files_action.py +0 -0
  189. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/src/codemagic/tools/app_store_connect/actions/latest_build_number_actions.py +0 -0
  190. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/src/codemagic/tools/app_store_connect/actions/publish_action.py +0 -0
  191. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/src/codemagic/tools/app_store_connect/app_store_connect.py +0 -0
  192. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/src/codemagic/tools/app_store_connect/errors.py +0 -0
  193. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/src/codemagic/tools/app_store_connect/mixins/__init__.py +0 -0
  194. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/src/codemagic/tools/app_store_connect/mixins/resource_manager_mixin.py +0 -0
  195. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/src/codemagic/tools/app_store_connect/mixins/signing_file_saver_mixin.py +0 -0
  196. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/src/codemagic/tools/app_store_connect/resource_printer.py +0 -0
  197. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/src/codemagic/tools/codemagic_cli_tools.py +0 -0
  198. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/src/codemagic/tools/firebase_app_distribution/__init__.py +0 -0
  199. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/src/codemagic/tools/firebase_app_distribution/__main__.py +0 -0
  200. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/src/codemagic/tools/firebase_app_distribution/action_groups/__init__.py +0 -0
  201. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/src/codemagic/tools/firebase_app_distribution/action_groups/firebase_action_groups.py +0 -0
  202. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/src/codemagic/tools/firebase_app_distribution/action_groups/releases_action_group.py +0 -0
  203. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/src/codemagic/tools/firebase_app_distribution/actions/__init__.py +0 -0
  204. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/src/codemagic/tools/firebase_app_distribution/actions/get_latest_build_version_action.py +0 -0
  205. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/src/codemagic/tools/firebase_app_distribution/argument_types.py +0 -0
  206. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/src/codemagic/tools/firebase_app_distribution/arguments.py +0 -0
  207. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/src/codemagic/tools/firebase_app_distribution/errors.py +0 -0
  208. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/src/codemagic/tools/firebase_app_distribution/firebase_app_distribution.py +0 -0
  209. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/src/codemagic/tools/firebase_app_distribution/firebase_app_distribution_action.py +0 -0
  210. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/src/codemagic/tools/firebase_app_distribution/resource_printer.py +0 -0
  211. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/src/codemagic/tools/git_changelog.py +0 -0
  212. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/src/codemagic/tools/google_play/__init__.py +0 -0
  213. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/src/codemagic/tools/google_play/__main__.py +0 -0
  214. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/src/codemagic/tools/google_play/action_groups/__init__.py +0 -0
  215. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/src/codemagic/tools/google_play/action_groups/google_play_action_groups.py +0 -0
  216. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/src/codemagic/tools/google_play/action_groups/tracks_action_group.py +0 -0
  217. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/src/codemagic/tools/google_play/actions/__init__.py +0 -0
  218. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/src/codemagic/tools/google_play/actions/get_latest_build_number_action.py +0 -0
  219. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/src/codemagic/tools/google_play/argument_types.py +0 -0
  220. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/src/codemagic/tools/google_play/arguments.py +0 -0
  221. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/src/codemagic/tools/google_play/errors.py +0 -0
  222. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/src/codemagic/tools/google_play/google_play.py +0 -0
  223. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/src/codemagic/tools/google_play/google_play_base_action.py +0 -0
  224. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/src/codemagic/tools/keychain.py +0 -0
  225. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/src/codemagic/tools/universal_apk_generator.py +0 -0
  226. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/src/codemagic/tools/xcode_project.py +0 -0
  227. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/src/codemagic/utilities/__init__.py +0 -0
  228. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/src/codemagic/utilities/auditing/__init__.py +0 -0
  229. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/src/codemagic/utilities/auditing/base_auditor.py +0 -0
  230. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/src/codemagic/utilities/auditing/exception_auditor.py +0 -0
  231. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/src/codemagic/utilities/auditing/http_request_auditor.py +0 -0
  232. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/src/codemagic/utilities/backwards_file_reader.py +0 -0
  233. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/src/codemagic/utilities/case_conversion.py +0 -0
  234. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/src/codemagic/utilities/decorators.py +0 -0
  235. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/src/codemagic/utilities/levenshtein_distance.py +0 -0
  236. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/src/codemagic/utilities/log.py +0 -0
  237. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/src/codemagic/utilities/versions.py +0 -0
  238. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/tests/__init__.py +0 -0
  239. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/tests/apple/__init__.py +0 -0
  240. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/tests/apple/app_store_connect/__init__.py +0 -0
  241. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/tests/apple/app_store_connect/apps/__init__.py +0 -0
  242. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/tests/apple/app_store_connect/apps/test_apps.py +0 -0
  243. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/tests/apple/app_store_connect/builds/__init__.py +0 -0
  244. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/tests/apple/app_store_connect/builds/test_builds.py +0 -0
  245. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/tests/apple/app_store_connect/provisioning/__init__.py +0 -0
  246. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/tests/apple/app_store_connect/provisioning/conftest.py +0 -0
  247. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/tests/apple/app_store_connect/provisioning/test_bundle_id_capabilities.py +0 -0
  248. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/tests/apple/app_store_connect/provisioning/test_bundle_ids.py +0 -0
  249. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/tests/apple/app_store_connect/provisioning/test_devices.py +0 -0
  250. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/tests/apple/app_store_connect/provisioning/test_profiles.py +0 -0
  251. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/tests/apple/app_store_connect/provisioning/test_signing_certificates.py +0 -0
  252. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/tests/apple/app_store_connect/resource_manager_test_base.py +0 -0
  253. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/tests/apple/app_store_connect/test_api_client.py +0 -0
  254. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/tests/apple/app_store_connect/test_api_session.py +0 -0
  255. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/tests/apple/app_store_connect/test_json_web_token_manager.py +0 -0
  256. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/tests/apple/app_store_connect/test_resource_manager.py +0 -0
  257. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/tests/apple/app_store_connect/testflight/__init__.py +0 -0
  258. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/tests/apple/app_store_connect/testflight/test_beta_groups.py +0 -0
  259. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/tests/apple/app_store_connect/versioning/test_app_store_version_localizations.py +0 -0
  260. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/tests/apple/app_store_connect/versioning/test_app_store_version_submissions.py +0 -0
  261. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/tests/apple/app_store_connect/versioning/test_app_store_versions.py +0 -0
  262. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/tests/apple/app_store_connect/versioning/test_beta_app_review_submissions.py +0 -0
  263. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/tests/apple/app_store_connect/versioning/test_beta_build_localizations.py +0 -0
  264. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/tests/apple/app_store_connect/versioning/test_pre_release_versions.py +0 -0
  265. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/tests/apple/app_store_connect/versioning/test_review_submission_items.py +0 -0
  266. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/tests/apple/app_store_connect/versioning/test_review_submissions.py +0 -0
  267. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/tests/apple/resources/__init__.py +0 -0
  268. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/tests/apple/resources/conftest.py +0 -0
  269. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/tests/apple/resources/enums/__init__.py +0 -0
  270. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/tests/apple/resources/enums/test_certificate_type.py +0 -0
  271. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/tests/apple/resources/enums/test_profile_type.py +0 -0
  272. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/tests/apple/resources/mocks/app_store_version.json +0 -0
  273. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/tests/apple/resources/mocks/build.json +0 -0
  274. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/tests/apple/resources/mocks/bundle_id.json +0 -0
  275. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/tests/apple/resources/mocks/bundle_id_capability.json +0 -0
  276. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/tests/apple/resources/mocks/certificate.json +0 -0
  277. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/tests/apple/resources/mocks/device.json +0 -0
  278. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/tests/apple/resources/mocks/error_response.json +0 -0
  279. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/tests/apple/resources/mocks/error_response_entity_state_invalid.json +0 -0
  280. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/tests/apple/resources/mocks/error_response_with_links.json +0 -0
  281. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/tests/apple/resources/mocks/mock_resource.json +0 -0
  282. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/tests/apple/resources/mocks/pre_release_version.json +0 -0
  283. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/tests/apple/resources/mocks/profile.json +0 -0
  284. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/tests/apple/resources/test_app_store_version_resource.py +0 -0
  285. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/tests/apple/resources/test_build_resource.py +0 -0
  286. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/tests/apple/resources/test_bundle_id_resource.py +0 -0
  287. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/tests/apple/resources/test_device_resource.py +0 -0
  288. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/tests/apple/resources/test_error_response.py +0 -0
  289. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/tests/apple/resources/test_pre_release_version_resource.py +0 -0
  290. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/tests/apple/resources/test_profile_resource.py +0 -0
  291. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/tests/apple/resources/test_resource.py +0 -0
  292. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/tests/apple/resources/test_signing_certificate_resource.py +0 -0
  293. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/tests/apple/resources/test_undefined_resource_fields.py +0 -0
  294. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/tests/cli/__init__.py +0 -0
  295. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/tests/cli/argument/__init__.py +0 -0
  296. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/tests/cli/argument/common_argument_types/__init__.py +0 -0
  297. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/tests/cli/argument/common_argument_types/test_bounded_number.py +0 -0
  298. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/tests/cli/argument/common_argument_types/test_iso_8601_datetime.py +0 -0
  299. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/tests/cli/argument/common_argument_types/test_maybe_dir.py +0 -0
  300. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/tests/cli/argument/test_argument.py +0 -0
  301. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/tests/cli/mocks/utf-8-sample.txt +0 -0
  302. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/tests/cli/test_cli_process.py +0 -0
  303. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/tests/cli/test_decorators.py +0 -0
  304. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/tests/conftest.py +0 -0
  305. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/tests/google/__init__.py +0 -0
  306. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/tests/google/conftest.py +0 -0
  307. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/tests/google/test_firebase_client.py +0 -0
  308. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/tests/google/test_live_firebase_client.py +0 -0
  309. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/tests/google_play/__init__.py +0 -0
  310. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/tests/google_play/resources/__init__.py +0 -0
  311. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/tests/google_play/resources/conftest.py +0 -0
  312. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/tests/google_play/resources/mocks/edit.json +0 -0
  313. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/tests/google_play/resources/mocks/track.json +0 -0
  314. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/tests/google_play/resources/test_edit_resource.py +0 -0
  315. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/tests/google_play/resources/test_resource_print.py +0 -0
  316. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/tests/google_play/resources/test_track_resource.py +0 -0
  317. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/tests/google_play/test_api_client.py +0 -0
  318. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/tests/mixins/__init__.py +0 -0
  319. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/tests/mixins/test_string_converter.py +0 -0
  320. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/tests/mocks/certificate.asn1 +0 -0
  321. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/tests/mocks/encrypted.pem +0 -0
  322. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/tests/mocks/encrypted.pem.pub +0 -0
  323. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/tests/mocks/unencrypted.pem +0 -0
  324. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/tests/mocks/unencrypted.pem.pub +0 -0
  325. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/tests/models/__init__.py +0 -0
  326. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/tests/models/altool/__init__.py +0 -0
  327. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/tests/models/altool/mocks/mock_failure_auth.txt +0 -0
  328. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/tests/models/altool/mocks/mock_failure_other.txt +0 -0
  329. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/tests/models/altool/mocks/mock_upload_success.json +0 -0
  330. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/tests/models/altool/mocks/mock_validation_failure.json +0 -0
  331. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/tests/models/altool/test_altool_result.py +0 -0
  332. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/tests/models/altool/test_altool_retrying.py +0 -0
  333. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/tests/models/conftest.py +0 -0
  334. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/tests/models/enums/__init__.py +0 -0
  335. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/tests/models/enums/test_resource_enum.py +0 -0
  336. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/tests/models/junit/__init__.py +0 -0
  337. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/tests/models/junit/mocks/testsuite.xml +0 -0
  338. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/tests/models/junit/test_xml_generation.py +0 -0
  339. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/tests/models/mocks/certificate-no-password.p12 +0 -0
  340. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/tests/models/mocks/certificate.p12 +0 -0
  341. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/tests/models/mocks/codemagic_io_wildcard_development.mobileprovision +0 -0
  342. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/tests/models/mocks/export_options.plist +0 -0
  343. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/tests/models/mocks/mock.ipa +0 -0
  344. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/tests/models/mocks/mock.xcarchive/Products/Applications/Capybara App.app/Capybara App +0 -0
  345. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/tests/models/mocks/mock_0_icloud_container_environments.plist +0 -0
  346. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/tests/models/mocks/mock_1_icloud_container_environments.plist +0 -0
  347. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/tests/models/mocks/mock_2_icloud_container_environments.plist +0 -0
  348. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/tests/models/mocks/mock_openssh_private_key +0 -0
  349. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/tests/models/mocks/mock_rsa_private_key +0 -0
  350. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/tests/models/mocks/mock_xcode/Contents/version.plist +0 -0
  351. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/tests/models/simulator/__init__.py +0 -0
  352. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/tests/models/simulator/mocks/devices.json +0 -0
  353. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/tests/models/simulator/mocks/simulator.json +0 -0
  354. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/tests/models/simulator/test_runtime.py +0 -0
  355. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/tests/models/simulator/test_simulator.py +0 -0
  356. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/tests/models/test_certificate.py +0 -0
  357. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/tests/models/test_certificate_attributes.py +0 -0
  358. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/tests/models/test_code_sign_entitlements.py +0 -0
  359. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/tests/models/test_export_options.py +0 -0
  360. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/tests/models/test_private_key.py +0 -0
  361. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/tests/models/test_provisioning_profile.py +0 -0
  362. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/tests/models/test_table.py +0 -0
  363. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/tests/models/test_xcode.py +0 -0
  364. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/tests/models/xctests/__init__.py +0 -0
  365. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/tests/models/xctests/conftest.py +0 -0
  366. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/tests/models/xctests/mocks/0_1NtPgUPcB1A83X977l5Q91ElstUeVDnqAhumk_VJG8DIS4GA1sb8ElPPHZZGYEHmNvnHU1VVaPDCw1tI8n3uXg__.json +0 -0
  367. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/tests/models/xctests/mocks/0_5rAUs3HknUI7DU8Jyc5RlFcosqCXTOV-qwOaOE1Mul_ppK8QCta-NSxxCdtVg6i12km4zTR5l0SjgzfHGUNxog__.json +0 -0
  368. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/tests/models/xctests/mocks/0_97T9qQZ3dEI1oDS6NvYTPcFk_jUXFJ0NRwyd5FZ2S585JGMtlqbF28Hc85yeifgKEnNoInoW93Za9c5QJCspeQ__.json +0 -0
  369. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/tests/models/xctests/mocks/0_DVcJZnHFaQQlzl8czovv7RuDRQIToEr5_3lLe-Mn1Sm6VreJ5xoXEFqBaWNv0XRmSg00NJ77XzQKgddhfkuk7w__.json +0 -0
  370. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/tests/models/xctests/mocks/0_FZMbIp5VAUEiJv1wUUM-K78Dtmb4o-titbTusDJqRuarbS9OatzAykygXo4NUqEoR9sxCIoeu8VDioQmbba6mw__.json +0 -0
  371. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/tests/models/xctests/mocks/0_Hj6SOUxY1APmxdQEA2HdqbA52GD3WJE571nqr_Z-w8vi_buxP-GUjNxCsGYQvnKnnwlyykwxY-KJmjqKYmPyXQ__.json +0 -0
  372. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/tests/models/xctests/mocks/0_NnCmQ8rMqVyUBgL3ZDjfjJ9Vt1AMGeMzZPkDH30rGMYer0pFDpp4UDZlCEHRImO-48LdC_KdcbjP70IZA6zKUQ__.json +0 -0
  373. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/tests/models/xctests/mocks/0_YK9aPHVT-grv_ZVooRT79GBO9n82BNogkuWVzFO6itJEtbtsRTQpK2-0ZDLot1JpCfPb26aZwEZjeb9G4GHiBQ__.json +0 -0
  374. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/tests/models/xctests/mocks/0__H1_RrdBT9b-ZhkWCQiRKpHlwURmyWUudeOhj5UslLXhXl8mr9w5CGqdobi9A5wCVEIRMsO4yuFyzx2gMPr-_Q__.json +0 -0
  375. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/tests/models/xctests/mocks/0_evvkuGf92MVrmIvhr07911LuRTiPBKDjIQ0q_7L-mPGGYkWVKMBPQ5pB5lbjoaOnvr0fpC9k003EunfwSdss2g__.json +0 -0
  376. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/tests/models/xctests/mocks/actions_invocation_record.json +0 -0
  377. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/tests/models/xctests/test_collector.py +0 -0
  378. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/tests/models/xctests/test_converter.py +0 -0
  379. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/tests/models/xctests/test_xcresult.py +0 -0
  380. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/tests/shell_tools/__init__.py +0 -0
  381. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/tests/shell_tools/keytool/__init__.py +0 -0
  382. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/tests/shell_tools/keytool/conftest.py +0 -0
  383. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/tests/shell_tools/keytool/mocks/android.ks +0 -0
  384. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/tests/shell_tools/keytool/mocks/non-rfc-cert-keystore.jks +0 -0
  385. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/tests/shell_tools/keytool/mocks/non-rfc-cert-keystore.p12 +0 -0
  386. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/tests/shell_tools/keytool/mocks/rfc-cert-keystore.jks +0 -0
  387. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/tests/shell_tools/keytool/mocks/rfc-cert-keystore.p12 +0 -0
  388. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/tests/shell_tools/keytool/test_get_certificate.py +0 -0
  389. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/tests/shell_tools/keytool/test_get_certificates.py +0 -0
  390. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/tests/shell_tools/keytool/test_validate.py +0 -0
  391. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/tests/tools/__init__.py +0 -0
  392. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/tests/tools/app_store_connect/__init__.py +0 -0
  393. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/tests/tools/app_store_connect/arguments/__init__.py +0 -0
  394. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/tests/tools/app_store_connect/arguments/test_beta_build_localizations.py +0 -0
  395. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/tests/tools/app_store_connect/conftest.py +0 -0
  396. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/tests/tools/app_store_connect/mocks/AuthKeyMock.p8 +0 -0
  397. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/tests/tools/app_store_connect/test_from_cli_args.py +0 -0
  398. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/tests/tools/app_store_connect/test_publish_action.py +0 -0
  399. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/tests/tools/mocks/firebase_releases.json +0 -0
  400. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/tests/tools/mocks/google_play_tracks.json +0 -0
  401. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/tests/tools/test_android_app_bundle.py +0 -0
  402. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/tests/tools/test_firebase_app_distribution.py +0 -0
  403. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/tests/tools/test_google_play.py +0 -0
  404. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/tests/tools/test_keychain.py +0 -0
  405. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/tests/tools/test_universal_apk_generator.py +0 -0
  406. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/tests/utilities/__init__.py +0 -0
  407. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/tests/utilities/decorators/__init__.py +0 -0
  408. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/tests/utilities/decorators/test_deprecated.py +0 -0
  409. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/tests/utilities/test_backwards_file_reader.py +0 -0
  410. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/tests/utilities/test_case_conversion.py +0 -0
  411. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.0}/tests/utilities/test_levenshtein_distance.py +0 -0
  412. {codemagic_cli_tools-0.49.0 → 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.49.0
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.49.0"
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.49.0'
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.49.0.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"
@@ -0,0 +1,317 @@
1
+ from __future__ import annotations
2
+
3
+ from abc import ABCMeta
4
+ from typing import List
5
+ from typing import Optional
6
+ from typing import Sequence
7
+ from typing import Union
8
+
9
+ from codemagic import cli
10
+ from codemagic.apple import AppStoreConnectApiError
11
+ from codemagic.apple.resources import BundleId
12
+ from codemagic.apple.resources import BundleIdCapability
13
+ from codemagic.apple.resources import BundleIdPlatform
14
+ from codemagic.apple.resources import CapabilityType
15
+ from codemagic.apple.resources import Profile
16
+ from codemagic.apple.resources import ProfileState
17
+ from codemagic.apple.resources import ProfileType
18
+ from codemagic.apple.resources import ResourceId
19
+ from codemagic.cli import Colors
20
+
21
+ from ..abstract_base_action import AbstractBaseAction
22
+ from ..action_group import AppStoreConnectActionGroup
23
+ from ..arguments import BundleIdArgument
24
+ from ..arguments import CommonArgument
25
+ from ..arguments import ProfileArgument
26
+ from ..errors import AppStoreConnectError
27
+
28
+
29
+ class BundleIdsActionGroup(AbstractBaseAction, metaclass=ABCMeta):
30
+ @cli.action(
31
+ "create",
32
+ BundleIdArgument.BUNDLE_ID_IDENTIFIER,
33
+ BundleIdArgument.BUNDLE_ID_NAME,
34
+ BundleIdArgument.PLATFORM,
35
+ action_group=AppStoreConnectActionGroup.BUNDLE_IDS,
36
+ deprecation_info=cli.ActionDeprecationInfo("create-bundle-id", "0.49.0"),
37
+ )
38
+ def create_bundle_id(
39
+ self,
40
+ bundle_id_identifier: str,
41
+ bundle_id_name: Optional[str] = None,
42
+ platform: BundleIdPlatform = BundleIdPlatform.IOS,
43
+ should_print: bool = True,
44
+ ) -> BundleId:
45
+ """
46
+ Create Bundle ID in Apple Developer portal for specifier identifier
47
+ """
48
+
49
+ if bundle_id_name is None:
50
+ bundle_id_name = bundle_id_identifier.replace(".", " ")
51
+
52
+ create_params = dict(identifier=bundle_id_identifier, name=bundle_id_name, platform=platform)
53
+ return self._create_resource(self.api_client.bundle_ids, should_print, **create_params)
54
+
55
+ @cli.action(
56
+ "get",
57
+ BundleIdArgument.BUNDLE_ID_RESOURCE_ID,
58
+ action_group=AppStoreConnectActionGroup.BUNDLE_IDS,
59
+ deprecation_info=cli.ActionDeprecationInfo("get-bundle-id", "0.49.0"),
60
+ )
61
+ def get_bundle_id(
62
+ self,
63
+ bundle_id_resource_id: ResourceId,
64
+ should_print: bool = True,
65
+ ) -> BundleId:
66
+ """
67
+ Get specified Bundle ID from Apple Developer portal
68
+ """
69
+
70
+ return self._get_resource(bundle_id_resource_id, self.api_client.bundle_ids, should_print)
71
+
72
+ @cli.action(
73
+ "list",
74
+ BundleIdArgument.BUNDLE_ID_IDENTIFIER_OPTIONAL,
75
+ BundleIdArgument.BUNDLE_ID_NAME,
76
+ BundleIdArgument.PLATFORM_OPTIONAL,
77
+ BundleIdArgument.IDENTIFIER_STRICT_MATCH,
78
+ action_group=AppStoreConnectActionGroup.BUNDLE_IDS,
79
+ deprecation_info=cli.ActionDeprecationInfo("list-bundle-ids", "0.49.0"),
80
+ )
81
+ def list_bundle_ids(
82
+ self,
83
+ bundle_id_identifier: Optional[str] = None,
84
+ bundle_id_name: Optional[str] = None,
85
+ platform: Optional[BundleIdPlatform] = None,
86
+ bundle_id_identifier_strict_match: bool = False,
87
+ should_print: bool = True,
88
+ ) -> List[BundleId]:
89
+ """
90
+ List Bundle IDs from Apple Developer portal matching given constraints
91
+ """
92
+
93
+ def predicate(bundle_id):
94
+ return bundle_id.attributes.identifier == bundle_id_identifier
95
+
96
+ bundle_id_filter = self.api_client.bundle_ids.Filter(
97
+ identifier=bundle_id_identifier,
98
+ name=bundle_id_name,
99
+ platform=platform,
100
+ )
101
+ bundle_ids = self._list_resources(
102
+ bundle_id_filter,
103
+ self.api_client.bundle_ids,
104
+ should_print,
105
+ filter_predicate=predicate if bundle_id_identifier_strict_match else None,
106
+ )
107
+
108
+ return bundle_ids
109
+
110
+ @cli.action(
111
+ "delete",
112
+ BundleIdArgument.BUNDLE_ID_RESOURCE_ID,
113
+ CommonArgument.IGNORE_NOT_FOUND,
114
+ action_group=AppStoreConnectActionGroup.BUNDLE_IDS,
115
+ deprecation_info=cli.ActionDeprecationInfo("delete-bundle-id", "0.49.0"),
116
+ )
117
+ def delete_bundle_id(
118
+ self,
119
+ bundle_id_resource_id: ResourceId,
120
+ ignore_not_found: bool = False,
121
+ ) -> None:
122
+ """
123
+ Delete specified Bundle ID from Apple Developer portal
124
+ """
125
+
126
+ self._delete_resource(self.api_client.bundle_ids, bundle_id_resource_id, ignore_not_found)
127
+
128
+ @cli.action(
129
+ "profiles",
130
+ BundleIdArgument.BUNDLE_ID_RESOURCE_IDS,
131
+ ProfileArgument.PROFILE_TYPE_OPTIONAL,
132
+ ProfileArgument.PROFILE_STATE_OPTIONAL,
133
+ ProfileArgument.PROFILE_NAME,
134
+ CommonArgument.SAVE,
135
+ action_group=AppStoreConnectActionGroup.BUNDLE_IDS,
136
+ deprecation_info=cli.ActionDeprecationInfo("list-bundle-id-profiles", "0.49.0"),
137
+ )
138
+ def list_bundle_id_profiles(
139
+ self,
140
+ bundle_id_resource_ids: Sequence[ResourceId],
141
+ profile_type: Optional[ProfileType] = None,
142
+ profile_state: Optional[ProfileState] = None,
143
+ profile_name: Optional[str] = None,
144
+ save: bool = False,
145
+ should_print: bool = True,
146
+ ) -> List[Profile]:
147
+ """
148
+ List provisioning profiles from Apple Developer Portal for specified Bundle IDs
149
+ """
150
+
151
+ profiles_filter = self.api_client.profiles.Filter(
152
+ profile_type=profile_type,
153
+ profile_state=profile_state,
154
+ name=profile_name,
155
+ )
156
+
157
+ profiles = []
158
+ for resource_id in set(bundle_id_resource_ids):
159
+ bundle_id_profiles = self._list_related_resources(
160
+ resource_id,
161
+ BundleId,
162
+ Profile,
163
+ self.api_client.bundle_ids.list_profiles,
164
+ profiles_filter,
165
+ should_print,
166
+ )
167
+ profiles.extend(bundle_id_profiles)
168
+
169
+ if save:
170
+ self._save_profiles(profiles)
171
+ return profiles
172
+
173
+ @cli.action(
174
+ "capabilities",
175
+ BundleIdArgument.BUNDLE_ID_RESOURCE_ID,
176
+ action_group=AppStoreConnectActionGroup.BUNDLE_IDS,
177
+ )
178
+ def list_bundle_id_capabilities(
179
+ self,
180
+ bundle_id_resource_id: ResourceId,
181
+ should_print: bool = True,
182
+ ) -> List[BundleIdCapability]:
183
+ """
184
+ Check the capabilities that are enabled for identifier
185
+ """
186
+ return self._list_related_resources(
187
+ bundle_id_resource_id,
188
+ BundleId,
189
+ BundleIdCapability,
190
+ self.api_client.bundle_ids.list_capabilities,
191
+ None,
192
+ should_print,
193
+ )
194
+
195
+ @cli.action(
196
+ "enable-capabilities",
197
+ BundleIdArgument.BUNDLE_ID_RESOURCE_ID,
198
+ BundleIdArgument.CAPABILITY_TYPES,
199
+ action_group=AppStoreConnectActionGroup.BUNDLE_IDS,
200
+ )
201
+ def enable_bundle_id_capabilities(
202
+ self,
203
+ bundle_id_resource_id: ResourceId,
204
+ capabilities: Sequence[Union[CapabilityType, str]],
205
+ ):
206
+ """
207
+ Enable capabilities for identifier
208
+ """
209
+ capability_types = self._resolve_capability_types(capabilities)
210
+ bundle_id = self._get_bundle_id(bundle_id_resource_id)
211
+ self.logger.info(Colors.BLUE(f'Enable {BundleIdCapability.s} for identifier "{bundle_id.attributes.name}"'))
212
+
213
+ for capability_type in capability_types:
214
+ self._enable_capability(bundle_id, capability_type)
215
+
216
+ success_message = f'Successfully enabled {BundleIdCapability.s} for identifier "{bundle_id.attributes.name}"'
217
+ self.logger.info(Colors.GREEN(success_message))
218
+
219
+ @cli.action(
220
+ "disable-capabilities",
221
+ BundleIdArgument.BUNDLE_ID_RESOURCE_ID,
222
+ BundleIdArgument.CAPABILITY_TYPES,
223
+ action_group=AppStoreConnectActionGroup.BUNDLE_IDS,
224
+ )
225
+ def disable_bundle_id_capabilities(
226
+ self,
227
+ bundle_id_resource_id: ResourceId,
228
+ capabilities: Sequence[Union[CapabilityType, str]],
229
+ ):
230
+ """
231
+ Disable identifier capabilities
232
+ """
233
+ capability_types = self._resolve_capability_types(capabilities)
234
+ bundle_id = self._get_bundle_id(bundle_id_resource_id)
235
+ self.logger.info(Colors.BLUE(f'Disable {BundleIdCapability.s} for identifier "{bundle_id.attributes.name}"'))
236
+
237
+ enabled_capabilities = self._get_capabilities(bundle_id, capability_types)
238
+ if not enabled_capabilities:
239
+ skip_message = (
240
+ f"None of the specified {BundleIdCapability.s} are enabled for identifier "
241
+ f'"{bundle_id.attributes.name}". Skip disabling.'
242
+ )
243
+ self.logger.info(Colors.YELLOW(skip_message))
244
+ return
245
+
246
+ for capability in enabled_capabilities:
247
+ self._disable_capability(bundle_id, capability)
248
+
249
+ success_message = f'Successfully disabled {BundleIdCapability.s} for identifier "{bundle_id.attributes.name}"'
250
+ self.logger.info(Colors.GREEN(success_message))
251
+
252
+ def _get_bundle_id(self, bundle_id_resource_id: ResourceId) -> BundleId:
253
+ try:
254
+ return self.api_client.bundle_ids.read(bundle_id_resource_id)
255
+ except AppStoreConnectApiError as api_error:
256
+ raise AppStoreConnectError(
257
+ str(api_error),
258
+ api_error_response=api_error.error_response,
259
+ ) from api_error
260
+
261
+ @classmethod
262
+ def _resolve_capability_types(
263
+ cls,
264
+ capabilities: Optional[Sequence[Union[CapabilityType, str]]],
265
+ ) -> List[CapabilityType]:
266
+ if not capabilities:
267
+ return []
268
+ return [c if isinstance(c, CapabilityType) else CapabilityType.from_display_name(c) for c in capabilities]
269
+
270
+ def _get_capabilities(
271
+ self,
272
+ bundle_id: BundleId,
273
+ capability_types: Sequence[CapabilityType],
274
+ ) -> List[BundleIdCapability]:
275
+ try:
276
+ capabilities = self.api_client.bundle_ids.list_capabilities(bundle_id)
277
+ except AppStoreConnectApiError as api_error:
278
+ raise AppStoreConnectError(
279
+ str(api_error),
280
+ api_error_response=api_error.error_response,
281
+ ) from api_error
282
+ return [c for c in capabilities if c.attributes.capabilityType in capability_types]
283
+
284
+ def _enable_capability(self, bundle_id: BundleId, capability_type: CapabilityType) -> BundleIdCapability:
285
+ try:
286
+ capability = self.api_client.bundle_id_capabilities.enable(
287
+ capability_type,
288
+ bundle_id=bundle_id.id,
289
+ )
290
+ except AppStoreConnectApiError as api_error:
291
+ raise AppStoreConnectError(
292
+ (
293
+ f"Failed to enable capability {capability_type.value} for bundle identifier "
294
+ f'"{bundle_id.attributes.name}" ({bundle_id.id}): {api_error}'
295
+ ),
296
+ api_error_response=api_error.error_response,
297
+ ) from api_error
298
+
299
+ self.echo(Colors.BLUE(f"-- Enabled {capability.__class__} --"))
300
+ self.echo(f"{capability}")
301
+ return capability
302
+
303
+ def _disable_capability(self, bundle_id: BundleId, capability: BundleIdCapability):
304
+ try:
305
+ self.api_client.bundle_id_capabilities.disable(capability)
306
+ except AppStoreConnectApiError as api_error:
307
+ raise AppStoreConnectError(
308
+ (
309
+ f"Failed to disable capability {capability.attributes.capabilityType.value} "
310
+ f"for bundle identifier "
311
+ f'"{bundle_id.attributes.name}" ({bundle_id.id}): {api_error}'
312
+ ),
313
+ api_error_response=api_error.error_response,
314
+ ) from api_error
315
+
316
+ self.echo(Colors.BLUE(f"-- Disabled {capability.__class__} --"))
317
+ self.echo(f"{capability}")
@@ -23,6 +23,7 @@ from codemagic.apple.resources import AppStoreState
23
23
  from codemagic.apple.resources import BetaReviewState
24
24
  from codemagic.apple.resources import BuildProcessingState
25
25
  from codemagic.apple.resources import BundleIdPlatform
26
+ from codemagic.apple.resources import CapabilityType
26
27
  from codemagic.apple.resources import CertificateType
27
28
  from codemagic.apple.resources import DeviceStatus
28
29
  from codemagic.apple.resources import Locale
@@ -1229,6 +1230,17 @@ class BundleIdArgument(cli.Argument):
1229
1230
  "metavar": "bundle-identifier-id",
1230
1231
  },
1231
1232
  )
1233
+ CAPABILITY_TYPES = cli.ArgumentProperties(
1234
+ key="capabilities",
1235
+ flags=("--capability",),
1236
+ type=str,
1237
+ description="Name of the identifier capability",
1238
+ argparse_kwargs={
1239
+ "required": True,
1240
+ "choices": [ct.display_name for ct in CapabilityType],
1241
+ "nargs": "+",
1242
+ },
1243
+ )
1232
1244
  PLATFORM = cli.ArgumentProperties(
1233
1245
  key="platform",
1234
1246
  flags=("--platform",),
@@ -0,0 +1,77 @@
1
+ import pytest
2
+ from codemagic.apple.resources import CapabilityType
3
+
4
+
5
+ @pytest.mark.parametrize(
6
+ ("capability_type", "expected_display_name"),
7
+ (
8
+ (CapabilityType.ACCESS_WIFI_INFORMATION, "Access Wi-Fi Information"),
9
+ (CapabilityType.APPLE_ID_AUTH, "Sign In with Apple"),
10
+ (CapabilityType.APPLE_PAY, "Apple Pay"),
11
+ (CapabilityType.APP_GROUPS, "App Groups"),
12
+ (CapabilityType.ASSOCIATED_DOMAINS, "Associated Domains"),
13
+ (CapabilityType.AUTOFILL_CREDENTIAL_PROVIDER, "Autofill Credential Provider"),
14
+ (CapabilityType.CLASSKIT, "ClassKit"),
15
+ (CapabilityType.COREMEDIA_HLS_LOW_LATENCY, "Low Latency HLS"),
16
+ (CapabilityType.DATA_PROTECTION, "Data Protection"),
17
+ (CapabilityType.GAME_CENTER, "Game Center"),
18
+ (CapabilityType.HEALTHKIT, "HealthKit"),
19
+ (CapabilityType.HOMEKIT, "HomeKit"),
20
+ (CapabilityType.HOT_SPOT, "Hotspot"),
21
+ (CapabilityType.ICLOUD, "iCloud"),
22
+ (CapabilityType.INTER_APP_AUDIO, "Inter-App Audio"),
23
+ (CapabilityType.IN_APP_PURCHASE, "In-App Purchase"),
24
+ (CapabilityType.MAPS, "Maps"),
25
+ (CapabilityType.MULTIPATH, "Multipath"),
26
+ (CapabilityType.NETWORK_CUSTOM_PROTOCOL, "Custom Network Protocol"),
27
+ (CapabilityType.NETWORK_EXTENSIONS, "Network Extensions"),
28
+ (CapabilityType.NFC_TAG_READING, "NFC Tag Reading"),
29
+ (CapabilityType.PERSONAL_VPN, "Personal VPN"),
30
+ (CapabilityType.PUSH_NOTIFICATIONS, "Push Notifications"),
31
+ (CapabilityType.SIRIKIT, "SiriKit"),
32
+ (CapabilityType.SYSTEM_EXTENSION_INSTALL, "System Extension"),
33
+ (CapabilityType.USER_MANAGEMENT, "User Management"),
34
+ (CapabilityType.WALLET, "Wallet"),
35
+ (CapabilityType.WIRELESS_ACCESSORY_CONFIGURATION, "Wireless Accessory Configuration"),
36
+ ),
37
+ )
38
+ def test_display_name(capability_type: CapabilityType, expected_display_name: str):
39
+ assert capability_type.display_name == expected_display_name
40
+
41
+
42
+ @pytest.mark.parametrize(
43
+ ("display_name", "expected_capability_type"),
44
+ (
45
+ ("Access Wi-Fi Information", CapabilityType.ACCESS_WIFI_INFORMATION),
46
+ ("Sign In with Apple", CapabilityType.APPLE_ID_AUTH),
47
+ ("Apple Pay", CapabilityType.APPLE_PAY),
48
+ ("App Groups", CapabilityType.APP_GROUPS),
49
+ ("Associated Domains", CapabilityType.ASSOCIATED_DOMAINS),
50
+ ("Autofill Credential Provider", CapabilityType.AUTOFILL_CREDENTIAL_PROVIDER),
51
+ ("ClassKit", CapabilityType.CLASSKIT),
52
+ ("Low Latency HLS", CapabilityType.COREMEDIA_HLS_LOW_LATENCY),
53
+ ("Data Protection", CapabilityType.DATA_PROTECTION),
54
+ ("Game Center", CapabilityType.GAME_CENTER),
55
+ ("HealthKit", CapabilityType.HEALTHKIT),
56
+ ("HomeKit", CapabilityType.HOMEKIT),
57
+ ("Hotspot", CapabilityType.HOT_SPOT),
58
+ ("iCloud", CapabilityType.ICLOUD),
59
+ ("Inter-App Audio", CapabilityType.INTER_APP_AUDIO),
60
+ ("In-App Purchase", CapabilityType.IN_APP_PURCHASE),
61
+ ("Maps", CapabilityType.MAPS),
62
+ ("Multipath", CapabilityType.MULTIPATH),
63
+ ("Custom Network Protocol", CapabilityType.NETWORK_CUSTOM_PROTOCOL),
64
+ ("Network Extensions", CapabilityType.NETWORK_EXTENSIONS),
65
+ ("NFC Tag Reading", CapabilityType.NFC_TAG_READING),
66
+ ("Personal VPN", CapabilityType.PERSONAL_VPN),
67
+ ("Push Notifications", CapabilityType.PUSH_NOTIFICATIONS),
68
+ ("SiriKit", CapabilityType.SIRIKIT),
69
+ ("System Extension", CapabilityType.SYSTEM_EXTENSION_INSTALL),
70
+ ("User Management", CapabilityType.USER_MANAGEMENT),
71
+ ("Wallet", CapabilityType.WALLET),
72
+ ("Wireless Accessory Configuration", CapabilityType.WIRELESS_ACCESSORY_CONFIGURATION),
73
+ ),
74
+ )
75
+ def test_from_display_name(display_name: str, expected_capability_type: CapabilityType):
76
+ capability_type = CapabilityType.from_display_name(display_name)
77
+ assert capability_type is expected_capability_type
@@ -0,0 +1,21 @@
1
+ from __future__ import annotations
2
+
3
+ from codemagic.apple.resources import BundleIdCapability
4
+
5
+
6
+ def test_bundle_id_capability_initialization(api_bundle_id_capability):
7
+ bundle_id_capability = BundleIdCapability(api_bundle_id_capability)
8
+ assert bundle_id_capability.dict() == api_bundle_id_capability
9
+
10
+
11
+ def test_bundle_id_capability_string_representation(api_bundle_id_capability):
12
+ """
13
+ Check that for capability type the display name is shown
14
+ """
15
+ bundle_id_capability = BundleIdCapability(api_bundle_id_capability)
16
+ expected_lines = (
17
+ "Id: NLRN94JD59_GAME_CENTER_IOS",
18
+ "Type: bundleIdCapabilities",
19
+ "Capability type: Game Center",
20
+ )
21
+ assert str(bundle_id_capability) == "\n".join(expected_lines)