app_store_dev_api 0.1.9 → 0.3.1
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.
- checksums.yaml +4 -4
- data/.DS_Store +0 -0
- data/.claude/settings.local.json +23 -0
- data/CHANGELOG.md +59 -2
- data/CLAUDE.md +256 -0
- data/Gemfile +5 -0
- data/Gemfile.lock +35 -20
- data/README.md +212 -20
- data/Rakefile +99 -1
- data/SCRIPTS_ANALYSIS.md +261 -0
- data/docs/bundle_id_capabilities.md +382 -0
- data/docs/bundle_ids.md +417 -0
- data/docs/creating_api_keys.md +137 -0
- data/docs/generating_tokens.md +189 -0
- data/docs/openapi.oas4.2.json +231546 -0
- data/docs/openapi.oas4.3.json +230597 -0
- data/docs/pindo_usage_reference.md +234 -0
- data/docs/revoking_api_keys.md +118 -0
- data/install_local.bat +166 -0
- data/install_local.sh +95 -0
- data/install_local_fixed.sh +84 -0
- data/lib/.DS_Store +0 -0
- data/lib/app_store_dev_api/client/authorization.rb +7 -2
- data/lib/app_store_dev_api/client/builder.rb +43 -38
- data/lib/app_store_dev_api/client/options.rb +1 -1
- data/lib/app_store_dev_api/client.rb +31 -60
- data/lib/app_store_dev_api/object/attributes.rb +1 -1
- data/lib/app_store_dev_api/object/data.rb +6 -2
- data/lib/app_store_dev_api/object/relationships.rb +47 -0
- data/lib/app_store_dev_api/requests/v1/accessibility_declaration/create.rb +28 -0
- data/lib/app_store_dev_api/requests/v1/accessibility_declaration/update.rb +26 -0
- data/lib/app_store_dev_api/requests/v1/age_rating_declaration/update.rb +43 -0
- data/lib/app_store_dev_api/requests/v1/alternative_distribution_domain/create.rb +22 -0
- data/lib/app_store_dev_api/requests/v1/alternative_distribution_key/create.rb +25 -0
- data/lib/app_store_dev_api/requests/v1/alternative_distribution_package/create.rb +22 -0
- data/lib/app_store_dev_api/requests/v1/analytics_report_request/create.rb +25 -0
- data/lib/app_store_dev_api/requests/v1/android_to_ios_app_mapping_detail/create.rb +26 -0
- data/lib/app_store_dev_api/requests/v1/android_to_ios_app_mapping_detail/update.rb +22 -0
- data/lib/app_store_dev_api/requests/v1/app/update.rb +18 -20
- data/lib/app_store_dev_api/requests/v1/app_clip_advanced_experience/create.rb +32 -0
- data/lib/app_store_dev_api/requests/v1/app_clip_advanced_experience/update.rb +32 -0
- data/lib/app_store_dev_api/requests/v1/app_clip_advanced_experience_image/create.rb +22 -0
- data/lib/app_store_dev_api/requests/v1/app_clip_advanced_experience_image/update.rb +22 -0
- data/lib/app_store_dev_api/requests/v1/app_clip_app_store_review_detail/create.rb +19 -0
- data/lib/app_store_dev_api/requests/v1/{builds → app_clip_app_store_review_detail}/update.rb +4 -5
- data/lib/app_store_dev_api/requests/v1/app_clip_default_experience/create.rb +27 -0
- data/lib/app_store_dev_api/requests/v1/app_clip_default_experience/update.rb +25 -0
- data/lib/app_store_dev_api/requests/v1/app_clip_default_experience_localization/create.rb +26 -0
- data/lib/app_store_dev_api/requests/v1/app_clip_default_experience_localization/update.rb +21 -0
- data/lib/app_store_dev_api/requests/v1/app_clip_header_image/create.rb +26 -0
- data/lib/app_store_dev_api/requests/v1/app_clip_header_image/update.rb +22 -0
- data/lib/app_store_dev_api/requests/v1/app_custom_product_page/create.rb +28 -0
- data/lib/app_store_dev_api/requests/v1/app_custom_product_page/update.rb +22 -0
- data/lib/app_store_dev_api/requests/v1/app_custom_product_page_localization/create.rb +26 -0
- data/lib/app_store_dev_api/requests/v1/app_custom_product_page_localization/update.rb +21 -0
- data/lib/app_store_dev_api/requests/v1/app_custom_product_page_version/create.rb +26 -0
- data/lib/app_store_dev_api/requests/v1/app_custom_product_page_version/update.rb +21 -0
- data/lib/app_store_dev_api/requests/v1/app_encryption_declaration/create.rb +22 -0
- data/lib/app_store_dev_api/requests/v1/app_encryption_declaration_document/create.rb +24 -0
- data/lib/app_store_dev_api/requests/v1/app_encryption_declaration_document/update.rb +21 -0
- data/lib/app_store_dev_api/requests/v1/app_event/create.rb +26 -0
- data/lib/app_store_dev_api/requests/v1/app_event/update.rb +24 -0
- data/lib/app_store_dev_api/requests/v1/app_event_localization/create.rb +28 -0
- data/lib/app_store_dev_api/requests/v1/app_event_localization/update.rb +23 -0
- data/lib/app_store_dev_api/requests/v1/app_event_screenshot/create.rb +27 -0
- data/lib/app_store_dev_api/requests/v1/app_event_screenshot/update.rb +21 -0
- data/lib/app_store_dev_api/requests/v1/app_event_video_clip/create.rb +22 -0
- data/lib/app_store_dev_api/requests/v1/{promoted_purchases_image → app_event_video_clip}/update.rb +4 -4
- data/lib/app_store_dev_api/requests/v1/app_info/update.rb +15 -18
- data/lib/app_store_dev_api/requests/v1/app_info_localization/create.rb +17 -17
- data/lib/app_store_dev_api/requests/v1/app_info_localization/update.rb +14 -18
- data/lib/app_store_dev_api/requests/v1/app_preview/create.rb +22 -0
- data/lib/app_store_dev_api/requests/v1/app_preview/update.rb +22 -0
- data/lib/app_store_dev_api/requests/v1/app_preview_set/create.rb +25 -0
- data/lib/app_store_dev_api/requests/v1/app_preview_set/replace_app_previews_linkage.rb +19 -0
- data/lib/app_store_dev_api/requests/v1/app_price_schedule/create.rb +24 -0
- data/lib/app_store_dev_api/requests/v1/app_screenshot/create.rb +24 -0
- data/lib/app_store_dev_api/requests/v1/app_screenshot/update.rb +21 -0
- data/lib/app_store_dev_api/requests/v1/app_screenshot_set/create.rb +25 -0
- data/lib/app_store_dev_api/requests/v1/app_screenshot_set/replace_app_screenshots_linkage.rb +19 -0
- data/lib/app_store_dev_api/requests/v1/app_store_review_attachment/create.rb +20 -0
- data/lib/app_store_dev_api/requests/v1/app_store_review_attachment/update.rb +21 -0
- data/lib/app_store_dev_api/requests/v1/app_store_review_detail/create.rb +19 -20
- data/lib/app_store_dev_api/requests/v1/app_store_review_detail/update.rb +17 -18
- data/lib/app_store_dev_api/requests/v1/app_store_version/create.rb +20 -16
- data/lib/app_store_dev_api/requests/v1/app_store_version/update.rb +20 -18
- data/lib/app_store_dev_api/requests/v1/app_store_version_experiment/create.rb +26 -0
- data/lib/app_store_dev_api/requests/v1/app_store_version_experiment/update.rb +23 -0
- data/lib/app_store_dev_api/requests/v1/app_store_version_experiment_treatment/create.rb +27 -0
- data/lib/app_store_dev_api/requests/v1/app_store_version_experiment_treatment/update.rb +22 -0
- data/lib/app_store_dev_api/requests/v1/app_store_version_experiment_treatment_localization/create.rb +25 -0
- data/lib/app_store_dev_api/requests/v1/app_store_version_localization/create.rb +18 -18
- data/lib/app_store_dev_api/requests/v1/app_store_version_localization/update.rb +15 -18
- data/lib/app_store_dev_api/requests/v1/{app_store_version_phased_releases → app_store_version_phased_release}/create.rb +7 -2
- data/lib/app_store_dev_api/requests/v1/{app_store_version_phased_releases → app_store_version_phased_release}/update.rb +2 -2
- data/lib/app_store_dev_api/requests/v1/app_store_version_promotion/create.rb +10 -13
- data/lib/app_store_dev_api/requests/v1/{app_store_version_releases_request → app_store_version_release_request}/create.rb +5 -3
- data/lib/app_store_dev_api/requests/v1/app_tag/update.rb +21 -0
- data/lib/app_store_dev_api/requests/v1/background_asset/create.rb +19 -0
- data/lib/app_store_dev_api/requests/v1/background_asset/update.rb +21 -0
- data/lib/app_store_dev_api/requests/v1/background_asset_upload_file/create.rb +27 -0
- data/lib/app_store_dev_api/requests/v1/background_asset_upload_file/update.rb +23 -0
- data/lib/app_store_dev_api/requests/v1/background_asset_version/create.rb +16 -0
- data/lib/app_store_dev_api/requests/v1/beta_app_clip_invocation/create.rb +26 -0
- data/lib/app_store_dev_api/requests/v1/beta_app_clip_invocation/update.rb +21 -0
- data/lib/app_store_dev_api/requests/v1/beta_app_clip_invocation_localization/create.rb +26 -0
- data/lib/app_store_dev_api/requests/v1/beta_app_clip_invocation_localization/update.rb +21 -0
- data/lib/app_store_dev_api/requests/v1/beta_app_localization/create.rb +30 -0
- data/lib/app_store_dev_api/requests/v1/beta_app_localization/update.rb +25 -0
- data/lib/app_store_dev_api/requests/v1/beta_app_review_detail/update.rb +28 -0
- data/lib/app_store_dev_api/requests/v1/beta_app_review_submission/create.rb +22 -0
- data/lib/app_store_dev_api/requests/v1/beta_build_localization/create.rb +18 -18
- data/lib/app_store_dev_api/requests/v1/beta_build_localization/update.rb +15 -20
- data/lib/app_store_dev_api/requests/v1/beta_group/create.rb +33 -0
- data/lib/app_store_dev_api/requests/v1/beta_group/update.rb +27 -0
- data/lib/app_store_dev_api/requests/v1/beta_license_agreement/update.rb +21 -0
- data/lib/app_store_dev_api/requests/v1/beta_recruitment_criterion/create.rb +25 -0
- data/lib/app_store_dev_api/requests/v1/beta_recruitment_criterion/update.rb +21 -0
- data/lib/app_store_dev_api/requests/v1/beta_tester/create.rb +28 -0
- data/lib/app_store_dev_api/requests/v1/beta_tester_invitation/create.rb +23 -0
- data/lib/app_store_dev_api/requests/v1/build_beta_detail/update.rb +10 -13
- data/lib/app_store_dev_api/requests/v1/{subscription_price_change_consent_reason → build_beta_notification}/create.rb +8 -2
- data/lib/app_store_dev_api/requests/v1/build_upload/create.rb +27 -0
- data/lib/app_store_dev_api/requests/v1/build_upload_file/create.rb +28 -0
- data/lib/app_store_dev_api/requests/v1/build_upload_file/update.rb +22 -0
- data/lib/app_store_dev_api/requests/v1/bundle_id/create.rb +12 -15
- data/lib/app_store_dev_api/requests/v1/bundle_id/update.rb +20 -0
- data/lib/app_store_dev_api/requests/v1/bundle_id_capability/create.rb +13 -16
- data/lib/app_store_dev_api/requests/v1/bundle_id_capability/update.rb +18 -0
- data/lib/app_store_dev_api/requests/v1/certificate/create.rb +14 -15
- data/lib/app_store_dev_api/requests/v1/certificate/update.rb +17 -0
- data/lib/app_store_dev_api/requests/v1/ci_build_run/create.rb +28 -0
- data/lib/app_store_dev_api/requests/v1/ci_workflow/create.rb +41 -0
- data/lib/app_store_dev_api/requests/v1/ci_workflow/update.rb +39 -0
- data/lib/app_store_dev_api/requests/v1/customer_review_response_v1/create.rb +25 -0
- data/lib/app_store_dev_api/requests/v1/device/update.rb +18 -0
- data/lib/app_store_dev_api/requests/v1/end_app_availability_pre_order/create.rb +16 -0
- data/lib/app_store_dev_api/requests/v1/end_user_license_agreement/create.rb +24 -0
- data/lib/app_store_dev_api/requests/v1/end_user_license_agreement/update.rb +24 -0
- data/lib/app_store_dev_api/requests/v1/game_center_achievement/create.rb +31 -0
- data/lib/app_store_dev_api/requests/v1/game_center_achievement/update.rb +26 -0
- data/lib/app_store_dev_api/requests/v1/game_center_achievement_image/create.rb +26 -0
- data/lib/app_store_dev_api/requests/v1/game_center_achievement_image/update.rb +21 -0
- data/lib/app_store_dev_api/requests/v1/game_center_achievement_localization/create.rb +28 -0
- data/lib/app_store_dev_api/requests/v1/game_center_achievement_localization/update.rb +23 -0
- data/lib/app_store_dev_api/requests/v1/game_center_achievement_release/create.rb +23 -0
- data/lib/app_store_dev_api/requests/v1/game_center_activity/create.rb +32 -0
- data/lib/app_store_dev_api/requests/v1/game_center_activity/update.rb +27 -0
- data/lib/app_store_dev_api/requests/v1/game_center_activity_image/create.rb +27 -0
- data/lib/app_store_dev_api/requests/v1/game_center_activity_image/update.rb +21 -0
- data/lib/app_store_dev_api/requests/v1/game_center_activity_localization/create.rb +27 -0
- data/lib/app_store_dev_api/requests/v1/game_center_activity_localization/update.rb +22 -0
- data/lib/app_store_dev_api/requests/v1/game_center_activity_version/create.rb +25 -0
- data/lib/app_store_dev_api/requests/v1/game_center_activity_version/update.rb +21 -0
- data/lib/app_store_dev_api/requests/v1/game_center_activity_version_release/create.rb +23 -0
- data/lib/app_store_dev_api/requests/v1/game_center_app_version/create.rb +22 -0
- data/lib/app_store_dev_api/requests/v1/game_center_app_version/update.rb +21 -0
- data/lib/app_store_dev_api/requests/v1/game_center_challenge/create.rb +31 -0
- data/lib/app_store_dev_api/requests/v1/game_center_challenge/update.rb +28 -0
- data/lib/app_store_dev_api/requests/v1/game_center_challenge_image/create.rb +27 -0
- data/lib/app_store_dev_api/requests/v1/game_center_challenge_image/update.rb +21 -0
- data/lib/app_store_dev_api/requests/v1/game_center_challenge_localization/create.rb +27 -0
- data/lib/app_store_dev_api/requests/v1/game_center_challenge_localization/update.rb +22 -0
- data/lib/app_store_dev_api/requests/v1/game_center_challenge_version/create.rb +22 -0
- data/lib/app_store_dev_api/requests/v1/game_center_challenge_version_release/create.rb +23 -0
- data/lib/app_store_dev_api/requests/v1/{subscription_review_screenshot → game_center_detail}/create.rb +9 -4
- data/lib/app_store_dev_api/requests/v1/game_center_detail/update.rb +29 -0
- data/lib/app_store_dev_api/requests/v1/{customer_review_response → game_center_group}/create.rb +6 -4
- data/lib/app_store_dev_api/requests/v1/game_center_group/update.rb +21 -0
- data/lib/app_store_dev_api/requests/v1/game_center_leaderboard/create.rb +38 -0
- data/lib/app_store_dev_api/requests/v1/game_center_leaderboard/update.rb +32 -0
- data/lib/app_store_dev_api/requests/v1/game_center_leaderboard_entry_submission/create.rb +27 -0
- data/lib/app_store_dev_api/requests/v1/game_center_leaderboard_image/create.rb +26 -0
- data/lib/app_store_dev_api/requests/v1/game_center_leaderboard_image/update.rb +21 -0
- data/lib/app_store_dev_api/requests/v1/game_center_leaderboard_localization/create.rb +30 -0
- data/lib/app_store_dev_api/requests/v1/game_center_leaderboard_localization/update.rb +25 -0
- data/lib/app_store_dev_api/requests/v1/game_center_leaderboard_release/create.rb +23 -0
- data/lib/app_store_dev_api/requests/v1/game_center_leaderboard_set/create.rb +28 -0
- data/lib/app_store_dev_api/requests/v1/game_center_leaderboard_set/update.rb +21 -0
- data/lib/app_store_dev_api/requests/v1/game_center_leaderboard_set_image/create.rb +26 -0
- data/lib/app_store_dev_api/requests/v1/game_center_leaderboard_set_image/update.rb +21 -0
- data/lib/app_store_dev_api/requests/v1/game_center_leaderboard_set_localization/create.rb +26 -0
- data/lib/app_store_dev_api/requests/v1/game_center_leaderboard_set_localization/update.rb +21 -0
- data/lib/app_store_dev_api/requests/v1/game_center_leaderboard_set_member_localization/create.rb +27 -0
- data/lib/app_store_dev_api/requests/v1/game_center_leaderboard_set_member_localization/update.rb +21 -0
- data/lib/app_store_dev_api/requests/v1/game_center_leaderboard_set_release/create.rb +23 -0
- data/lib/app_store_dev_api/requests/v1/game_center_matchmaking_queue/create.rb +27 -0
- data/lib/app_store_dev_api/requests/v1/game_center_matchmaking_queue/update.rb +26 -0
- data/lib/app_store_dev_api/requests/v1/game_center_matchmaking_rule/create.rb +29 -0
- data/lib/app_store_dev_api/requests/v1/game_center_matchmaking_rule/update.rb +23 -0
- data/lib/app_store_dev_api/requests/v1/game_center_matchmaking_rule_set/create.rb +24 -0
- data/lib/app_store_dev_api/requests/v1/game_center_matchmaking_rule_set/update.rb +22 -0
- data/lib/app_store_dev_api/requests/v1/game_center_matchmaking_rule_set_test/create.rb +23 -0
- data/lib/app_store_dev_api/requests/v1/game_center_matchmaking_team/create.rb +27 -0
- data/lib/app_store_dev_api/requests/v1/game_center_matchmaking_team/update.rb +22 -0
- data/lib/app_store_dev_api/requests/v1/game_center_player_achievement_submission/create.rb +26 -0
- data/lib/app_store_dev_api/requests/v1/{in_app_purchase_review_screenshot → in_app_purchase_app_store_review_screenshot}/create.rb +9 -3
- data/lib/app_store_dev_api/requests/v1/{in_app_purchase_review_screenshot → in_app_purchase_app_store_review_screenshot}/update.rb +4 -3
- data/lib/app_store_dev_api/requests/v1/in_app_purchase_availability/create.rb +13 -12
- data/lib/app_store_dev_api/requests/v1/in_app_purchase_image/create.rb +24 -0
- data/lib/app_store_dev_api/requests/v1/in_app_purchase_image/update.rb +18 -0
- data/lib/app_store_dev_api/requests/v1/in_app_purchase_localization/create.rb +14 -14
- data/lib/app_store_dev_api/requests/v1/in_app_purchase_offer_code/create.rb +27 -0
- data/lib/app_store_dev_api/requests/v1/in_app_purchase_offer_code/update.rb +21 -0
- data/lib/app_store_dev_api/requests/v1/in_app_purchase_offer_code_custom_code/create.rb +27 -0
- data/lib/app_store_dev_api/requests/v1/in_app_purchase_offer_code_custom_code/update.rb +21 -0
- data/lib/app_store_dev_api/requests/v1/in_app_purchase_offer_code_one_time_use_code/create.rb +27 -0
- data/lib/app_store_dev_api/requests/v1/in_app_purchase_offer_code_one_time_use_code/update.rb +21 -0
- data/lib/app_store_dev_api/requests/v1/in_app_purchase_price_schedule/create.rb +11 -10
- data/lib/app_store_dev_api/requests/v1/in_app_purchase_submission/create.rb +9 -10
- data/lib/app_store_dev_api/requests/v1/marketplace_search_detail/create.rb +25 -0
- data/lib/app_store_dev_api/requests/v1/marketplace_search_detail/update.rb +21 -0
- data/lib/app_store_dev_api/requests/v1/{promoted_purchases → marketplace_webhook}/create.rb +7 -5
- data/lib/app_store_dev_api/requests/v1/marketplace_webhook/update.rb +22 -0
- data/lib/app_store_dev_api/requests/v1/merchant_id/create.rb +22 -0
- data/lib/app_store_dev_api/requests/v1/{app_price_schedule → merchant_id}/update.rb +7 -3
- data/lib/app_store_dev_api/requests/v1/nomination/create.rb +39 -0
- data/lib/app_store_dev_api/requests/v1/nomination/update.rb +40 -0
- data/lib/app_store_dev_api/requests/v1/pass_type_id/create.rb +22 -0
- data/lib/app_store_dev_api/requests/v1/pass_type_id/update.rb +21 -0
- data/lib/app_store_dev_api/requests/v1/profile/create.rb +14 -23
- data/lib/app_store_dev_api/requests/v1/promoted_purchase/create.rb +28 -0
- data/lib/app_store_dev_api/requests/v1/{promoted_purchases → promoted_purchase}/update.rb +4 -3
- data/lib/app_store_dev_api/requests/v1/review_submission/create.rb +11 -7
- data/lib/app_store_dev_api/requests/v1/review_submission/update.rb +12 -15
- data/lib/app_store_dev_api/requests/v1/review_submission_item/create.rb +20 -8
- data/lib/app_store_dev_api/requests/v1/review_submission_item/update.rb +18 -0
- data/lib/app_store_dev_api/requests/v1/routing_app_coverage/create.rb +24 -0
- data/lib/app_store_dev_api/requests/v1/routing_app_coverage/update.rb +21 -0
- data/lib/app_store_dev_api/requests/v1/subscription/create.rb +17 -17
- data/lib/app_store_dev_api/requests/v1/subscription/update.rb +19 -17
- data/lib/app_store_dev_api/requests/v1/subscription_app_store_review_screenshot/create.rb +26 -0
- data/lib/app_store_dev_api/requests/v1/{subscription_review_screenshot → subscription_app_store_review_screenshot}/update.rb +4 -3
- data/lib/app_store_dev_api/requests/v1/subscription_availability/create.rb +13 -12
- data/lib/app_store_dev_api/requests/v1/subscription_grace_period/update.rb +13 -16
- data/lib/app_store_dev_api/requests/v1/subscription_group/create.rb +12 -13
- data/lib/app_store_dev_api/requests/v1/subscription_group/update.rb +10 -14
- data/lib/app_store_dev_api/requests/v1/subscription_group_localization/create.rb +14 -16
- data/lib/app_store_dev_api/requests/v1/subscription_group_localization/update.rb +11 -16
- data/lib/app_store_dev_api/requests/v1/subscription_group_submission/create.rb +9 -10
- data/lib/app_store_dev_api/requests/v1/subscription_image/create.rb +20 -0
- data/lib/app_store_dev_api/requests/v1/subscription_image/update.rb +21 -0
- data/lib/app_store_dev_api/requests/v1/subscription_introductory_offer/create.rb +18 -18
- data/lib/app_store_dev_api/requests/v1/subscription_introductory_offer/update.rb +10 -15
- data/lib/app_store_dev_api/requests/v1/subscription_localization/create.rb +14 -16
- data/lib/app_store_dev_api/requests/v1/subscription_offer_code/create.rb +19 -19
- data/lib/app_store_dev_api/requests/v1/{subscription_offer_code_cunstom_code → subscription_offer_code_custom_code}/create.rb +9 -5
- data/lib/app_store_dev_api/requests/v1/{subscription_offer_code_cunstom_code → subscription_offer_code_custom_code}/update.rb +2 -3
- data/lib/app_store_dev_api/requests/v1/subscription_offer_code_one_time_use_code/create.rb +14 -15
- data/lib/app_store_dev_api/requests/v1/subscription_price/create.rb +15 -13
- data/lib/app_store_dev_api/requests/v1/subscription_promotional_offer/create.rb +17 -18
- data/lib/app_store_dev_api/requests/v1/subscription_promotional_offer/update.rb +10 -12
- data/lib/app_store_dev_api/requests/v1/subscription_submission/create.rb +9 -8
- data/lib/app_store_dev_api/requests/v1/{app_availability → territory_availability}/update.rb +4 -7
- data/lib/app_store_dev_api/requests/v1/user/update.rb +27 -0
- data/lib/app_store_dev_api/requests/v1/user_invitation/create.rb +30 -0
- data/lib/app_store_dev_api/requests/v1/webhook/create.rb +23 -0
- data/lib/app_store_dev_api/requests/v1/webhook/update.rb +21 -0
- data/lib/app_store_dev_api/requests/v1/webhook_delivery/create.rb +16 -0
- data/lib/app_store_dev_api/requests/v1/webhook_ping/create.rb +16 -0
- data/lib/app_store_dev_api/requests/v1/win_back_offer/create.rb +31 -0
- data/lib/app_store_dev_api/requests/v1/win_back_offer/update.rb +23 -0
- data/lib/app_store_dev_api/requests/v1/win_back_offer/update_prices_linkages.rb +18 -0
- data/lib/app_store_dev_api/requests/v2/app_availability/create.rb +13 -14
- data/lib/app_store_dev_api/requests/v2/app_availability_v2/create.rb +26 -0
- data/lib/app_store_dev_api/requests/v2/app_store_version_experiment_v2/create.rb +27 -0
- data/lib/app_store_dev_api/requests/v2/app_store_version_experiment_v2/update.rb +23 -0
- data/lib/app_store_dev_api/requests/v2/game_center_achievement_image_v2/create.rb +26 -0
- data/lib/app_store_dev_api/requests/v2/game_center_achievement_image_v2/update.rb +21 -0
- data/lib/app_store_dev_api/requests/v2/game_center_achievement_localization_v2/create.rb +28 -0
- data/lib/app_store_dev_api/requests/v2/game_center_achievement_localization_v2/update.rb +23 -0
- data/lib/app_store_dev_api/requests/v2/game_center_achievement_v2/create.rb +32 -0
- data/lib/app_store_dev_api/requests/v2/game_center_achievement_v2/update.rb +26 -0
- data/lib/app_store_dev_api/requests/v2/game_center_achievement_version_v2/create.rb +22 -0
- data/lib/app_store_dev_api/requests/v2/game_center_leaderboard_image_v2/create.rb +26 -0
- data/lib/app_store_dev_api/requests/v2/game_center_leaderboard_image_v2/update.rb +21 -0
- data/lib/app_store_dev_api/requests/v2/game_center_leaderboard_localization_v2/create.rb +30 -0
- data/lib/app_store_dev_api/requests/v2/game_center_leaderboard_localization_v2/update.rb +25 -0
- data/lib/app_store_dev_api/requests/v2/game_center_leaderboard_set_image_v2/create.rb +26 -0
- data/lib/app_store_dev_api/requests/v2/game_center_leaderboard_set_image_v2/update.rb +21 -0
- data/lib/app_store_dev_api/requests/v2/game_center_leaderboard_set_localization_v2/create.rb +26 -0
- data/lib/app_store_dev_api/requests/v2/game_center_leaderboard_set_localization_v2/update.rb +21 -0
- data/lib/app_store_dev_api/requests/v2/game_center_leaderboard_set_v2/create.rb +29 -0
- data/lib/app_store_dev_api/requests/v2/game_center_leaderboard_set_v2/update.rb +21 -0
- data/lib/app_store_dev_api/requests/v2/game_center_leaderboard_set_version_v2/create.rb +22 -0
- data/lib/app_store_dev_api/requests/v2/game_center_leaderboard_v2/create.rb +39 -0
- data/lib/app_store_dev_api/requests/v2/game_center_leaderboard_v2/update.rb +32 -0
- data/lib/app_store_dev_api/requests/v2/game_center_leaderboard_version_v2/create.rb +22 -0
- data/lib/app_store_dev_api/requests/v2/in_app_purchase/create.rb +16 -17
- data/lib/app_store_dev_api/requests/v2/in_app_purchase/update.rb +12 -15
- data/lib/app_store_dev_api/requests/v2/in_app_purchase_v2/create.rb +29 -0
- data/lib/app_store_dev_api/requests/v2/in_app_purchase_v2/update.rb +23 -0
- data/lib/app_store_dev_api/requests/v2/{sandbox_tester → sandbox_tester_v2}/update.rb +5 -4
- data/lib/app_store_dev_api/requests/v2/{sandbox_tester_clear_purchase_history/update.rb → sandbox_testers_clear_purchase_history_request_v2/create.rb} +9 -3
- data/lib/app_store_dev_api/version.rb +1 -1
- data/lib/config/{schema.json → schema_backup.json} +1185 -51
- data/lib/config/schema_v4.3.json +7307 -0
- data/push_all.sh +6 -0
- data/release_remote.sh +140 -0
- data/scripts/README.md +126 -0
- data/scripts/cleanup_scripts.sh +73 -0
- data/scripts/comprehensive_validation.rb +359 -0
- data/scripts/comprehensive_validation_report.json +12 -0
- data/scripts/final_validation_report.rb +134 -0
- data/scripts/find_deprecated_requests.rb +145 -0
- data/scripts/test_request_body_classes.rb +185 -0
- data/scripts/validate_requests.rb +192 -0
- data/test_library.rb +160 -0
- metadata +250 -34
- data/CODE_OF_CONDUCT.md +0 -84
- data/lib/app_store_dev_api/requests/v1/app_promoted_purchases/update.rb +0 -16
- data/lib/app_store_dev_api/requests/v1/app_store_version_build_linkage_request/update.rb +0 -17
- data/lib/app_store_dev_api/requests/v1/build_beta_groups/create.rb +0 -16
- data/lib/app_store_dev_api/requests/v1/build_beta_groups/delete.rb +0 -16
- data/lib/app_store_dev_api/requests/v1/promoted_purchases_image/create.rb +0 -20
- data/lib/app_store_dev_api/requests/v2/sandbox_tester/create.rb +0 -23
- data/release.sh +0 -55
data/docs/bundle_ids.md
ADDED
|
@@ -0,0 +1,417 @@
|
|
|
1
|
+
# Bundle IDs - App Store Connect API
|
|
2
|
+
|
|
3
|
+
> 官方文档: https://developer.apple.com/documentation/appstoreconnectapi/bundle-ids
|
|
4
|
+
|
|
5
|
+
## 概述
|
|
6
|
+
|
|
7
|
+
Bundle IDs 是用于标识 iOS、macOS 或通用平台应用的唯一标识符。通过 App Store Connect API,你可以注册、查询、更新和删除 Bundle ID,并管理其关联的 App、Capabilities 和 Profiles。
|
|
8
|
+
|
|
9
|
+
## 数据模型
|
|
10
|
+
|
|
11
|
+
### BundleId 对象
|
|
12
|
+
|
|
13
|
+
| 字段 | 类型 | 说明 |
|
|
14
|
+
|------|------|------|
|
|
15
|
+
| `type` | string | 固定值 `"bundleIds"` |
|
|
16
|
+
| `id` | string | 资源唯一标识 |
|
|
17
|
+
| `attributes.name` | string | Bundle ID 显示名称 |
|
|
18
|
+
| `attributes.platform` | BundleIdPlatform | 平台类型 |
|
|
19
|
+
| `attributes.identifier` | string | Bundle ID 标识符(如 `com.example.app`) |
|
|
20
|
+
| `attributes.seedId` | string | Team Seed ID |
|
|
21
|
+
|
|
22
|
+
### BundleIdPlatform 枚举
|
|
23
|
+
|
|
24
|
+
| 值 | 说明 |
|
|
25
|
+
|----|------|
|
|
26
|
+
| `IOS` | iOS 平台 |
|
|
27
|
+
| `MAC_OS` | macOS 平台 |
|
|
28
|
+
| `UNIVERSAL` | 通用平台(iOS + macOS) |
|
|
29
|
+
|
|
30
|
+
### 关联关系 (Relationships)
|
|
31
|
+
|
|
32
|
+
| 关系 | 类型 | 说明 |
|
|
33
|
+
|------|------|------|
|
|
34
|
+
| `profiles` | Profiles[] | 关联的配置文件 |
|
|
35
|
+
| `bundleIdCapabilities` | BundleIdCapability[] | 关联的能力配置 |
|
|
36
|
+
| `app` | App | 关联的应用 |
|
|
37
|
+
|
|
38
|
+
---
|
|
39
|
+
|
|
40
|
+
## API 端点
|
|
41
|
+
|
|
42
|
+
### 1. 列出所有 Bundle IDs
|
|
43
|
+
|
|
44
|
+
```
|
|
45
|
+
GET /v1/bundleIds
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
获取所有已注册的 Bundle ID 列表。
|
|
49
|
+
|
|
50
|
+
#### 查询参数
|
|
51
|
+
|
|
52
|
+
**过滤 (Filter)**
|
|
53
|
+
|
|
54
|
+
| 参数 | 类型 | 说明 |
|
|
55
|
+
|------|------|------|
|
|
56
|
+
| `filter[name]` | string | 按名称过滤 |
|
|
57
|
+
| `filter[platform]` | string | 按平台过滤,可选值: `IOS`, `MAC_OS`, `UNIVERSAL` |
|
|
58
|
+
| `filter[identifier]` | string | 按标识符过滤 |
|
|
59
|
+
| `filter[seedId]` | string | 按 Seed ID 过滤 |
|
|
60
|
+
| `filter[id]` | string | 按资源 ID 过滤 |
|
|
61
|
+
|
|
62
|
+
**排序 (Sort)**
|
|
63
|
+
|
|
64
|
+
| 参数 | 说明 |
|
|
65
|
+
|------|------|
|
|
66
|
+
| `sort` | 排序字段,可选: `name`, `-name`, `platform`, `-platform`, `identifier`, `-identifier`, `seedId`, `-seedId`, `id`, `-id` |
|
|
67
|
+
|
|
68
|
+
**字段选择 (Fields)**
|
|
69
|
+
|
|
70
|
+
| 参数 | 可选值 |
|
|
71
|
+
|------|--------|
|
|
72
|
+
| `fields[bundleIds]` | `name`, `platform`, `identifier`, `seedId`, `profiles`, `bundleIdCapabilities`, `app` |
|
|
73
|
+
| `fields[profiles]` | `name`, `platform`, `profileType`, `profileState`, `profileContent`, `uuid`, `createdDate`, `expirationDate`, `bundleId`, `devices`, `certificates` |
|
|
74
|
+
| `fields[bundleIdCapabilities]` | `capabilityType`, `settings` |
|
|
75
|
+
| `fields[apps]` | `name`, `bundleId`, `sku`, `primaryLocale` 等 |
|
|
76
|
+
|
|
77
|
+
**分页与包含**
|
|
78
|
+
|
|
79
|
+
| 参数 | 说明 |
|
|
80
|
+
|------|------|
|
|
81
|
+
| `limit` | 每页数量限制 |
|
|
82
|
+
| `limit[bundleIdCapabilities]` | Capabilities 关系数量限制 |
|
|
83
|
+
| `limit[profiles]` | Profiles 关系数量限制 |
|
|
84
|
+
| `include` | 包含关联资源,可选: `profiles`, `bundleIdCapabilities`, `app` |
|
|
85
|
+
|
|
86
|
+
#### 响应
|
|
87
|
+
|
|
88
|
+
| 状态码 | 说明 | 响应体 |
|
|
89
|
+
|--------|------|--------|
|
|
90
|
+
| 200 | 成功 | `BundleIdsResponse` |
|
|
91
|
+
| 400 | 请求参数错误 | `ErrorResponse` |
|
|
92
|
+
| 401 | 未认证 | `ErrorResponse` |
|
|
93
|
+
| 403 | 无权限 | `ErrorResponse` |
|
|
94
|
+
| 429 | 请求过于频繁 | `ErrorResponse` |
|
|
95
|
+
|
|
96
|
+
---
|
|
97
|
+
|
|
98
|
+
### 2. 注册新的 Bundle ID
|
|
99
|
+
|
|
100
|
+
```
|
|
101
|
+
POST /v1/bundleIds
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
注册一个新的 Bundle ID。
|
|
105
|
+
|
|
106
|
+
#### 请求体 (BundleIdCreateRequest)
|
|
107
|
+
|
|
108
|
+
```json
|
|
109
|
+
{
|
|
110
|
+
"data": {
|
|
111
|
+
"type": "bundleIds",
|
|
112
|
+
"attributes": {
|
|
113
|
+
"name": "My App Bundle ID",
|
|
114
|
+
"platform": "IOS",
|
|
115
|
+
"identifier": "com.example.myapp",
|
|
116
|
+
"seedId": "XXXXXXXXXX"
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
**必填字段:**
|
|
123
|
+
|
|
124
|
+
| 字段 | 类型 | 说明 |
|
|
125
|
+
|------|------|------|
|
|
126
|
+
| `attributes.name` | string | **必填** - Bundle ID 显示名称 |
|
|
127
|
+
| `attributes.platform` | BundleIdPlatform | **必填** - 平台类型 |
|
|
128
|
+
| `attributes.identifier` | string | **必填** - Bundle ID 标识符 |
|
|
129
|
+
|
|
130
|
+
**可选字段:**
|
|
131
|
+
|
|
132
|
+
| 字段 | 类型 | 说明 |
|
|
133
|
+
|------|------|------|
|
|
134
|
+
| `attributes.seedId` | string | 可选 - Team Seed ID(nullable) |
|
|
135
|
+
|
|
136
|
+
#### 响应
|
|
137
|
+
|
|
138
|
+
| 状态码 | 说明 | 响应体 |
|
|
139
|
+
|--------|------|--------|
|
|
140
|
+
| 201 | 创建成功 | `BundleIdResponse` |
|
|
141
|
+
| 400 | 请求参数错误 | `ErrorResponse` |
|
|
142
|
+
| 401 | 未认证 | `ErrorResponse` |
|
|
143
|
+
| 403 | 无权限 | `ErrorResponse` |
|
|
144
|
+
| 409 | 资源冲突(已存在) | `ErrorResponse` |
|
|
145
|
+
| 422 | 请求体无法处理 | `ErrorResponse` |
|
|
146
|
+
| 429 | 请求过于频繁 | `ErrorResponse` |
|
|
147
|
+
|
|
148
|
+
---
|
|
149
|
+
|
|
150
|
+
### 3. 获取单个 Bundle ID
|
|
151
|
+
|
|
152
|
+
```
|
|
153
|
+
GET /v1/bundleIds/{id}
|
|
154
|
+
```
|
|
155
|
+
|
|
156
|
+
根据 ID 获取指定的 Bundle ID 信息。
|
|
157
|
+
|
|
158
|
+
#### 路径参数
|
|
159
|
+
|
|
160
|
+
| 参数 | 类型 | 说明 |
|
|
161
|
+
|------|------|------|
|
|
162
|
+
| `id` | string | **必填** - Bundle ID 资源的唯一标识 |
|
|
163
|
+
|
|
164
|
+
#### 查询参数
|
|
165
|
+
|
|
166
|
+
| 参数 | 说明 |
|
|
167
|
+
|------|------|
|
|
168
|
+
| `fields[bundleIds]` | 选择返回的 Bundle ID 字段 |
|
|
169
|
+
| `fields[profiles]` | 选择返回的 Profile 字段 |
|
|
170
|
+
| `fields[bundleIdCapabilities]` | 选择返回的 Capability 字段 |
|
|
171
|
+
| `fields[apps]` | 选择返回的 App 字段 |
|
|
172
|
+
| `include` | 包含关联资源: `profiles`, `bundleIdCapabilities`, `app` |
|
|
173
|
+
| `limit[bundleIdCapabilities]` | Capabilities 数量限制 |
|
|
174
|
+
| `limit[profiles]` | Profiles 数量限制 |
|
|
175
|
+
|
|
176
|
+
#### 响应
|
|
177
|
+
|
|
178
|
+
| 状态码 | 说明 | 响应体 |
|
|
179
|
+
|--------|------|--------|
|
|
180
|
+
| 200 | 成功 | `BundleIdResponse` |
|
|
181
|
+
| 400 | 请求参数错误 | `ErrorResponse` |
|
|
182
|
+
| 401 | 未认证 | `ErrorResponse` |
|
|
183
|
+
| 403 | 无权限 | `ErrorResponse` |
|
|
184
|
+
| 404 | 资源不存在 | `ErrorResponse` |
|
|
185
|
+
| 429 | 请求过于频繁 | `ErrorResponse` |
|
|
186
|
+
|
|
187
|
+
---
|
|
188
|
+
|
|
189
|
+
### 4. 更新 Bundle ID
|
|
190
|
+
|
|
191
|
+
```
|
|
192
|
+
PATCH /v1/bundleIds/{id}
|
|
193
|
+
```
|
|
194
|
+
|
|
195
|
+
更新已有 Bundle ID 的名称。
|
|
196
|
+
|
|
197
|
+
#### 路径参数
|
|
198
|
+
|
|
199
|
+
| 参数 | 类型 | 说明 |
|
|
200
|
+
|------|------|------|
|
|
201
|
+
| `id` | string | **必填** - Bundle ID 资源的唯一标识 |
|
|
202
|
+
|
|
203
|
+
#### 请求体 (BundleIdUpdateRequest)
|
|
204
|
+
|
|
205
|
+
```json
|
|
206
|
+
{
|
|
207
|
+
"data": {
|
|
208
|
+
"type": "bundleIds",
|
|
209
|
+
"id": "BUNDLE_ID_RESOURCE_ID",
|
|
210
|
+
"attributes": {
|
|
211
|
+
"name": "Updated App Name"
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
```
|
|
216
|
+
|
|
217
|
+
**可更新字段:**
|
|
218
|
+
|
|
219
|
+
| 字段 | 类型 | 说明 |
|
|
220
|
+
|------|------|------|
|
|
221
|
+
| `attributes.name` | string | 可选 - 新的显示名称(nullable) |
|
|
222
|
+
|
|
223
|
+
> 注意: `platform` 和 `identifier` 字段在创建后不可修改。
|
|
224
|
+
|
|
225
|
+
#### 响应
|
|
226
|
+
|
|
227
|
+
| 状态码 | 说明 | 响应体 |
|
|
228
|
+
|--------|------|--------|
|
|
229
|
+
| 200 | 更新成功 | `BundleIdResponse` |
|
|
230
|
+
| 400 | 请求参数错误 | `ErrorResponse` |
|
|
231
|
+
| 401 | 未认证 | `ErrorResponse` |
|
|
232
|
+
| 403 | 无权限 | `ErrorResponse` |
|
|
233
|
+
| 404 | 资源不存在 | `ErrorResponse` |
|
|
234
|
+
| 409 | 资源冲突 | `ErrorResponse` |
|
|
235
|
+
| 422 | 请求体无法处理 | `ErrorResponse` |
|
|
236
|
+
| 429 | 请求过于频繁 | `ErrorResponse` |
|
|
237
|
+
|
|
238
|
+
---
|
|
239
|
+
|
|
240
|
+
### 5. 删除 Bundle ID
|
|
241
|
+
|
|
242
|
+
```
|
|
243
|
+
DELETE /v1/bundleIds/{id}
|
|
244
|
+
```
|
|
245
|
+
|
|
246
|
+
删除指定的 Bundle ID。
|
|
247
|
+
|
|
248
|
+
#### 路径参数
|
|
249
|
+
|
|
250
|
+
| 参数 | 类型 | 说明 |
|
|
251
|
+
|------|------|------|
|
|
252
|
+
| `id` | string | **必填** - Bundle ID 资源的唯一标识 |
|
|
253
|
+
|
|
254
|
+
#### 响应
|
|
255
|
+
|
|
256
|
+
| 状态码 | 说明 |
|
|
257
|
+
|--------|------|
|
|
258
|
+
| 204 | 删除成功(无响应体) |
|
|
259
|
+
| 400 | 请求参数错误 |
|
|
260
|
+
| 401 | 未认证 |
|
|
261
|
+
| 403 | 无权限 |
|
|
262
|
+
| 404 | 资源不存在 |
|
|
263
|
+
| 429 | 请求过于频繁 |
|
|
264
|
+
|
|
265
|
+
---
|
|
266
|
+
|
|
267
|
+
## 关联端点
|
|
268
|
+
|
|
269
|
+
### 6. 获取 Bundle ID 关联的 App(关系)
|
|
270
|
+
|
|
271
|
+
```
|
|
272
|
+
GET /v1/bundleIds/{id}/relationships/app
|
|
273
|
+
```
|
|
274
|
+
|
|
275
|
+
获取 Bundle ID 与 App 的关联关系 ID。
|
|
276
|
+
|
|
277
|
+
#### 响应
|
|
278
|
+
|
|
279
|
+
| 状态码 | 说明 | 响应体 |
|
|
280
|
+
|--------|------|--------|
|
|
281
|
+
| 200 | 成功 | `BundleIdAppLinkageResponse` |
|
|
282
|
+
| 404 | 资源不存在 | `ErrorResponse` |
|
|
283
|
+
|
|
284
|
+
---
|
|
285
|
+
|
|
286
|
+
### 7. 获取 Bundle ID 关联的 App(详情)
|
|
287
|
+
|
|
288
|
+
```
|
|
289
|
+
GET /v1/bundleIds/{id}/app
|
|
290
|
+
```
|
|
291
|
+
|
|
292
|
+
获取与 Bundle ID 关联的 App 完整信息。
|
|
293
|
+
|
|
294
|
+
#### 查询参数
|
|
295
|
+
|
|
296
|
+
| 参数 | 说明 |
|
|
297
|
+
|------|------|
|
|
298
|
+
| `fields[apps]` | 选择返回的 App 字段 |
|
|
299
|
+
|
|
300
|
+
#### 响应
|
|
301
|
+
|
|
302
|
+
| 状态码 | 说明 | 响应体 |
|
|
303
|
+
|--------|------|--------|
|
|
304
|
+
| 200 | 成功 | `AppWithoutIncludesResponse` |
|
|
305
|
+
| 404 | 资源不存在 | `ErrorResponse` |
|
|
306
|
+
|
|
307
|
+
---
|
|
308
|
+
|
|
309
|
+
### 8. 获取 Bundle ID 关联的 Capabilities(关系)
|
|
310
|
+
|
|
311
|
+
```
|
|
312
|
+
GET /v1/bundleIds/{id}/relationships/bundleIdCapabilities
|
|
313
|
+
```
|
|
314
|
+
|
|
315
|
+
获取 Bundle ID 与 Capabilities 的关联关系 ID 列表。
|
|
316
|
+
|
|
317
|
+
#### 查询参数
|
|
318
|
+
|
|
319
|
+
| 参数 | 说明 |
|
|
320
|
+
|------|------|
|
|
321
|
+
| `limit` | 数量限制 |
|
|
322
|
+
|
|
323
|
+
#### 响应
|
|
324
|
+
|
|
325
|
+
| 状态码 | 说明 | 响应体 |
|
|
326
|
+
|--------|------|--------|
|
|
327
|
+
| 200 | 成功 | `BundleIdBundleIdCapabilitiesLinkagesResponse` |
|
|
328
|
+
| 404 | 资源不存在 | `ErrorResponse` |
|
|
329
|
+
|
|
330
|
+
---
|
|
331
|
+
|
|
332
|
+
### 9. 获取 Bundle ID 关联的 Capabilities(详情)
|
|
333
|
+
|
|
334
|
+
```
|
|
335
|
+
GET /v1/bundleIds/{id}/bundleIdCapabilities
|
|
336
|
+
```
|
|
337
|
+
|
|
338
|
+
获取与 Bundle ID 关联的所有 Capability 完整信息。
|
|
339
|
+
|
|
340
|
+
#### 查询参数
|
|
341
|
+
|
|
342
|
+
| 参数 | 说明 |
|
|
343
|
+
|------|------|
|
|
344
|
+
| `fields[bundleIdCapabilities]` | 选择返回的字段: `capabilityType`, `settings` |
|
|
345
|
+
| `limit` | 数量限制 |
|
|
346
|
+
|
|
347
|
+
#### 响应
|
|
348
|
+
|
|
349
|
+
| 状态码 | 说明 | 响应体 |
|
|
350
|
+
|--------|------|--------|
|
|
351
|
+
| 200 | 成功 | `BundleIdCapabilitiesWithoutIncludesResponse` |
|
|
352
|
+
| 404 | 资源不存在 | `ErrorResponse` |
|
|
353
|
+
|
|
354
|
+
---
|
|
355
|
+
|
|
356
|
+
### 10. 获取 Bundle ID 关联的 Profiles(关系)
|
|
357
|
+
|
|
358
|
+
```
|
|
359
|
+
GET /v1/bundleIds/{id}/relationships/profiles
|
|
360
|
+
```
|
|
361
|
+
|
|
362
|
+
获取 Bundle ID 与 Profiles 的关联关系 ID 列表。
|
|
363
|
+
|
|
364
|
+
#### 查询参数
|
|
365
|
+
|
|
366
|
+
| 参数 | 说明 |
|
|
367
|
+
|------|------|
|
|
368
|
+
| `limit` | 数量限制 |
|
|
369
|
+
|
|
370
|
+
#### 响应
|
|
371
|
+
|
|
372
|
+
| 状态码 | 说明 | 响应体 |
|
|
373
|
+
|--------|------|--------|
|
|
374
|
+
| 200 | 成功 | `BundleIdProfilesLinkagesResponse` |
|
|
375
|
+
| 404 | 资源不存在 | `ErrorResponse` |
|
|
376
|
+
|
|
377
|
+
---
|
|
378
|
+
|
|
379
|
+
### 11. 获取 Bundle ID 关联的 Profiles(详情)
|
|
380
|
+
|
|
381
|
+
```
|
|
382
|
+
GET /v1/bundleIds/{id}/profiles
|
|
383
|
+
```
|
|
384
|
+
|
|
385
|
+
获取与 Bundle ID 关联的所有 Profile 完整信息。
|
|
386
|
+
|
|
387
|
+
#### 查询参数
|
|
388
|
+
|
|
389
|
+
| 参数 | 说明 |
|
|
390
|
+
|------|------|
|
|
391
|
+
| `fields[profiles]` | 选择返回的字段 |
|
|
392
|
+
| `limit` | 数量限制 |
|
|
393
|
+
|
|
394
|
+
#### 响应
|
|
395
|
+
|
|
396
|
+
| 状态码 | 说明 | 响应体 |
|
|
397
|
+
|--------|------|--------|
|
|
398
|
+
| 200 | 成功 | `ProfilesWithoutIncludesResponse` |
|
|
399
|
+
| 404 | 资源不存在 | `ErrorResponse` |
|
|
400
|
+
|
|
401
|
+
---
|
|
402
|
+
|
|
403
|
+
## 端点汇总
|
|
404
|
+
|
|
405
|
+
| 方法 | 路径 | 说明 |
|
|
406
|
+
|------|------|------|
|
|
407
|
+
| `GET` | `/v1/bundleIds` | 列出所有 Bundle IDs |
|
|
408
|
+
| `POST` | `/v1/bundleIds` | 注册新 Bundle ID |
|
|
409
|
+
| `GET` | `/v1/bundleIds/{id}` | 获取单个 Bundle ID |
|
|
410
|
+
| `PATCH` | `/v1/bundleIds/{id}` | 更新 Bundle ID |
|
|
411
|
+
| `DELETE` | `/v1/bundleIds/{id}` | 删除 Bundle ID |
|
|
412
|
+
| `GET` | `/v1/bundleIds/{id}/relationships/app` | 获取 App 关系 |
|
|
413
|
+
| `GET` | `/v1/bundleIds/{id}/app` | 获取关联 App 详情 |
|
|
414
|
+
| `GET` | `/v1/bundleIds/{id}/relationships/bundleIdCapabilities` | 获取 Capabilities 关系 |
|
|
415
|
+
| `GET` | `/v1/bundleIds/{id}/bundleIdCapabilities` | 获取关联 Capabilities 详情 |
|
|
416
|
+
| `GET` | `/v1/bundleIds/{id}/relationships/profiles` | 获取 Profiles 关系 |
|
|
417
|
+
| `GET` | `/v1/bundleIds/{id}/profiles` | 获取关联 Profiles 详情 |
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
# 创建 App Store Connect API 密钥
|
|
2
|
+
|
|
3
|
+
> 官方文档: https://developer.apple.com/documentation/appstoreconnectapi/creating-api-keys-for-app-store-connect-api
|
|
4
|
+
|
|
5
|
+
## 概述
|
|
6
|
+
|
|
7
|
+
要使用 App Store Connect API,你需要先创建 API 密钥来进行身份认证。Apple 提供了两种类型的 API 密钥:**团队密钥 (Team Keys)** 和 **个人密钥 (Individual Keys)**。
|
|
8
|
+
|
|
9
|
+
## 密钥类型
|
|
10
|
+
|
|
11
|
+
### 团队密钥 (Team Keys)
|
|
12
|
+
|
|
13
|
+
- 由 **Admin(管理员)** 角色创建和管理
|
|
14
|
+
- 作用于整个开发者团队
|
|
15
|
+
- 可分配不同的角色权限
|
|
16
|
+
- 适用于 CI/CD 自动化、后端服务等场景
|
|
17
|
+
|
|
18
|
+
### 个人密钥 (Individual Keys)
|
|
19
|
+
|
|
20
|
+
- 由任何团队成员为自己创建
|
|
21
|
+
- 权限范围与创建者的角色一致
|
|
22
|
+
- 适用于个人开发工具和脚本
|
|
23
|
+
|
|
24
|
+
## 创建步骤
|
|
25
|
+
|
|
26
|
+
### 前置条件
|
|
27
|
+
|
|
28
|
+
- 拥有 Apple Developer Program 会员资格
|
|
29
|
+
- 拥有 App Store Connect 的 Admin 角色(创建团队密钥时需要)
|
|
30
|
+
- 访问 [App Store Connect](https://appstoreconnect.apple.com/)
|
|
31
|
+
|
|
32
|
+
### 创建团队 API 密钥
|
|
33
|
+
|
|
34
|
+
1. 登录 [App Store Connect](https://appstoreconnect.apple.com/)
|
|
35
|
+
2. 导航到 **用户和访问 (Users and Access)**
|
|
36
|
+
3. 选择 **集成 (Integrations)** 选项卡
|
|
37
|
+
4. 在左侧导航中选择 **App Store Connect API**
|
|
38
|
+
5. 选择 **团队密钥 (Team Keys)** 标签页
|
|
39
|
+
6. 点击 **生成 API 密钥 (Generate API Key)** 或 **+** 按钮
|
|
40
|
+
7. 输入密钥名称(用于标识用途)
|
|
41
|
+
8. 选择密钥的访问权限(角色)
|
|
42
|
+
9. 点击 **生成 (Generate)**
|
|
43
|
+
|
|
44
|
+
### 密钥角色权限
|
|
45
|
+
|
|
46
|
+
创建团队密钥时,可分配以下角色:
|
|
47
|
+
|
|
48
|
+
| 角色 | 说明 |
|
|
49
|
+
|------|------|
|
|
50
|
+
| Admin | 完全管理权限,可执行所有 API 操作 |
|
|
51
|
+
| Finance | 财务数据访问权限 |
|
|
52
|
+
| App Manager | 应用管理权限 |
|
|
53
|
+
| Developer | 开发相关权限 |
|
|
54
|
+
| Marketing | 营销相关权限 |
|
|
55
|
+
| Sales | 销售数据访问权限 |
|
|
56
|
+
| Customer Support | 客户支持权限 |
|
|
57
|
+
| Read Only | 只读访问权限 |
|
|
58
|
+
|
|
59
|
+
## 密钥属性
|
|
60
|
+
|
|
61
|
+
创建 API 密钥后,你将获得以下三个关键信息:
|
|
62
|
+
|
|
63
|
+
### 1. Issuer ID(发行者 ID)
|
|
64
|
+
|
|
65
|
+
- 格式:UUID(如 `57246542-96fe-1a63-e053-0824d011072a`)
|
|
66
|
+
- 对整个团队唯一,所有 API 密钥共享同一个 Issuer ID
|
|
67
|
+
- 在 App Store Connect 的 **密钥 (Keys)** 页面顶部可以找到
|
|
68
|
+
- 用于 JWT Token 的 `iss` 声明
|
|
69
|
+
|
|
70
|
+
### 2. Key ID(密钥 ID)
|
|
71
|
+
|
|
72
|
+
- 格式:10 位字母数字字符串(如 `2X9R4HXF34`)
|
|
73
|
+
- 每个 API 密钥唯一
|
|
74
|
+
- 在密钥列表中显示
|
|
75
|
+
- 用于 JWT Token Header 的 `kid` 字段
|
|
76
|
+
|
|
77
|
+
### 3. Private Key(私钥)
|
|
78
|
+
|
|
79
|
+
- 格式:ECDSA P-256 私钥(`.p8` 文件)
|
|
80
|
+
- 使用 ES256 算法
|
|
81
|
+
- **仅在创建时可下载一次**
|
|
82
|
+
|
|
83
|
+
## 下载私钥
|
|
84
|
+
|
|
85
|
+
> ⚠️ **重要提示**: 私钥文件 (.p8) 只能在创建后下载一次。如果丢失,需要撤销当前密钥并创建新的。
|
|
86
|
+
|
|
87
|
+
1. 创建密钥后,点击 **下载 API 密钥 (Download API Key)**
|
|
88
|
+
2. 保存 `.p8` 文件到安全位置
|
|
89
|
+
3. 文件名格式为 `AuthKey_{Key ID}.p8`(如 `AuthKey_2X9R4HXF34.p8`)
|
|
90
|
+
|
|
91
|
+
### 私钥文件格式
|
|
92
|
+
|
|
93
|
+
```
|
|
94
|
+
-----BEGIN PRIVATE KEY-----
|
|
95
|
+
MIGTAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBHkwdwIBAQQg...
|
|
96
|
+
(Base64 编码的 ECDSA P-256 私钥数据)
|
|
97
|
+
...
|
|
98
|
+
-----END PRIVATE KEY-----
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
## 安全建议
|
|
102
|
+
|
|
103
|
+
1. **妥善保管私钥** - 将私钥存储在安全的密钥管理系统中(如 Vault、AWS Secrets Manager)
|
|
104
|
+
2. **不要提交到代码仓库** - 将 `.p8` 文件添加到 `.gitignore`
|
|
105
|
+
3. **使用环境变量** - 通过环境变量传递私钥内容,而非硬编码文件路径
|
|
106
|
+
4. **最小权限原则** - 为 API 密钥分配完成任务所需的最小权限角色
|
|
107
|
+
5. **定期轮换** - 定期撤销旧密钥并创建新密钥
|
|
108
|
+
6. **限制密钥数量** - 每个团队最多可创建的活跃密钥数量有限
|
|
109
|
+
|
|
110
|
+
## 在本项目中使用
|
|
111
|
+
|
|
112
|
+
使用 `app_store_dev_api` gem 时,需要提供以上三个凭证信息:
|
|
113
|
+
|
|
114
|
+
```ruby
|
|
115
|
+
require 'app_store_dev_api'
|
|
116
|
+
|
|
117
|
+
# 方式一:直接传入私钥内容
|
|
118
|
+
client = AppStoreDevApi::Client.new(
|
|
119
|
+
issuer_id: '57246542-96fe-1a63-e053-0824d011072a',
|
|
120
|
+
key_id: '2X9R4HXF34',
|
|
121
|
+
private_key: File.read('/path/to/AuthKey_2X9R4HXF34.p8')
|
|
122
|
+
)
|
|
123
|
+
|
|
124
|
+
# 方式二:通过环境变量
|
|
125
|
+
client = AppStoreDevApi::Client.new(
|
|
126
|
+
issuer_id: ENV['APP_STORE_CONNECT_ISSUER_ID'],
|
|
127
|
+
key_id: ENV['APP_STORE_CONNECT_KEY_ID'],
|
|
128
|
+
private_key: ENV['APP_STORE_CONNECT_PRIVATE_KEY']
|
|
129
|
+
)
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
初始化后,gem 会自动处理 JWT Token 的生成和 API 请求认证。
|
|
133
|
+
|
|
134
|
+
## 相关文档
|
|
135
|
+
|
|
136
|
+
- [生成 API 请求 Token](generating_tokens.md)
|
|
137
|
+
- [撤销 API 密钥](revoking_api_keys.md)
|