Flutter 如何在发布模式下使用颤振构建配置忽略空检查

Flutter 如何在发布模式下使用颤振构建配置忽略空检查,flutter,Flutter,现在我在发布模式下编译项目,告诉我一些包不支持空检查 This will generate a JSON format file containing all messages that need to be translated. ../../.pub-cache/hosted/pub.flutter-io.cn/video_player_platform_interface-2.2.0/lib/messages.dart:4:1: Error: A library c

现在我在发布模式下编译项目,告诉我一些包不支持空检查

This will generate a JSON format file containing all messages that
    need to be translated.
    ../../.pub-cache/hosted/pub.flutter-io.cn/video_player_platform_interface-2.2.0/lib/messages.dart:4:1: Error: A
    library can't opt out of null safety by default, when using sound null safety.
    // @dart = 2.8
    ^^^^^^^^^^^^^^
    ../../.pub-cache/hosted/pub.flutter-io.cn/wakelock_platform_interface-0.1.0+1/lib/messages.dart:4:1: Error: A
    library can't opt out of null safety by default, when using sound null safety.
    // @dart = 2.8
    ^^^^^^^^^^^^^^
    Error: Cannot run with sound null safety, because the following dependencies
    don't support null safety:

     - package:shared_preferences
     - package:timeago
     - package:hive
     - package:hive_flutter
     - package:state_notifier
     - package:fish_redux
     - package:flutter_hooks
     - package:shared_preferences_linux
     - package:shared_preferences_platform_interface
     - package:shared_preferences_windows
     - package:crypto
     - package:path_provider
     - package:path_provider_linux
     - package:path_provider_windows
     - package:path_provider_platform_interface
     - package:xdg_directories
     - package:convert
     - package:plugin_platform_interface
     - package:pull_to_refresh
     - package:flutter_icons
     - package:animations
     - package:flutter_slidable
     - package:http
     - package:fluttertoast
     - package:share
     - package:flutter_secure_storage
     - package:logger
     - package:dio
     - package:intl_phone_number_input
     - package:url_launcher
     - package:flutter_html
     - package:mime
     - package:http_parser
     - package:url_launcher_platform_interface
     - package:webview_flutter
     - package:uni_links
     - package:equatable
     - package:libphonenumber
     - package:csslib
     - package:html
     - package:flutter_layout_grid
     - package:chewie
     - package:chewie_audio
     - package:video_player
     - package:shimmer
     - package:video_player_platform_interface
     - package:quiver
     - package:wakelock
     - package:wakelock_platform_interface

    For solutions, see https://dart.dev/go/unsound-null-safety

    Command PhaseScriptExecution failed with a nonzero exit code
    note: Using new build system
    note: Building targets in parallel
    note: Planning build
    note: Constructing build description
在fastlane中构建应用程序时,如何在Flatter的发布模式中忽略空检?我已经知道在本地构建时添加参数,如下所示:

~/apps/flutter/bin/flutter build ios --release --no-sound-null-safety

如何在xcode构建发布模式中添加默认的构建参数
--无声音的空安全性

目前仍在调整包的空安全性,因此在此之前,您必须在构建时通过更改main.dart-like来选择退出空安全性

// @dart=2.9
import 'src/my_app.dart';

main() {
  //...
}
/@dart=2.9
应该可以做到这一点。如果没有,请尝试在pubspec.yaml中更改环境版本,如

environment:
  sdk: ">=2.7.0 <3.0.0"
环境:

sdk:“>=2.7.0目前软件包仍在针对空安全性进行调整,因此在此之前,您必须通过更改main.dart-like来选择退出空安全性

// @dart=2.9
import 'src/my_app.dart';

main() {
  //...
}
/@dart=2.9
应该可以做到这一点。如果不行,请尝试在pubspec.yaml中更改环境版本

environment:
  sdk: ">=2.7.0 <3.0.0"
环境:

