fastlane / fastlane

🚀 The easiest way to automate building and releasing your iOS and Android apps
https://fastlane.tools
MIT License
39.56k stars 5.71k forks source link

You must provide a value for the attribute 'whatsNew' with this request #20652

Closed MuhammedRefaat closed 2 years ago

MuhammedRefaat commented 2 years ago

Discussed in https://github.com/fastlane/fastlane/discussions/20651

Originally posted by **MuhammedRefaat** September 13, 2022 I'm trying to submitting my TestFlight app version for review, I followed the docs to do that using 'deliver', but when running the pipeline and executing the lane I'm getting the following error: > appStoreVersions with id {#id} is not in valid state. - This resource cannot be reviewed, please check associated errors to see why. > The provided entity is missing a required attribute - You must provide a value for the attribute 'whatsNew' with this request Despite I did follow all the possible ways mentioned in the docs to provide release notes or what is called `what's new` in AppStore, like: ``` platform :ios do lane :submitForReview do deliver( submit_for_review: true, automatic_release: false, app_version: @versionName, build_number: @versionCode, force: true, skip_metadata: true, skip_screenshots: true, skip_binary_upload: true, precheck_include_in_app_purchases: false, languages: (['en-US', 'ar-SA']), release_notes: ({ 'default' => "Bug fixes & performance enhancements", 'en-US' => "Bug fixes & performance enhancements", 'ar-SA' => "إصلاحات وتحسينات عامة" }), submission_information: { export_compliance_encryption_updated: false, export_compliance_uses_encryption: false, content_rights_contains_third_party_content: false, add_id_info_uses_idfa: false, add_id_info_serves_ads: false } ) end end ``` AND: fastlane_release_notes But still after all of that getting that error. The full log part contains the issue: ``` [19:25:15]: Checking app for precheck rule violations [19:25:32]: ✅ Passed: No negative  sentiment [19:25:32]: ✅ Passed: No placeholder text [19:25:32]: ✅ Passed: No mentioning  competitors [19:25:32]: ✅ Passed: No future functionality promises [19:25:32]: ✅ Passed: No words indicating test content [19:25:32]: ✅ Passed: No curse words [19:25:32]: ✅ Passed: No words indicating your IAP is free [19:25:32]: 😵 Failed: Incorrect, or missing copyright date-> using a copyright date that is any different from this current year, or missing a date [19:25:35]: ✅ Passed: No broken urls +-----------+----------------+ | Potential problems | +-----------+----------------+ | Field | Failure reason | +-----------+----------------+ | copyright | missing: 2022 | +-----------+----------------+ [19:25:35]: precheck 👮‍♀️ 👮 found one or more potential metadata problems, but this won't prevent fastlane from completing 👍 [19:25:36]: Selecting existing build-number: 477 [19:25:37]: Selecting build 10.3.3 (477)... [19:25:39]: Successfully selected build [19:25:40]: Successfully updated IDFA declarations on App Store Connect [19:25:42]: Successfully updated contents rights declaration on App Store Connect +------------------+---------------------+ | Lane Context | +------------------+---------------------+ | DEFAULT_PLATFORM | ios | | PLATFORM_NAME | ios | | LANE_NAME | ios submitForReview | +------------------+---------------------+ [19:25:49]: appStoreVersions with id '0b3d90ab-436f-4b18-a0bb-d05b0c320532' is not in valid state. - This resource cannot be reviewed, please check associated errors to see why. The provided entity is missing a required attribute - You must provide a value for the attribute 'whatsNew' with this request +------+----------------------------------+-------------+ | fastlane summary | +------+----------------------------------+-------------+ | Step | Action | Time (in s) | +------+----------------------------------+-------------+ | 1 | default_platform | 0 | | 2 | Switch to ios getAppVersion lane | 0 | | 3 | flutter_version | 0 | | 4 | flutter_version | 0 | | 💥 | deliver | 41 | +------+----------------------------------+-------------+ [19:25:49]: fastlane finished with errors ```

Fastlane env output:

🚫 fastlane environment 🚫 ### Stack | Key | Value | | --------------------------- | ------------------------------------------------------- | | OS | 11.5.2 | | Ruby | 3.1.2 | | Bundler? | false | | Git | git version 2.33.0 | | Installation Source | /usr/local/Cellar/fastlane/2.209.1/libexec/bin/fastlane | | Host | macOS 11.5.2 (20G95) | | Ruby Lib Dir | /usr/local/Cellar/ruby/3.1.2_1/lib | | OpenSSL Version | OpenSSL 1.1.1q 5 Jul 2022 | | Is contained | false | | Is homebrew | true | | Is installed via Fabric.app | false | | Xcode Path | ~/Downloads/Xcode 2.app/Contents/Developer/ | | Xcode Version | 13.1 | | Swift Version | 5.5.1 | ### System Locale | Error | | --------------------------- | | No Locale with UTF8 found 🚫 | ### fastlane files:
`./fastlane/Fastfile` ```ruby default_platform(:ios) . . . ```
`./fastlane/Appfile` ```ruby # For more information about the Appfile, see: # https://docs.fastlane.tools/advanced/#appfile ```
### fastlane gems | Gem | Version | Update-Status | | -------- | ------- | ------------- | | fastlane | 2.209.1 | ✅ Up-To-Date | ### Loaded fastlane plugins: | Plugin | Version | Update-Status | | ------------------------------- | ------- | ------------- | | fastlane-plugin-flutter_version | 1.1.15 | ✅ Up-To-Date |
Loaded gems | Gem | Version | | ------------------------------- | ------------ | | error_highlight | 0.3.0 | | did_you_mean | 1.6.1 | | atomos | 0.1.3 | | rexml | 3.2.5 | | CFPropertyList | 3.0.5 | | claide | 1.1.0 | | colored2 | 3.1.2 | | nanaimo | 0.3.0 | | xcodeproj | 1.22.0 | | rouge | 2.0.7 | | xcpretty | 0.3.0 | | terminal-notifier | 2.0.0 | | unicode-display_width | 1.8.0 | | terminal-table | 1.8.0 | | plist | 3.6.0 | | public_suffix | 5.0.0 | | addressable | 2.8.1 | | multipart-post | 2.0.0 | | word_wrap | 1.0.0 | | optparse | 0.1.1 | | tty-screen | 0.8.1 | | tty-cursor | 0.7.1 | | tty-spinner | 0.9.3 | | artifactory | 3.0.15 | | babosa | 1.0.4 | | colored | 1.2 | | highline | 2.0.3 | | commander | 4.6.0 | | excon | 0.92.4 | | faraday-em_http | 1.0.0 | | faraday-em_synchrony | 1.0.0 | | faraday-excon | 1.1.0 | | faraday-httpclient | 1.0.1 | | faraday-multipart | 1.0.4 | | faraday-net_http | 1.0.1 | | faraday-net_http_persistent | 1.2.0 | | faraday-patron | 1.0.0 | | faraday-rack | 1.0.0 | | faraday-retry | 1.0.3 | | ruby2_keywords | 0.0.5 | | faraday | 1.10.1 | | unf_ext | 0.0.8.2 | | unf | 0.1.4 | | domain_name | 0.5.20190701 | | http-cookie | 1.0.5 | | faraday-cookie_jar | 0.0.7 | | faraday_middleware | 1.2.0 | | fastimage | 2.2.6 | | gh_inspector | 1.1.3 | | json | 2.6.1 | | mini_magick | 4.11.0 | | naturally | 2.2.1 | | rubyzip | 2.3.2 | | security | 0.1.3 | | xcpretty-travis-formatter | 1.0.1 | | dotenv | 2.8.1 | | bundler | 2.3.11 | | simctl | 1.6.8 | | jwt | 2.4.1 | | uber | 0.1.0 | | declarative | 0.0.20 | | trailblazer-option | 0.1.2 | | representable | 3.2.0 | | retriable | 3.1.2 | | mini_mime | 1.1.2 | | memoist | 0.16.2 | | multi_json | 1.15.0 | | os | 1.1.4 | | signet | 0.17.0 | | googleauth | 1.2.0 | | httpclient | 2.8.3 | | webrick | 1.7.0 | | google-apis-core | 0.7.0 | | google-apis-playcustomapp_v1 | 0.10.0 | | google-apis-androidpublisher_v3 | 0.25.0 | | google-cloud-env | 1.6.0 | | google-cloud-errors | 1.2.0 | | google-cloud-core | 1.6.0 | | google-apis-iamcredentials_v1 | 0.13.0 | | google-apis-storage_v1 | 0.17.0 | | rake | 13.0.6 | | digest-crc | 0.6.4 | | google-cloud-storage | 1.38.0 | | emoji_regex | 3.2.3 | | jmespath | 1.6.1 | | aws-partitions | 1.620.0 | | aws-eventstream | 1.2.0 | | aws-sigv4 | 1.5.1 | | aws-sdk-core | 3.132.0 | | aws-sdk-kms | 1.58.0 | | aws-sdk-s3 | 1.114.0 | | set | 1.0.2 | | forwardable | 1.3.2 | | logger | 1.5.0 | | pathname | 0.2.0 | | shellwords | 0.1.0 | | cgi | 0.3.1 | | date | 3.2.2 | | timeout | 0.2.0 | | stringio | 3.0.1 | | securerandom | 0.1.1 | | uri | 0.11.0 | | openssl | 3.0.0 | | digest | 3.1.0 | | io-nonblock | 0.1.0 | | ipaddr | 1.2.4 | | io-wait | 0.2.1 | | zlib | 2.1.1 | | resolv | 0.2.1 | | time | 0.2.0 | | open-uri | 0.2.0 | | mutex_m | 0.1.1 | | net-protocol | 0.1.2 | | net-http | 0.2.0 | | ostruct | 0.5.2 | | english | 0.7.1 | | erb | 2.2.3 | | strscan | 3.0.1 | | abbrev | 0.1.0 | | io-console | 0.5.11 | | tempfile | 0.1.2 | | delegate | 0.2.0 | | fileutils | 1.6.0 | | tmpdir | 0.1.2 | | base64 | 0.1.1 | | singleton | 0.1.1 | | open3 | 0.1.1 | | nkf | 0.1.1 | | prettyprint | 0.1.1 | | pp | 0.3.0 | | find | 0.1.1 | | yaml | 0.2.0 | | psych | 4.0.3 | | fastlane-plugin-flutter_version | 1.1.15 |
*generated on:* **2022-09-14**
fastlane-bot commented 2 years ago

It seems like you have not included the output of fastlane env To make it easier for us help you resolve this issue, please update the issue to include the output of fastlane env :+1:

MuhammedRefaat commented 2 years ago

Sooooooooooo, solution is, skipping metadata causes the release note updates to skip, very weird and I didn't see that mentioned anywhere, what's new is related to every single release, but metadata atts like app description, tags, and supportURL are generic and may not be changed during the whole app life cycle. Anyway, the solution is to first set skip_metadata to false in deliver lane: skip_metadata: false

then to make sure to provide all the required metadata fields or files with the corresponding values so that the app can be submitted successfully:

metadata_provided
iamszabo commented 1 year ago

I've also got it working without any metadata folders. As we wanted to manage the content through AppStore, storing the metadata in the repository was not optimal. It seems that if the metadata folder is empty, it will only update the parameters that are set in deliver(). In the release notes, provide all supported languages:

deliver(
  submit_for_review: true,
  app_identifier: "com.x",
  app_version: "1",
  build_number: "1",
  automatic_release: false,
  phased_release: true,
  skip_metadata: false,
  skip_screenshots: true,
  skip_binary_upload: true,
  precheck_include_in_app_purchases: false,
  release_notes: {
    'en-GB' => "Fixes bugs"
  },
  force: true
)
EthanSK commented 5 months ago

if you don't wanna figure out how to download all the metadata first just to set release notes, you can use set_changelog

    set_changelog(
        app_identifier: app_identifier,
        api_key_path: api_key_path,
        version: latest_testflight_version,
    )