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
|
@@ -0,0 +1,189 @@
|
|
|
1
|
+
# 生成 API 请求 Token
|
|
2
|
+
|
|
3
|
+
> 官方文档: https://developer.apple.com/documentation/appstoreconnectapi/generating-tokens-for-api-requests
|
|
4
|
+
|
|
5
|
+
## 概述
|
|
6
|
+
|
|
7
|
+
App Store Connect API 使用 **JSON Web Token (JWT)** 进行身份认证。每次 API 请求都需要在 HTTP 请求头中携带有效的 JWT Token。Token 使用 ES256(ECDSA P-256)算法签名,有效期最长 20 分钟。
|
|
8
|
+
|
|
9
|
+
## JWT Token 结构
|
|
10
|
+
|
|
11
|
+
JWT Token 由三部分组成,以 `.` 分隔:
|
|
12
|
+
|
|
13
|
+
```
|
|
14
|
+
{Header}.{Payload}.{Signature}
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
### 1. Header(头部)
|
|
18
|
+
|
|
19
|
+
```json
|
|
20
|
+
{
|
|
21
|
+
"alg": "ES256",
|
|
22
|
+
"kid": "2X9R4HXF34",
|
|
23
|
+
"typ": "JWT"
|
|
24
|
+
}
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
| 字段 | 类型 | 必填 | 说明 |
|
|
28
|
+
|------|------|------|------|
|
|
29
|
+
| `alg` | string | 是 | 签名算法,固定为 `ES256` |
|
|
30
|
+
| `kid` | string | 是 | API 密钥 ID(Key ID) |
|
|
31
|
+
| `typ` | string | 是 | Token 类型,固定为 `JWT` |
|
|
32
|
+
|
|
33
|
+
### 2. Payload(载荷)
|
|
34
|
+
|
|
35
|
+
```json
|
|
36
|
+
{
|
|
37
|
+
"iss": "57246542-96fe-1a63-e053-0824d011072a",
|
|
38
|
+
"iat": 1711416000,
|
|
39
|
+
"exp": 1711417200,
|
|
40
|
+
"aud": "appstoreconnect-v1"
|
|
41
|
+
}
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
| 字段 | 类型 | 必填 | 说明 |
|
|
45
|
+
|------|------|------|------|
|
|
46
|
+
| `iss` | string | 是 | Issuer ID - 你的团队发行者 ID |
|
|
47
|
+
| `iat` | number | 是 | Issued At - Token 签发时间(Unix 时间戳,秒) |
|
|
48
|
+
| `exp` | number | 是 | Expiration - Token 过期时间(Unix 时间戳,秒) |
|
|
49
|
+
| `aud` | string | 是 | Audience - 固定为 `appstoreconnect-v1` |
|
|
50
|
+
| `scope` | array | 否 | 权限范围(仅个人密钥需要指定) |
|
|
51
|
+
|
|
52
|
+
### 3. Signature(签名)
|
|
53
|
+
|
|
54
|
+
使用 API 私钥(`.p8` 文件)以 ES256 算法对 `{Header}.{Payload}` 进行签名。
|
|
55
|
+
|
|
56
|
+
## Token 有效期规则
|
|
57
|
+
|
|
58
|
+
- **最长有效期**: 20 分钟(1200 秒)
|
|
59
|
+
- `exp` 不得超过 `iat + 1200`
|
|
60
|
+
- 过期后的 Token 会被 API 拒绝,返回 `401 Unauthorized`
|
|
61
|
+
- 建议在 Token 过期前主动刷新
|
|
62
|
+
|
|
63
|
+
## 请求头格式
|
|
64
|
+
|
|
65
|
+
```http
|
|
66
|
+
Authorization: Bearer eyJhbGciOiJFUzI1NiIsImtpZCI6IjJYOVI0SFhGMzQiLCJ0eXAiOiJKV1QifQ.eyJpc3MiOiI1NzI0NjU0Mi05NmZlLTFhNjMtZTA1My0wODI0ZDAxMTA3MmEiLCJpYXQiOjE3MTE0MTYwMDAsImV4cCI6MTcxMTQxNzIwMCwiYXVkIjoiYXBwc3RvcmVjb25uZWN0LXYxIn0.{signature}
|
|
67
|
+
Content-Type: application/json
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
## 本项目的实现
|
|
71
|
+
|
|
72
|
+
`app_store_dev_api` gem 内置了完整的 JWT Token 生成机制,无需手动处理。
|
|
73
|
+
|
|
74
|
+
### 核心实现 (`Client::Authorization`)
|
|
75
|
+
|
|
76
|
+
```ruby
|
|
77
|
+
# lib/app_store_dev_api/client/authorization.rb
|
|
78
|
+
|
|
79
|
+
module AppStoreDevApi
|
|
80
|
+
class Client
|
|
81
|
+
class Authorization
|
|
82
|
+
AUDIENCE = 'appstoreconnect-v1'
|
|
83
|
+
ALGORITHM = 'ES256'
|
|
84
|
+
|
|
85
|
+
def initialize(options)
|
|
86
|
+
@key_id = options.fetch(:key_id)
|
|
87
|
+
@issuer_id = options.fetch(:issuer_id)
|
|
88
|
+
@private_key = OpenSSL::PKey.read(options.fetch(:private_key))
|
|
89
|
+
end
|
|
90
|
+
|
|
91
|
+
def payload
|
|
92
|
+
current_time = Time.now.to_i
|
|
93
|
+
{
|
|
94
|
+
iss: @issuer_id, # Issuer ID
|
|
95
|
+
iat: current_time, # 签发时间
|
|
96
|
+
exp: current_time + 20 * 60, # 20 分钟后过期
|
|
97
|
+
aud: AUDIENCE # appstoreconnect-v1
|
|
98
|
+
}
|
|
99
|
+
end
|
|
100
|
+
|
|
101
|
+
def header_fields
|
|
102
|
+
{
|
|
103
|
+
kid: @key_id, # API Key ID
|
|
104
|
+
typ: 'JWT'
|
|
105
|
+
}
|
|
106
|
+
end
|
|
107
|
+
|
|
108
|
+
def token
|
|
109
|
+
JWT.encode(payload, @private_key, ALGORITHM, header_fields)
|
|
110
|
+
end
|
|
111
|
+
end
|
|
112
|
+
end
|
|
113
|
+
end
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
### 请求认证流程
|
|
117
|
+
|
|
118
|
+
```ruby
|
|
119
|
+
# lib/app_store_dev_api/base.rb
|
|
120
|
+
|
|
121
|
+
def headers
|
|
122
|
+
{
|
|
123
|
+
'Authorization' => "Bearer #{@authorization.token}",
|
|
124
|
+
'Content-Type' => 'application/json'
|
|
125
|
+
}
|
|
126
|
+
end
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
每次 API 请求时,gem 会自动生成新的 JWT Token 并附加到请求头中。
|
|
130
|
+
|
|
131
|
+
## 其他语言实现参考
|
|
132
|
+
|
|
133
|
+
### Python
|
|
134
|
+
|
|
135
|
+
```python
|
|
136
|
+
import jwt
|
|
137
|
+
import time
|
|
138
|
+
|
|
139
|
+
# 读取私钥
|
|
140
|
+
with open('AuthKey_2X9R4HXF34.p8', 'r') as f:
|
|
141
|
+
private_key = f.read()
|
|
142
|
+
|
|
143
|
+
# 生成 Token
|
|
144
|
+
header = {
|
|
145
|
+
"alg": "ES256",
|
|
146
|
+
"kid": "2X9R4HXF34",
|
|
147
|
+
"typ": "JWT"
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
payload = {
|
|
151
|
+
"iss": "57246542-96fe-1a63-e053-0824d011072a",
|
|
152
|
+
"iat": int(time.time()),
|
|
153
|
+
"exp": int(time.time()) + 20 * 60,
|
|
154
|
+
"aud": "appstoreconnect-v1"
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
token = jwt.encode(payload, private_key, algorithm="ES256", headers=header)
|
|
158
|
+
```
|
|
159
|
+
|
|
160
|
+
### cURL
|
|
161
|
+
|
|
162
|
+
```bash
|
|
163
|
+
# 假设 TOKEN 变量中已有生成的 JWT Token
|
|
164
|
+
curl -H "Authorization: Bearer $TOKEN" \
|
|
165
|
+
-H "Content-Type: application/json" \
|
|
166
|
+
https://api.appstoreconnect.apple.com/v1/apps
|
|
167
|
+
```
|
|
168
|
+
|
|
169
|
+
## 常见错误
|
|
170
|
+
|
|
171
|
+
| 错误 | 原因 | 解决方案 |
|
|
172
|
+
|------|------|----------|
|
|
173
|
+
| `401 NOT_AUTHORIZED` | Token 过期或无效 | 检查 Token 是否过期,重新生成 |
|
|
174
|
+
| `401 NOT_AUTHORIZED` | 私钥不匹配 | 确认使用了正确的 `.p8` 私钥文件 |
|
|
175
|
+
| `401 NOT_AUTHORIZED` | Issuer ID 错误 | 在 App Store Connect 中核实 Issuer ID |
|
|
176
|
+
| `403 FORBIDDEN` | API 密钥权限不足 | 确认密钥角色拥有对应 API 的访问权限 |
|
|
177
|
+
| `429 RATE_LIMIT_EXCEEDED` | 请求频率过高 | 降低请求频率,实施退避策略 |
|
|
178
|
+
|
|
179
|
+
## 最佳实践
|
|
180
|
+
|
|
181
|
+
1. **Token 复用** - 在有效期内复用同一 Token,避免每次请求都生成新 Token
|
|
182
|
+
2. **提前刷新** - 在 Token 过期前 1-2 分钟主动刷新,避免请求失败
|
|
183
|
+
3. **安全存储** - 不要在日志、URL 参数或前端代码中暴露 Token
|
|
184
|
+
4. **错误处理** - 收到 `401` 响应时自动刷新 Token 并重试
|
|
185
|
+
|
|
186
|
+
## 相关文档
|
|
187
|
+
|
|
188
|
+
- [创建 API 密钥](creating_api_keys.md)
|
|
189
|
+
- [撤销 API 密钥](revoking_api_keys.md)
|