sdk:“>=2.7.0我在GitHub操作工作流文件中找到添加步骤(不需要在Fastlane中添加):

将修复此问题(因为升级到Flatter 2.0.1)。这是完整的工作流文件:

name: Cruise-CI

on:
  push:
    branches: [ main ]

jobs:
  build:
    #
    # more macOS version:
    # https://github.com/actions/virtual-environments/blob/main/images/macos/macos-10.15-Readme.md
    #
    runs-on: macos-10.15
    steps:
      - uses: actions/checkout@v2
      - uses: actions/setup-java@v1
        with:
          java-version: '12.x'
      - uses: subosito/flutter-action@v1
        with:
          flutter-version: '2.0.1'
      #
      # more xcode version path:
      # https://github.com/actions/virtual-environments/blob/main/images/macos/macos-10.15-Readme.md
      #
      - name: Select Xcode version
        run: sudo xcode-select -s '/Applications/Xcode_12.4.app/Contents/Developer'
      - name: Bundle install
        run: |
          cd ./ios
          brew install gpg
          curl -sSL https://rvm.io/mpapis.asc | gpg --import -
          curl -sSL https://rvm.io/pkuczynski.asc | gpg --import -
          echo 409B6B1796C275462A1703113804BB82D39DC0E3:6: | gpg --import-ownertrust
          echo 7D2BAF1CF37B13E2069D6956105BD0E739499BDB:6: | gpg --import-ownertrust
          curl -sSL https://get.rvm.io | bash -s -- --ignore-dotfiles
          source $HOME/.rvm/scripts/rvm
          source ~/.bash_profile
          rvm --version
          rvm install 2.7.2
          rvm use --default 2.7.2
          gem install cocoapods -v 1.10.0
          gem install fastlane -v 2.177.0
          bundle install
      - name: Install tools
        run: |
          flutter precache
          flutter pub get
          cd ./ios
          pod install
      #- run: flutter pub get
      #- run: flutter build apk
      - run: flutter build ios --release --no-codesign --no-sound-null-safety
      - name: Setup SSH Keys and known_hosts for fastlane match
        run: |
          SSH_PATH="$HOME/.ssh"
          mkdir -p "$SSH_PATH"
          touch "$SSH_PATH/known_hosts"
          echo "$PRIVATE_KEY" > "$SSH_PATH/id_rsa"
          chmod 700 "$SSH_PATH"
          ssh-keyscan github.com >> ~/.ssh/known_hosts
          chmod 600 "$SSH_PATH/known_hosts"
          chmod 600 "$SSH_PATH/id_rsa"
          eval $(ssh-agent)
          ssh-add "$SSH_PATH/id_rsa"
        env:
          PRIVATE_KEY: ${{ secrets.SSH_PRIVATE_KEY }}
      - name: Deploy to TestFlight/PGY
        run: |
          cd ./ios
          bundle exec fastlane beta
        env:
          FLUTTER_ROOT: ${{ secrets.FLUTTER_ROOT }}
          APPLE_ID: ${{ secrets.APPLE_ID }}
          GIT_URL: ${{ secrets.GIT_URL }}
          PGY_USER_KEY: ${{ secrets.PGY_USER_KEY }}
          PGY_API_KEY: ${{ secrets.PGY_API_KEY }}
          TEAM_ID: ${{ secrets.TEAM_ID }}
          ITC_TEAM_ID: ${{ secrets.ITC_TEAM_ID }}
          FASTLANE_USER: ${{ secrets.FASTLANE_USER }}
          FASTLANE_PASSWORD: ${{ secrets.FASTLANE_PASSWORD }}
          FASTLANE_APPLE_APPLICATION_SPECIFIC_PASSWORD: ${{ secrets.FASTLANE_APPLE_APPLICATION_SPECIFIC_PASSWORD }}
          FASTLANE_SESSION: ${{ secrets.FASTLANE_SESSION }}
          MATCH_PASSWORD: ${{ secrets.MATCH_PASSWORD }}
          MATCH_KEYCHAIN_NAME: ${{ secrets.MATCH_KEYCHAIN_NAME }}
          MATCH_KEYCHAIN_PASSWORD: ${{ secrets.MATCH_KEYCHAIN_PASSWORD }}
          DELIVER_ITMSTRANSPORTER_ADDITIONAL_UPLOAD_PARAMETERS: ${{ secrets.DELIVER_ITMSTRANSPORTER_ADDITIONAL_UPLOAD_PARAMETERS }}

