codemagic-cli-tools 0.49.0__tar.gz → 0.50.1__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.1}/PKG-INFO +1 -1
  2. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/pyproject.toml +1 -1
  3. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/src/codemagic/__version__.py +1 -1
  4. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/src/codemagic/__version__.py-e +1 -1
  5. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/src/codemagic/apple/resources/bundle_id_capability.py +11 -0
  6. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/src/codemagic/apple/resources/enums.py +46 -2
  7. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/src/codemagic/models/xctests/__init__.py +1 -0
  8. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/src/codemagic/models/xctests/xcresulttool.py +10 -3
  9. codemagic_cli_tools-0.50.1/src/codemagic/tools/app_store_connect/action_groups/bundle_ids_action_group.py +317 -0
  10. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/src/codemagic/tools/app_store_connect/arguments.py +12 -0
  11. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/src/codemagic/tools/xcode_project.py +32 -17
  12. codemagic_cli_tools-0.50.1/tests/apple/resources/enums/test_capability_type.py +77 -0
  13. codemagic_cli_tools-0.50.1/tests/apple/resources/test_bundle_id_capability_resource.py +21 -0
  14. codemagic_cli_tools-0.49.0/src/codemagic/tools/app_store_connect/action_groups/bundle_ids_action_group.py +0 -165
  15. codemagic_cli_tools-0.49.0/tests/apple/resources/test_bundle_id_capability_resource.py +0 -8
  16. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/LICENSE +0 -0
  17. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/README.md +0 -0
  18. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/src/codemagic/__init__.py +0 -0
  19. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/src/codemagic/apple/__init__.py +0 -0
  20. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/src/codemagic/apple/app_store_connect/__init__.py +0 -0
  21. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/src/codemagic/apple/app_store_connect/api_client.py +0 -0
  22. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/src/codemagic/apple/app_store_connect/api_error.py +0 -0
  23. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/src/codemagic/apple/app_store_connect/api_session.py +0 -0
  24. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/src/codemagic/apple/app_store_connect/apps/__init__.py +0 -0
  25. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/src/codemagic/apple/app_store_connect/apps/apps.py +0 -0
  26. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/src/codemagic/apple/app_store_connect/builds/__init__.py +0 -0
  27. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/src/codemagic/apple/app_store_connect/builds/builds.py +0 -0
  28. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/src/codemagic/apple/app_store_connect/json_web_token_manager.py +0 -0
  29. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/src/codemagic/apple/app_store_connect/provisioning/__init__.py +0 -0
  30. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/src/codemagic/apple/app_store_connect/provisioning/bundle_id_capabilities.py +0 -0
  31. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/src/codemagic/apple/app_store_connect/provisioning/bundle_ids.py +0 -0
  32. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/src/codemagic/apple/app_store_connect/provisioning/devices.py +0 -0
  33. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/src/codemagic/apple/app_store_connect/provisioning/profiles.py +0 -0
  34. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/src/codemagic/apple/app_store_connect/provisioning/signing_certificates.py +0 -0
  35. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/src/codemagic/apple/app_store_connect/resource_manager.py +0 -0
  36. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/src/codemagic/apple/app_store_connect/testflight/__init__.py +0 -0
  37. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/src/codemagic/apple/app_store_connect/testflight/beta_groups.py +0 -0
  38. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/src/codemagic/apple/app_store_connect/type_declarations.py +0 -0
  39. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/src/codemagic/apple/app_store_connect/versioning/__init__.py +0 -0
  40. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/src/codemagic/apple/app_store_connect/versioning/app_store_version_localizations.py +0 -0
  41. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/src/codemagic/apple/app_store_connect/versioning/app_store_version_submissions.py +0 -0
  42. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/src/codemagic/apple/app_store_connect/versioning/app_store_versions.py +0 -0
  43. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/src/codemagic/apple/app_store_connect/versioning/beta_app_review_submissions.py +0 -0
  44. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/src/codemagic/apple/app_store_connect/versioning/beta_build_localizations.py +0 -0
  45. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/src/codemagic/apple/app_store_connect/versioning/pre_release_versions.py +0 -0
  46. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/src/codemagic/apple/app_store_connect/versioning/review_submission_items.py +0 -0
  47. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/src/codemagic/apple/app_store_connect/versioning/review_submissions.py +0 -0
  48. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/src/codemagic/apple/resources/__init__.py +0 -0
  49. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/src/codemagic/apple/resources/app.py +0 -0
  50. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/src/codemagic/apple/resources/app_store_version.py +0 -0
  51. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/src/codemagic/apple/resources/app_store_version_localization.py +0 -0
  52. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/src/codemagic/apple/resources/app_store_version_submission.py +0 -0
  53. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/src/codemagic/apple/resources/beta_app_localization.py +0 -0
  54. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/src/codemagic/apple/resources/beta_app_review_detail.py +0 -0
  55. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/src/codemagic/apple/resources/beta_app_review_submission.py +0 -0
  56. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/src/codemagic/apple/resources/beta_build_localization.py +0 -0
  57. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/src/codemagic/apple/resources/beta_group.py +0 -0
  58. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/src/codemagic/apple/resources/build.py +0 -0
  59. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/src/codemagic/apple/resources/build_beta_detail.py +0 -0
  60. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/src/codemagic/apple/resources/bundle_id.py +0 -0
  61. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/src/codemagic/apple/resources/device.py +0 -0
  62. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/src/codemagic/apple/resources/error_response.py +0 -0
  63. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/src/codemagic/apple/resources/pre_release_version.py +0 -0
  64. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/src/codemagic/apple/resources/profile.py +0 -0
  65. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/src/codemagic/apple/resources/resource.py +0 -0
  66. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/src/codemagic/apple/resources/review_submission.py +0 -0
  67. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/src/codemagic/apple/resources/review_submission_item.py +0 -0
  68. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/src/codemagic/apple/resources/signing_certificate.py +0 -0
  69. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/src/codemagic/cli/__init__.py +0 -0
  70. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/src/codemagic/cli/action.py +0 -0
  71. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/src/codemagic/cli/action_group.py +0 -0
  72. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/src/codemagic/cli/argument/__init__.py +0 -0
  73. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/src/codemagic/cli/argument/action_callable.py +0 -0
  74. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/src/codemagic/cli/argument/argument.py +0 -0
  75. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/src/codemagic/cli/argument/argument_formatter.py +0 -0
  76. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/src/codemagic/cli/argument/argument_parser_builder.py +0 -0
  77. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/src/codemagic/cli/argument/argument_properties.py +0 -0
  78. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/src/codemagic/cli/argument/common_argument_types.py +0 -0
  79. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/src/codemagic/cli/argument/typed_cli_argument.py +0 -0
  80. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/src/codemagic/cli/cli_app.py +0 -0
  81. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/src/codemagic/cli/cli_help_formatter.py +0 -0
  82. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/src/codemagic/cli/cli_process.py +0 -0
  83. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/src/codemagic/cli/cli_process_stream.py +0 -0
  84. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/src/codemagic/cli/cli_types.py +0 -0
  85. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/src/codemagic/cli/colors.py +0 -0
  86. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/src/codemagic/cli/environment.py +0 -0
  87. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/src/codemagic/data/jars/bundletool-all-1.13.1.jar +0 -0
  88. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/src/codemagic/google/__init__.py +0 -0
  89. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/src/codemagic/google/errors.py +0 -0
  90. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/src/codemagic/google/firebase_client.py +0 -0
  91. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/src/codemagic/google/google_client.py +0 -0
  92. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/src/codemagic/google/resource_managers/__init__.py +0 -0
  93. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/src/codemagic/google/resource_managers/mixins/__init__.py +0 -0
  94. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/src/codemagic/google/resource_managers/mixins/acting_manager_mixin.py +0 -0
  95. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/src/codemagic/google/resource_managers/mixins/listing_manager_mixin.py +0 -0
  96. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/src/codemagic/google/resource_managers/release_manager.py +0 -0
  97. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/src/codemagic/google/resource_managers/resource_manager.py +0 -0
  98. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/src/codemagic/google/resources/__init__.py +0 -0
  99. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/src/codemagic/google/resources/identifiers/__init__.py +0 -0
  100. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/src/codemagic/google/resources/identifiers/app_identifier.py +0 -0
  101. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/src/codemagic/google/resources/identifiers/resource_identifier.py +0 -0
  102. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/src/codemagic/google/resources/release.py +0 -0
  103. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/src/codemagic/google/resources/release_notes.py +0 -0
  104. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/src/codemagic/google/resources/resource.py +0 -0
  105. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/src/codemagic/google_play/__init__.py +0 -0
  106. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/src/codemagic/google_play/api_client.py +0 -0
  107. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/src/codemagic/google_play/api_error.py +0 -0
  108. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/src/codemagic/google_play/resources/__init__.py +0 -0
  109. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/src/codemagic/google_play/resources/edit.py +0 -0
  110. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/src/codemagic/google_play/resources/enums.py +0 -0
  111. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/src/codemagic/google_play/resources/resource.py +0 -0
  112. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/src/codemagic/google_play/resources/track.py +0 -0
  113. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/src/codemagic/mixins/__init__.py +0 -0
  114. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/src/codemagic/mixins/path_finder.py +0 -0
  115. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/src/codemagic/mixins/running_cli_app.py +0 -0
  116. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/src/codemagic/mixins/str_converter.py +0 -0
  117. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/src/codemagic/models/__init__.py +0 -0
  118. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/src/codemagic/models/altool/__init__.py +0 -0
  119. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/src/codemagic/models/altool/altool.py +0 -0
  120. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/src/codemagic/models/altool/altool_result.py +0 -0
  121. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/src/codemagic/models/altool/enums.py +0 -0
  122. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/src/codemagic/models/android_signing_info.py +0 -0
  123. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/src/codemagic/models/application_package/__init__.py +0 -0
  124. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/src/codemagic/models/application_package/abstract_package.py +0 -0
  125. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/src/codemagic/models/application_package/ipa.py +0 -0
  126. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/src/codemagic/models/application_package/macos_package.py +0 -0
  127. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/src/codemagic/models/bundle_id_detector.py +0 -0
  128. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/src/codemagic/models/certificate.py +0 -0
  129. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/src/codemagic/models/certificate_attributes.py +0 -0
  130. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/src/codemagic/models/certificate_p12_exporter.py +0 -0
  131. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/src/codemagic/models/code_sign_entitlements.py +0 -0
  132. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/src/codemagic/models/code_signing_settings_manager.py +0 -0
  133. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/src/codemagic/models/enums.py +0 -0
  134. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/src/codemagic/models/export_options.py +0 -0
  135. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/src/codemagic/models/json_serializable.py +0 -0
  136. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/src/codemagic/models/junit/__init__.py +0 -0
  137. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/src/codemagic/models/junit/definitions.py +0 -0
  138. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/src/codemagic/models/junit/printer.py +0 -0
  139. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/src/codemagic/models/keystore.py +0 -0
  140. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/src/codemagic/models/pbx_project.py +0 -0
  141. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/src/codemagic/models/private_key.py +0 -0
  142. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/src/codemagic/models/provisioning_profile.py +0 -0
  143. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/src/codemagic/models/simulator/__init__.py +0 -0
  144. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/src/codemagic/models/simulator/core_simulator_service.py +0 -0
  145. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/src/codemagic/models/simulator/runtime.py +0 -0
  146. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/src/codemagic/models/simulator/simulator.py +0 -0
  147. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/src/codemagic/models/table/__init__.py +0 -0
  148. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/src/codemagic/models/table/line.py +0 -0
  149. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/src/codemagic/models/table/table.py +0 -0
  150. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/src/codemagic/models/xcode.py +0 -0
  151. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/src/codemagic/models/xcodebuild.py +0 -0
  152. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/src/codemagic/models/xcpretty.py +0 -0
  153. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/src/codemagic/models/xctests/collector.py +0 -0
  154. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/src/codemagic/models/xctests/converter.py +0 -0
  155. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/src/codemagic/models/xctests/xcresult.py +0 -0
  156. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/src/codemagic/py.typed +0 -0
  157. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/src/codemagic/scripts/code_signing_manager.rb +0 -0
  158. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/src/codemagic/shell_tools/__init__.py +0 -0
  159. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/src/codemagic/shell_tools/abstract_shell_tool.py +0 -0
  160. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/src/codemagic/shell_tools/keytool.py +0 -0
  161. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/src/codemagic/tools/__init__.py +0 -0
  162. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/src/codemagic/tools/_xcode_project/__init__.py +0 -0
  163. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/src/codemagic/tools/_xcode_project/arguments.py +0 -0
  164. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/src/codemagic/tools/android_app_bundle.py +0 -0
  165. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/src/codemagic/tools/android_keystore/__init__.py +0 -0
  166. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/src/codemagic/tools/android_keystore/__main__.py +0 -0
  167. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/src/codemagic/tools/android_keystore/android_keystore.py +0 -0
  168. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/src/codemagic/tools/android_keystore/argument_types.py +0 -0
  169. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/src/codemagic/tools/android_keystore/arguments.py +0 -0
  170. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/src/codemagic/tools/app_store_connect/__init__.py +0 -0
  171. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/src/codemagic/tools/app_store_connect/__main__.py +0 -0
  172. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/src/codemagic/tools/app_store_connect/abstract_base_action.py +0 -0
  173. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/src/codemagic/tools/app_store_connect/action_group.py +0 -0
  174. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/src/codemagic/tools/app_store_connect/action_groups/__init__.py +0 -0
  175. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/src/codemagic/tools/app_store_connect/action_groups/app_store_version_localizations_action_group.py +0 -0
  176. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/src/codemagic/tools/app_store_connect/action_groups/app_store_version_submissions_action_group.py +0 -0
  177. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/src/codemagic/tools/app_store_connect/action_groups/app_store_versions_action_group.py +0 -0
  178. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/src/codemagic/tools/app_store_connect/action_groups/apps_action_group.py +0 -0
  179. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/src/codemagic/tools/app_store_connect/action_groups/beta_app_review_submissions_action_group.py +0 -0
  180. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/src/codemagic/tools/app_store_connect/action_groups/beta_build_localizations_action_group.py +0 -0
  181. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/src/codemagic/tools/app_store_connect/action_groups/beta_groups_action_group.py +0 -0
  182. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/src/codemagic/tools/app_store_connect/action_groups/builds_action_group.py +0 -0
  183. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/src/codemagic/tools/app_store_connect/action_groups/certificates_action_group.py +0 -0
  184. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/src/codemagic/tools/app_store_connect/action_groups/devices_action_group.py +0 -0
  185. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/src/codemagic/tools/app_store_connect/action_groups/profiles_action_group.py +0 -0
  186. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/src/codemagic/tools/app_store_connect/action_groups/review_submission_items_actions_group.py +0 -0
  187. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/src/codemagic/tools/app_store_connect/action_groups/review_submissions_actions_group.py +0 -0
  188. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/src/codemagic/tools/app_store_connect/actions/__init__.py +0 -0
  189. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/src/codemagic/tools/app_store_connect/actions/fetch_signing_files_action.py +0 -0
  190. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/src/codemagic/tools/app_store_connect/actions/latest_build_number_actions.py +0 -0
  191. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/src/codemagic/tools/app_store_connect/actions/publish_action.py +0 -0
  192. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/src/codemagic/tools/app_store_connect/app_store_connect.py +0 -0
  193. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/src/codemagic/tools/app_store_connect/errors.py +0 -0
  194. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/src/codemagic/tools/app_store_connect/mixins/__init__.py +0 -0
  195. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/src/codemagic/tools/app_store_connect/mixins/resource_manager_mixin.py +0 -0
  196. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/src/codemagic/tools/app_store_connect/mixins/signing_file_saver_mixin.py +0 -0
  197. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/src/codemagic/tools/app_store_connect/resource_printer.py +0 -0
  198. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/src/codemagic/tools/codemagic_cli_tools.py +0 -0
  199. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/src/codemagic/tools/firebase_app_distribution/__init__.py +0 -0
  200. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/src/codemagic/tools/firebase_app_distribution/__main__.py +0 -0
  201. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/src/codemagic/tools/firebase_app_distribution/action_groups/__init__.py +0 -0
  202. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/src/codemagic/tools/firebase_app_distribution/action_groups/firebase_action_groups.py +0 -0
  203. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/src/codemagic/tools/firebase_app_distribution/action_groups/releases_action_group.py +0 -0
  204. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/src/codemagic/tools/firebase_app_distribution/actions/__init__.py +0 -0
  205. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/src/codemagic/tools/firebase_app_distribution/actions/get_latest_build_version_action.py +0 -0
  206. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/src/codemagic/tools/firebase_app_distribution/argument_types.py +0 -0
  207. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/src/codemagic/tools/firebase_app_distribution/arguments.py +0 -0
  208. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/src/codemagic/tools/firebase_app_distribution/errors.py +0 -0
  209. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/src/codemagic/tools/firebase_app_distribution/firebase_app_distribution.py +0 -0
  210. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/src/codemagic/tools/firebase_app_distribution/firebase_app_distribution_action.py +0 -0
  211. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/src/codemagic/tools/firebase_app_distribution/resource_printer.py +0 -0
  212. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/src/codemagic/tools/git_changelog.py +0 -0
  213. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/src/codemagic/tools/google_play/__init__.py +0 -0
  214. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/src/codemagic/tools/google_play/__main__.py +0 -0
  215. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/src/codemagic/tools/google_play/action_groups/__init__.py +0 -0
  216. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/src/codemagic/tools/google_play/action_groups/google_play_action_groups.py +0 -0
  217. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/src/codemagic/tools/google_play/action_groups/tracks_action_group.py +0 -0
  218. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/src/codemagic/tools/google_play/actions/__init__.py +0 -0
  219. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/src/codemagic/tools/google_play/actions/get_latest_build_number_action.py +0 -0
  220. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/src/codemagic/tools/google_play/argument_types.py +0 -0
  221. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/src/codemagic/tools/google_play/arguments.py +0 -0
  222. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/src/codemagic/tools/google_play/errors.py +0 -0
  223. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/src/codemagic/tools/google_play/google_play.py +0 -0
  224. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/src/codemagic/tools/google_play/google_play_base_action.py +0 -0
  225. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/src/codemagic/tools/keychain.py +0 -0
  226. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/src/codemagic/tools/universal_apk_generator.py +0 -0
  227. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/src/codemagic/utilities/__init__.py +0 -0
  228. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/src/codemagic/utilities/auditing/__init__.py +0 -0
  229. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/src/codemagic/utilities/auditing/base_auditor.py +0 -0
  230. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/src/codemagic/utilities/auditing/exception_auditor.py +0 -0
  231. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/src/codemagic/utilities/auditing/http_request_auditor.py +0 -0
  232. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/src/codemagic/utilities/backwards_file_reader.py +0 -0
  233. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/src/codemagic/utilities/case_conversion.py +0 -0
  234. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/src/codemagic/utilities/decorators.py +0 -0
  235. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/src/codemagic/utilities/levenshtein_distance.py +0 -0
  236. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/src/codemagic/utilities/log.py +0 -0
  237. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/src/codemagic/utilities/versions.py +0 -0
  238. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/tests/__init__.py +0 -0
  239. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/tests/apple/__init__.py +0 -0
  240. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/tests/apple/app_store_connect/__init__.py +0 -0
  241. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/tests/apple/app_store_connect/apps/__init__.py +0 -0
  242. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/tests/apple/app_store_connect/apps/test_apps.py +0 -0
  243. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/tests/apple/app_store_connect/builds/__init__.py +0 -0
  244. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/tests/apple/app_store_connect/builds/test_builds.py +0 -0
  245. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/tests/apple/app_store_connect/provisioning/__init__.py +0 -0
  246. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/tests/apple/app_store_connect/provisioning/conftest.py +0 -0
  247. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/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.1}/tests/apple/app_store_connect/provisioning/test_bundle_ids.py +0 -0
  249. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/tests/apple/app_store_connect/provisioning/test_devices.py +0 -0
  250. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/tests/apple/app_store_connect/provisioning/test_profiles.py +0 -0
  251. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/tests/apple/app_store_connect/provisioning/test_signing_certificates.py +0 -0
  252. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/tests/apple/app_store_connect/resource_manager_test_base.py +0 -0
  253. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/tests/apple/app_store_connect/test_api_client.py +0 -0
  254. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/tests/apple/app_store_connect/test_api_session.py +0 -0
  255. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/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.1}/tests/apple/app_store_connect/test_resource_manager.py +0 -0
  257. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/tests/apple/app_store_connect/testflight/__init__.py +0 -0
  258. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/tests/apple/app_store_connect/testflight/test_beta_groups.py +0 -0
  259. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/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.1}/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.1}/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.1}/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.1}/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.1}/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.1}/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.1}/tests/apple/app_store_connect/versioning/test_review_submissions.py +0 -0
  267. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/tests/apple/resources/__init__.py +0 -0
  268. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/tests/apple/resources/conftest.py +0 -0
  269. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/tests/apple/resources/enums/__init__.py +0 -0
  270. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/tests/apple/resources/enums/test_certificate_type.py +0 -0
  271. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/tests/apple/resources/enums/test_profile_type.py +0 -0
  272. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/tests/apple/resources/mocks/app_store_version.json +0 -0
  273. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/tests/apple/resources/mocks/build.json +0 -0
  274. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/tests/apple/resources/mocks/bundle_id.json +0 -0
  275. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/tests/apple/resources/mocks/bundle_id_capability.json +0 -0
  276. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/tests/apple/resources/mocks/certificate.json +0 -0
  277. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/tests/apple/resources/mocks/device.json +0 -0
  278. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/tests/apple/resources/mocks/error_response.json +0 -0
  279. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/tests/apple/resources/mocks/error_response_entity_state_invalid.json +0 -0
  280. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/tests/apple/resources/mocks/error_response_with_links.json +0 -0
  281. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/tests/apple/resources/mocks/mock_resource.json +0 -0
  282. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/tests/apple/resources/mocks/pre_release_version.json +0 -0
  283. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/tests/apple/resources/mocks/profile.json +0 -0
  284. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/tests/apple/resources/test_app_store_version_resource.py +0 -0
  285. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/tests/apple/resources/test_build_resource.py +0 -0
  286. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/tests/apple/resources/test_bundle_id_resource.py +0 -0
  287. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/tests/apple/resources/test_device_resource.py +0 -0
  288. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/tests/apple/resources/test_error_response.py +0 -0
  289. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/tests/apple/resources/test_pre_release_version_resource.py +0 -0
  290. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/tests/apple/resources/test_profile_resource.py +0 -0
  291. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/tests/apple/resources/test_resource.py +0 -0
  292. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/tests/apple/resources/test_signing_certificate_resource.py +0 -0
  293. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/tests/apple/resources/test_undefined_resource_fields.py +0 -0
  294. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/tests/cli/__init__.py +0 -0
  295. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/tests/cli/argument/__init__.py +0 -0
  296. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/tests/cli/argument/common_argument_types/__init__.py +0 -0
  297. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/tests/cli/argument/common_argument_types/test_bounded_number.py +0 -0
  298. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/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.1}/tests/cli/argument/common_argument_types/test_maybe_dir.py +0 -0
  300. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/tests/cli/argument/test_argument.py +0 -0
  301. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/tests/cli/mocks/utf-8-sample.txt +0 -0
  302. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/tests/cli/test_cli_process.py +0 -0
  303. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/tests/cli/test_decorators.py +0 -0
  304. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/tests/conftest.py +0 -0
  305. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/tests/google/__init__.py +0 -0
  306. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/tests/google/conftest.py +0 -0
  307. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/tests/google/test_firebase_client.py +0 -0
  308. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/tests/google/test_live_firebase_client.py +0 -0
  309. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/tests/google_play/__init__.py +0 -0
  310. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/tests/google_play/resources/__init__.py +0 -0
  311. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/tests/google_play/resources/conftest.py +0 -0
  312. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/tests/google_play/resources/mocks/edit.json +0 -0
  313. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/tests/google_play/resources/mocks/track.json +0 -0
  314. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/tests/google_play/resources/test_edit_resource.py +0 -0
  315. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/tests/google_play/resources/test_resource_print.py +0 -0
  316. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/tests/google_play/resources/test_track_resource.py +0 -0
  317. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/tests/google_play/test_api_client.py +0 -0
  318. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/tests/mixins/__init__.py +0 -0
  319. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/tests/mixins/test_string_converter.py +0 -0
  320. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/tests/mocks/certificate.asn1 +0 -0
  321. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/tests/mocks/encrypted.pem +0 -0
  322. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/tests/mocks/encrypted.pem.pub +0 -0
  323. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/tests/mocks/unencrypted.pem +0 -0
  324. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/tests/mocks/unencrypted.pem.pub +0 -0
  325. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/tests/models/__init__.py +0 -0
  326. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/tests/models/altool/__init__.py +0 -0
  327. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/tests/models/altool/mocks/mock_failure_auth.txt +0 -0
  328. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/tests/models/altool/mocks/mock_failure_other.txt +0 -0
  329. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/tests/models/altool/mocks/mock_upload_success.json +0 -0
  330. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/tests/models/altool/mocks/mock_validation_failure.json +0 -0
  331. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/tests/models/altool/test_altool_result.py +0 -0
  332. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/tests/models/altool/test_altool_retrying.py +0 -0
  333. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/tests/models/conftest.py +0 -0
  334. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/tests/models/enums/__init__.py +0 -0
  335. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/tests/models/enums/test_resource_enum.py +0 -0
  336. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/tests/models/junit/__init__.py +0 -0
  337. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/tests/models/junit/mocks/testsuite.xml +0 -0
  338. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/tests/models/junit/test_xml_generation.py +0 -0
  339. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/tests/models/mocks/certificate-no-password.p12 +0 -0
  340. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/tests/models/mocks/certificate.p12 +0 -0
  341. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/tests/models/mocks/codemagic_io_wildcard_development.mobileprovision +0 -0
  342. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/tests/models/mocks/export_options.plist +0 -0
  343. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/tests/models/mocks/mock.ipa +0 -0
  344. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/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.1}/tests/models/mocks/mock_0_icloud_container_environments.plist +0 -0
  346. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/tests/models/mocks/mock_1_icloud_container_environments.plist +0 -0
  347. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/tests/models/mocks/mock_2_icloud_container_environments.plist +0 -0
  348. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/tests/models/mocks/mock_openssh_private_key +0 -0
  349. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/tests/models/mocks/mock_rsa_private_key +0 -0
  350. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/tests/models/mocks/mock_xcode/Contents/version.plist +0 -0
  351. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/tests/models/simulator/__init__.py +0 -0
  352. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/tests/models/simulator/mocks/devices.json +0 -0
  353. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/tests/models/simulator/mocks/simulator.json +0 -0
  354. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/tests/models/simulator/test_runtime.py +0 -0
  355. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/tests/models/simulator/test_simulator.py +0 -0
  356. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/tests/models/test_certificate.py +0 -0
  357. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/tests/models/test_certificate_attributes.py +0 -0
  358. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/tests/models/test_code_sign_entitlements.py +0 -0
  359. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/tests/models/test_export_options.py +0 -0
  360. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/tests/models/test_private_key.py +0 -0
  361. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/tests/models/test_provisioning_profile.py +0 -0
  362. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/tests/models/test_table.py +0 -0
  363. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/tests/models/test_xcode.py +0 -0
  364. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/tests/models/xctests/__init__.py +0 -0
  365. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/tests/models/xctests/conftest.py +0 -0
  366. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/tests/models/xctests/mocks/0_1NtPgUPcB1A83X977l5Q91ElstUeVDnqAhumk_VJG8DIS4GA1sb8ElPPHZZGYEHmNvnHU1VVaPDCw1tI8n3uXg__.json +0 -0
  367. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/tests/models/xctests/mocks/0_5rAUs3HknUI7DU8Jyc5RlFcosqCXTOV-qwOaOE1Mul_ppK8QCta-NSxxCdtVg6i12km4zTR5l0SjgzfHGUNxog__.json +0 -0
  368. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/tests/models/xctests/mocks/0_97T9qQZ3dEI1oDS6NvYTPcFk_jUXFJ0NRwyd5FZ2S585JGMtlqbF28Hc85yeifgKEnNoInoW93Za9c5QJCspeQ__.json +0 -0
  369. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/tests/models/xctests/mocks/0_DVcJZnHFaQQlzl8czovv7RuDRQIToEr5_3lLe-Mn1Sm6VreJ5xoXEFqBaWNv0XRmSg00NJ77XzQKgddhfkuk7w__.json +0 -0
  370. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/tests/models/xctests/mocks/0_FZMbIp5VAUEiJv1wUUM-K78Dtmb4o-titbTusDJqRuarbS9OatzAykygXo4NUqEoR9sxCIoeu8VDioQmbba6mw__.json +0 -0
  371. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/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.1}/tests/models/xctests/mocks/0_NnCmQ8rMqVyUBgL3ZDjfjJ9Vt1AMGeMzZPkDH30rGMYer0pFDpp4UDZlCEHRImO-48LdC_KdcbjP70IZA6zKUQ__.json +0 -0
  373. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/tests/models/xctests/mocks/0_YK9aPHVT-grv_ZVooRT79GBO9n82BNogkuWVzFO6itJEtbtsRTQpK2-0ZDLot1JpCfPb26aZwEZjeb9G4GHiBQ__.json +0 -0
  374. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/tests/models/xctests/mocks/0__H1_RrdBT9b-ZhkWCQiRKpHlwURmyWUudeOhj5UslLXhXl8mr9w5CGqdobi9A5wCVEIRMsO4yuFyzx2gMPr-_Q__.json +0 -0
  375. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/tests/models/xctests/mocks/0_evvkuGf92MVrmIvhr07911LuRTiPBKDjIQ0q_7L-mPGGYkWVKMBPQ5pB5lbjoaOnvr0fpC9k003EunfwSdss2g__.json +0 -0
  376. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/tests/models/xctests/mocks/actions_invocation_record.json +0 -0
  377. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/tests/models/xctests/test_collector.py +0 -0
  378. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/tests/models/xctests/test_converter.py +0 -0
  379. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/tests/models/xctests/test_xcresult.py +0 -0
  380. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/tests/shell_tools/__init__.py +0 -0
  381. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/tests/shell_tools/keytool/__init__.py +0 -0
  382. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/tests/shell_tools/keytool/conftest.py +0 -0
  383. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/tests/shell_tools/keytool/mocks/android.ks +0 -0
  384. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/tests/shell_tools/keytool/mocks/non-rfc-cert-keystore.jks +0 -0
  385. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/tests/shell_tools/keytool/mocks/non-rfc-cert-keystore.p12 +0 -0
  386. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/tests/shell_tools/keytool/mocks/rfc-cert-keystore.jks +0 -0
  387. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/tests/shell_tools/keytool/mocks/rfc-cert-keystore.p12 +0 -0
  388. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/tests/shell_tools/keytool/test_get_certificate.py +0 -0
  389. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/tests/shell_tools/keytool/test_get_certificates.py +0 -0
  390. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/tests/shell_tools/keytool/test_validate.py +0 -0
  391. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/tests/tools/__init__.py +0 -0
  392. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/tests/tools/app_store_connect/__init__.py +0 -0
  393. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/tests/tools/app_store_connect/arguments/__init__.py +0 -0
  394. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/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.1}/tests/tools/app_store_connect/conftest.py +0 -0
  396. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/tests/tools/app_store_connect/mocks/AuthKeyMock.p8 +0 -0
  397. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/tests/tools/app_store_connect/test_from_cli_args.py +0 -0
  398. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/tests/tools/app_store_connect/test_publish_action.py +0 -0
  399. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/tests/tools/mocks/firebase_releases.json +0 -0
  400. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/tests/tools/mocks/google_play_tracks.json +0 -0
  401. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/tests/tools/test_android_app_bundle.py +0 -0
  402. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/tests/tools/test_firebase_app_distribution.py +0 -0
  403. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/tests/tools/test_google_play.py +0 -0
  404. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/tests/tools/test_keychain.py +0 -0
  405. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/tests/tools/test_universal_apk_generator.py +0 -0
  406. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/tests/utilities/__init__.py +0 -0
  407. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/tests/utilities/decorators/__init__.py +0 -0
  408. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/tests/utilities/decorators/test_deprecated.py +0 -0
  409. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/tests/utilities/test_backwards_file_reader.py +0 -0
  410. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/tests/utilities/test_case_conversion.py +0 -0
  411. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/tests/utilities/test_levenshtein_distance.py +0 -0
  412. {codemagic_cli_tools-0.49.0 → codemagic_cli_tools-0.50.1}/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.1
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.1"
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.1'
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.1.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"
@@ -2,3 +2,4 @@ from .collector import XcResultCollector
2
2
  from .converter import XcResultConverter
