Caveat: Crafting this answer to provide useful context in case this thread reaches relevant Apple internal engineers/stakeholders.
My team is encountering this issue consistently across multiple AppStoreConnect Apps / App Versions / Build Versions when attempting to Add External Testers / Add a build to an External Testing Group in TestFlight. Potentially unrelated but relevant: after successfully adding Internal Testers to the Build, accepting the invitation email, and receiving the Install App prompt within the TestFlight App we're unable to download it. The message we see in TF is "Could not install . The requested app is not available or doesn't exist"
Other context that might be helpful:
We used expo/eas to build and upload the binary to ASC.
Decidedly grasping at straws with the below. But trying to better understand the problem/ apple's internal representation of the app store submission workflow to be useful as I wait for multiple support cases to get back to me. My thinking is that the term beta contract most likely implies legal / financial relevancy, (a contract with beta testers in the case where they're compensated for their testing?)
Poking around ASC with network tab open, you can infer/explore a basic layout of the api backing ASC web client. Hitting https://appstoreconnect.apple.com/iris/v1/apps/ you can see your top level App Resource with related versions, builds, metadata etc.
GET https://appstoreconnect.apple.com/iris/v1/apps/<apple-id>
{
"data" : {
"type" : "apps",
"id" : "<apple-id>",
"attributes" : {
...
},
"relationships" : {
"appEncryptionDeclarations" : { "links" : {...} },
"ciProduct" : { "links" : {...} },
"betaTesters" : { "links" : {...} },
"betaGroups" : { "links" : {...} },
"appStoreVersions" : { "links" : {...} },
"appGrnSupportingDocument" : { "links" : {...} },
"iosAppToMacAppStoreAdvisoryData" : { "links" : {...} },
"iosAppToMacAppStoreOptInSetting" : { "links" : {...} },
"preReleaseVersions" : { "links" : {...} },
"betaAppLocalizations" : { "links" : {...} },
"builds" : { "links" : {...} },
"betaLicenseAgreement" : { "links" : {...} },
"betaAppReviewDetail" : { "links" : {...} },
"appStoreVersionMetrics" : { "links" : {...} },
"betaReviewMetrics" : { "links" : {...} },
"betaAppTesterDetail" : { "links" : {...} },
"provider" : { "links" : {...} },
"appInfos" : { "links" : {...} },
"appClips" : { "links" : {...} },
"appBundles" : { "links" : {...} },
"appPricePoints" : { "links" : {...} },
"pricePoints" : { "links" : {...} },
"appTransferRequest" : { "links" : {...} },
"customAppOrganizations" : { "links" : {...} },
"customAppUsers" : { "links" : {...} },
"endUserLicenseAgreement" : { "links" : {...} },
"preOrder" : { "links" : {...} },
"prices" : { "links" : {...} },
"appPriceSchedule" : { "links" : {...} },
"availableTerritories" : { "links" : {...} },
"supportedTerritories" : { "links" : {...} },
"appTaxCategory" : { "links" : {...} },
"inAppPurchases" : { "links" : {...} },
"subscriptionGroups" : { "links" : {...} },
"gameCenterEnabledVersions" : { "links" : {...} },
"gameCenterAchievements" : { "links" : {...} },
"gameCenterLeaderboards" : { "links" : {...} },
"gameCenterLeaderboardSets" : { "links" : {...} },
"perfPowerMetrics" : { "links" : {...} },
"promoArtRequests" : { "links" : {...} },
"dataUsages" : { "links" : {...} },
"dataUsagePublishState" : { "links" : {...} },
"appCustomProductPages" : { "links" : {...} },
"inAppPurchasesV2" : { "links" : {...} },
"promotedPurchases" : { "links" : {...} },
"appEvents" : { "links" : {...} },
"appPublicationPermit" : { "links" : {...} },
"reviewSubmissions" : { "links" : {...} },
"appSharedSecrets" : { "links" : {...} },
"subscriptionGracePeriod" : { "links" : {...} },
"buildDeliveries" : { "links" : {...} },
"resolutionCenterThreads" : { "links" : {...} }
}
}
...
}
My goal was to find the word "contract" somewhere in these network responses. Wasn't able to find any - but did find that trying to query an app's appPricePoints 500s with a pretty standard 500 response. The api 500s both before and after setting price point in Pricing and Availability UI:
GET https://appstoreconnect.apple.com/iris/v1/apps/<apple-id>/relationships/appPricePoints
=>
{
"errors": [{
"status": "500",
"code": "UNEXPECTED_ERROR",
"title": "An unexpected error occurred.",
"detail": "An unexpected error occurred on the server side. If this issue continues, contact us at https://developer.apple.com/contact/."
}]
}
On a related note, can anyone with historical knowledge of the testflight / appstore submission flow confirm or deny the existence of a "Beta Contract" in AppStoreConnect / ITunes Connect previously?