我在GitHub操作工作流文件中找到添加步骤(不需要在Fastlane中添加):

将修复此问题(因为升级到Flatter 2.0.1)。这是完整的工作流文件:

name: Cruise-CI

on:
  push:
    branches: [ main ]

jobs:
  build:
    #
    # more macOS version:
    # https://github.com/actions/virtual-environments/blob/main/images/macos/macos-10.15-Readme.md
    #
    runs-on: macos-10.15
    steps:
      - uses: actions/checkout@v2
      - uses: actions/setup-java@v1
        with:
          java-version: '12.x'
      - uses: subosito/flutter-action@v1
        with:
          flutter-version: '2.0.1'
      #
      # more xcode version path:
      # https://github.com/actions/virtual-environments/blob/main/images/macos/macos-10.15-Readme.md
      #
      - name: Select Xcode version
        run: sudo xcode-select -s '/Applications/Xcode_12.4.app/Contents/Developer'
      - name: Bundle install
        run: |
          cd ./ios
          brew install gpg
          curl -sSL https://rvm.io/mpapis.asc | gpg --import -
          curl -sSL https://rvm.io/pkuczynski.asc | gpg --import -
          echo 409B6B1796C275462A1703113804BB82D39DC0E3:6: | gpg --import-ownertrust
          echo 7D2BAF1CF37B13E2069D6956105BD0E739499BDB:6: | gpg --import-ownertrust
          curl -sSL https://get.rvm.io | bash -s -- --ignore-dotfiles
          source $HOME/.rvm/scripts/rvm
          source ~/.bash_profile
          rvm --version
          rvm install 2.7.2
          rvm use --default 2.7.2
          gem install cocoapods -v 1.10.0
          gem install fastlane -v 2.177.0
          bundle install
      - name: Install tools
        run: |
          flutter precache
          flutter pub get
          cd ./ios
          pod install
      #- run: flutter pub get
      #- run: flutter build apk
      - run: flutter build ios --release --no-codesign --no-sound-null-safety
      - name: Setup SSH Keys and known_hosts for fastlane match
        run: |
          SSH_PATH="$HOME/.ssh"
          mkdir -p "$SSH_PATH"
          touch "$SSH_PATH/known_hosts"
          echo "$PRIVATE_KEY" > "$SSH_PATH/id_rsa"
          chmod 700 "$SSH_PATH"
          ssh-keyscan github.com >> ~/.ssh/known_hosts
          chmod 600 "$SSH_PATH/known_hosts"
          chmod 600 "$SSH_PATH/id_rsa"
          eval $(ssh-agent)
          ssh-add "$SSH_PATH/id_rsa"
        env:
          PRIVATE_KEY: ${{ secrets.SSH_PRIVATE_KEY }}
      - name: Deploy to TestFlight/PGY
        run: |
          cd ./ios
          bundle exec fastlane beta
        env:
          FLUTTER_ROOT: ${{ secrets.FLUTTER_ROOT }}
          APPLE_ID: ${{ secrets.APPLE_ID }}
          GIT_URL: ${{ secrets.GIT_URL }}
          PGY_USER_KEY: ${{ secrets.PGY_USER_KEY }}
          PGY_API_KEY: ${{ secrets.PGY_API_KEY }}
          TEAM_ID: ${{ secrets.TEAM_ID }}
          ITC_TEAM_ID: ${{ secrets.ITC_TEAM_ID }}
          FASTLANE_USER: ${{ secrets.FASTLANE_USER }}
          FASTLANE_PASSWORD: ${{ secrets.FASTLANE_PASSWORD }}
          FASTLANE_APPLE_APPLICATION_SPECIFIC_PASSWORD: ${{ secrets.FASTLANE_APPLE_APPLICATION_SPECIFIC_PASSWORD }}
          FASTLANE_SESSION: ${{ secrets.FASTLANE_SESSION }}
          MATCH_PASSWORD: ${{ secrets.MATCH_PASSWORD }}
          MATCH_KEYCHAIN_NAME: ${{ secrets.MATCH_KEYCHAIN_NAME }}
          MATCH_KEYCHAIN_PASSWORD: ${{ secrets.MATCH_KEYCHAIN_PASSWORD }}
          DELIVER_ITMSTRANSPORTER_ADDITIONAL_UPLOAD_PARAMETERS: ${{ secrets.DELIVER_ITMSTRANSPORTER_ADDITIONAL_UPLOAD_PARAMETERS }}