3
3
  from .xcresult import ActionsInvocationRecord
4
4
  from .xcresulttool import XcResultTool
5
+ from .xcresulttool import XcResultToolError
@@ -13,12 +13,19 @@ from typing import Sequence
13
13
 
14
14
  from codemagic.cli import CommandArg
15
15
  from codemagic.mixins import RunningCliAppMixin
16
+ from codemagic.mixins import StringConverterMixin
16
17
 
17
18
  if TYPE_CHECKING:
18
19
  from codemagic.cli import CliApp
19
20
 
20
21
 
21
- class XcResultTool(RunningCliAppMixin):
22
+ class XcResultToolError(IOError):
23
+ def __init__(self, message: str, stderr: str):
24
+ super().__init__(message)
25
+ self.stderr = stderr
26
+
27
+
28
+ class XcResultTool(RunningCliAppMixin, StringConverterMixin):
22
29
  @classmethod
23
30
  def get_bundle(cls, xcresult: pathlib.Path) -> Dict[str, Any]:
24
31
  cmd_args: List[CommandArg] = [
@@ -66,8 +73,8 @@ class XcResultTool(RunningCliAppMixin):
66
73
  return cls._run_command_with_cli_app(cli_app, command_args)
67
74
  else:
68
75
  return subprocess.check_output(command_args)
69
- except subprocess.CalledProcessError:
70
- raise IOError(error_message)
76
+ except subprocess.CalledProcessError as cpe:
77
+ raise XcResultToolError(error_message, cls._str(cpe.stderr)) from cpe
71
78
 
72
79
  @classmethod
73
80
  def _run_command_with_cli_app(cls, cli_app: CliApp, command_args: Sequence[CommandArg]) -> bytes:
@@ -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",),
@@ -36,6 +36,7 @@ from codemagic.models.simulator import Runtime
36
36
  from codemagic.models.simulator import Simulator
37
37
  from codemagic.models.xctests import XcResultCollector
38
38
  from codemagic.models.xctests import XcResultConverter
39
+ from codemagic.models.xctests import XcResultToolError
39
40
 
40
41
  from ._xcode_project.arguments import CustomExportOptions
41
42
  from ._xcode_project.arguments import ExportIpaArgument
@@ -501,21 +502,25 @@ class XcodeProject(cli.CliApp, PathFinderMixin):
501
502
  if not xcresult_collector.get_collected_results():
502
503
  raise XcodeProjectException("Did not find any test results")
503
504
 
504
- test_suites, xcresult = self._get_test_suites(
505
- xcresult_collector,
506
- show_found_result=True,
507
- save_xcresult_dir=output_dir,
508
- )
509
-
510
- message = (
511
- f"Executed {test_suites.tests} tests with "
512
- f"{test_suites.failures} failures and "
513
- f"{test_suites.errors} errors in "
514
- f"{test_suites.time:.2f} seconds.\n"
515
- )
516
- self.echo(Colors.BLUE(message))
517
- TestSuitePrinter(self.echo).print_test_suites(test_suites)
518
- self._save_test_suite(xcresult, test_suites, output_dir, output_extension)
505
+ try:
506
+ test_suites, xcresult = self._get_test_suites(
507
+ xcresult_collector,
508
+ show_found_result=True,
509
+ save_xcresult_dir=output_dir,
510
+ )
511
+ except XcResultToolError as e:
512
+ test_suites = None
513
+ self.logger.error(Colors.RED(f"Parsing test results failed\n{e}\n{e.stderr}"))
514
+ else:
515
+ message = (
516
+ f"Executed {test_suites.tests} tests with "
517
+ f"{test_suites.failures} failures and "
518
+ f"{test_suites.errors} errors in "
519
+ f"{test_suites.time:.2f} seconds.\n"
520
+ )
521
+ self.echo(Colors.BLUE(message))
522
+ TestSuitePrinter(self.echo).print_test_suites(test_suites)
523
+ self._save_test_suite(xcresult, test_suites, output_dir, output_extension)
519
524
 
520
525
  if not graceful_exit:
521
526
  if testing_failed or (test_suites and test_suites.has_failed_tests()):
@@ -539,7 +544,12 @@ class XcodeProject(cli.CliApp, PathFinderMixin):
539
544
  if not xcresults:
540
545
  raise XcodeProjectException("Did not find any Xcode test results for given patterns")
541
546
 
542
- test_suites, xcresult = self._get_test_suites(xcresult_collector, show_found_result=True)
547
+ try:
548
+ test_suites, xcresult = self._get_test_suites(xcresult_collector, show_found_result=True)
549
+ except XcResultToolError as e:
550
+ self.logger.error(Colors.RED(f"{e}\n{e.stderr}"))
551
+ raise XcodeProjectException("Parsing test results failed") from e
552
+
543
553
  TestSuitePrinter(self.echo).print_test_suites(test_suites)
544
554
 
545
555
  @cli.action(
@@ -564,7 +574,12 @@ class XcodeProject(cli.CliApp, PathFinderMixin):
564
574
  if not xcresults:
565
575
  raise XcodeProjectException("Did not find any Xcode test results for given patterns")
566
576
 
567
- test_suites, xcresult = self._get_test_suites(xcresult_collector, show_found_result=True)
577
+ try:
578
+ test_suites, xcresult = self._get_test_suites(xcresult_collector, show_found_result=True)
579
+ except XcResultToolError as e:
580
+ self.logger.error(Colors.RED(f"{e}\n{e.stderr}"))
581
+ raise XcodeProjectException("Parsing test results failed") from e
582
+
568
583
  output_dir.mkdir(parents=True, exist_ok=True)
569
584
  self._save_test_suite(xcresult, test_suites, output_dir, output_extension)
570
585
 
@@ -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