应用商店屏幕截图 - “屏幕截图上传正在进行中”错误/appScreenshotSets 错误

fin*_*ork 10 ios app-store-connect

这将是一个自我回答的问题。这个问题浪费了开发人员数天甚至数周的时间。

请参阅下面的屏幕截图以了解问题所在。苹果开发者论坛不会为您提供任何答案。

问题是:

由于 App Store 的 Web 界面问题,Apple App Store 没有显示屏幕截图。当您尝试上传新的屏幕截图时,它不允许您这样做。它会抛出 STATE_ERROR 并显示“屏幕截图已存在!”消息。

即使之前上传的屏幕截图存在,App Store 也不显示屏幕截图

控制台显示来自 App Store API 的 UNEXPECTED_ERROR

AppScreenshotSets 抛出 500 错误

fin*_*ork 11

解决此问题的方法是使用 App Store Connect API 删除所有“准备提交”审核版本的 AppScreenshotSet。

应遵循的步骤:

  1. 生成 API 密钥。转到“App Store Connect”>“用户和访问”>“密钥”(选项卡)。

  2. 使用 ISSUER_ID、KEY_ID、AUTH KEY 文件(.p8 文件)通过以下 ruby​​ 脚本创建时间敏感令牌:

    require "base64"
    require "jwt"
    ISSUER_ID = "XXXX-XX-XXXXXX-XX-XXXXXXXX"
    KEY_ID = "XXXXXXXX"
    private_key = OpenSSL::PKey.read(File.read("AuthKey_XXXXXX.p8"))
    token = JWT.encode(
       {
        iss: "XXXX-XX-XXXXXX-XX-XXXXXXXX",
        exp: Time.now.to_i + 20 * 60,
        aud: "appstoreconnect-v1"
       },
       private_key,
       "ES256",
       header_fields={
         kid: "XXXXXXXXX" }
     )
    puts token
    
    Run Code Online (Sandbox Code Playgroud)
  3. 使用 ruby​​ 运行脚本

    ruby generateTokenFromCredentials.rb
    
    Run Code Online (Sandbox Code Playgroud)
  4. 在终端中导出时间敏感令牌:

    export APPSTORETOKEN=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
    
    Run Code Online (Sandbox Code Playgroud)
  5. [可选步骤] 获取有关您的应用商店应用的更多信息

    export APPSTORETOKEN=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
    
    //List user
    curl 'https://api.appstoreconnect.apple.com/v1/users'  --Header "Authorization: Bearer $APPSTORETOKEN"
    
    //List Apps
    curl 'https://api.appstoreconnect.apple.com/v1/apps'  --Header "Authorization: Bearer $APPSTORETOKEN"
    
    
    //Get App Store Versions
    curl 'https://api.appstoreconnect.apple.com/v1/apps/<APP_STORE_ID_NUMBER>/relationships/appStoreVersions'  --Header "Authorization: Bearer $APPSTORETOKEN"
    
    
    //List All App Store Version Localizations for an App Store Version
    curl 'https://api.appstoreconnect.apple.com/v1/appStoreVersions/<APP_STORE_ID_NUMBER>/appStoreVersionLocalizations'  --Header "Authorization: Bearer $APPSTORETOKEN"
    
    
    //Review submissions
    curl 'https://api.appstoreconnect.apple.com/v1/apps/<APP_STORE_ID_NUMBER>/reviewSubmissions'  --Header "Authorization: Bearer $APPSTORETOKEN"
    
    
    
    //Pre release versions 
    curl 'https://api.appstoreconnect.apple.com/v1/apps/<APP_STORE_ID_NUMBER>/preReleaseVersions'  --Header "Authorization: Bearer $APPSTORETOKEN"
    
    
    //Get App Info
    curl 'https://api.appstoreconnect.apple.com/v1/apps/<APP_STORE_ID_NUMBER>/appInfos'  --Header "Authorization: Bearer $APPSTORETOKEN"
    
    Run Code Online (Sandbox Code Playgroud)
  6. 通过转到引发 500 错误的请求,从 Google Chrome 或 Safari 控制台查找appStoreVersionLocalizations 。

    curl 'https://appstoreconnect.apple.com/iris/v1/appScreenshotSets?include=appScreenshots&filter\[appStoreVersionLocalization\]=XXXXX-XX-XX-XX-XXXXXXX' \
      -H 'sec-ch-ua: "Chromium";v="104", " Not A;Brand";v="99", "Google Chrome";v="104"' \
      -H 'x-csrf-itc: [asc-ui]' \
    
    Run Code Online (Sandbox Code Playgroud)

    从 URL 中获取 appStoreVersionLocalization

  7. 列出所有appScreenshotSet并获取 id:

    //List all relavant App Screenshots
    curl 'https://api.appstoreconnect.apple.com/v1/appStoreVersionLocalizations/21XXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX/appScreenshotSets'  --Header "Authorization: Bearer $APPSTORETOKEN"
    
    Run Code Online (Sandbox Code Playgroud)
  8. 删除其中每一个最后一个

    //Delete Screenshots Sets
    curl -X DELETE 'https://api.appstoreconnect.apple.com/v1/appScreenshotSets/<XXXXX-XXX-XXX-XX-XXXX>' --Header "Authorization: Bearer $APPSTORETOKEN"
    
    Run Code Online (Sandbox Code Playgroud)

现在您可以返回 App Store Connect Web 界面并继续上传。