我还遇到了一个问题,我需要在min SDK版本中添加不相关的语言功能,并被迫解决空安全问题,同时仍然需要将默认构建设置为不可靠的空安全,直到我无法控制的所有依赖项都被转换。至少可以说,关于这一点的文档是糟糕透顶的,而且从
pubspec.yaml
中没有简单的方法来禁用这一点是荒谬的

在浏览了一下flatter源代码之后,我发现传递
--no sound null safety
标志的方式是通过
额外的\u FRONT\u END\u OPTIONS
环境变量。您应该能够通过简单地将其添加到环境定义中来强制它。对于Linux和Windows,黑客攻击
CMakeLists.txt
在默认情况下足以将其关闭:

  COMMAND ${CMAKE_COMMAND} -E env
    # Temporarily disable null safety checks until all packages have migrated
    EXTRA_FRONT_END_OPTIONS=--no-sound-null-safety
    ${FLUTTER_TOOL_ENVIRONMENT}
    "${FLUTTER_ROOT}/packages/flutter_tools/bin/tool_backend.sh"
      ${FLUTTER_TARGET_PLATFORM} ${CMAKE_BUILD_TYPE}

我还需要这一点来让snapcraft构建工作正常,因为这里没有操作构建选项的选项。

我还遇到了一个问题,我需要在min SDK版本中添加不相关的语言功能,并被迫解决空安全问题,在我无法控制的所有依赖项被转换之前,仍然需要将构建默认为不可靠的空安全。至少可以说,关于这一点的文档是糟糕透顶的,而且从
pubspec.yaml
中没有简单的方法来禁用这一点是荒谬的

在浏览了一下flatter源代码之后,我发现传递
--no sound null safety
标志的方式是通过
额外的\u FRONT\u END\u OPTIONS
环境变量。您应该能够通过简单地将其添加到环境定义中来强制它。对于Linux和Windows,黑客攻击
CMakeLists.txt
在默认情况下足以将其关闭:

  COMMAND ${CMAKE_COMMAND} -E env
    # Temporarily disable null safety checks until all packages have migrated
    EXTRA_FRONT_END_OPTIONS=--no-sound-null-safety
    ${FLUTTER_TOOL_ENVIRONMENT}
    "${FLUTTER_ROOT}/packages/flutter_tools/bin/tool_backend.sh"
      ${FLUTTER_TARGET_PLATFORM} ${CMAKE_BUILD_TYPE}

我还需要这个来让snapcraft构建工作正常进行,因为这里没有操作构建选项的选项。

如何使fastlane添加
——当build@Siddharth AgrawalI无法降级版本时没有声音的空安全
配置,因为我将所有代码都更改为null safety@Siddharth agrawalh如何使fastlane添加
——当build@Siddharth时没有声音的空安全
配置AgrawalI无法降低版本,因为我将所有代码都更改为null safety@Siddharth Agrawal