#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 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
как игнорировать нулевую проверку в режиме выпуска в flutter при сборке приложения в fastlane? Я уже знаю, что нужно добавлять параметр при сборке в локальном режиме, как это:
~/apps/flutter/bin/flutter build ios --release --no-sound-null-safety
как добавить --no-sound-null-safety
в режим выпуска сборки xcode в качестве параметра сборки по умолчанию?
Ответ №1:
Прямо сейчас пакеты все еще настраиваются на нулевую безопасность, поэтому до тех пор вам придется отказаться от нулевой безопасности во время сборки, изменив свой main.dart, например
// @dart=2.9
import 'src/my_app.dart';
main() {
//...
}
Это //@dart=2.9
должно сработать. Если нет, попробуйте изменить версию среды в pubspec.yaml, например
environment:
sdk: ">=2.7.0 <3.0.0"
Комментарии:
1. как сделать так, чтобы fastlane добавлял
--no-sound-null-safety
конфигурацию при сборке @Siddharth Agrawal2. Я не мог понизить версию, потому что весь код, который я изменил на нулевую безопасность @Siddharth Agrawal
Ответ №2:
Я также столкнулся с проблемой, когда мне нужно было обновить версию min SDK для несвязанных языковых функций, и я вынужден устранять проблемы с безопасностью null, в то же время мне все еще нужно выполнять сборки по умолчанию для обеспечения безопасности null до тех пор, пока все зависимости, над которыми я не имею контроля, не будут преобразованы. Документация по этому вопросу, мягко говоря, ужасна, и тот факт, что нет простого способа отключить это pubspec.yaml
, просто смешон.
Немного покопавшись в исходном коде Flutter, я обнаружил, что --no-sound-null-safety
передача флага осуществляется через переменную EXTRA_FRONT_END_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, работали, так как там нет возможности управлять параметрами сборки.
Ответ №3:
Я нашел в файле рабочего процесса действий GitHub добавить шаг(не нужно добавлять в Fastlane):
- run: flutter build ios --release --no-codesign --no-sound-null-safety
исправил бы это(с момента обновления до flutter 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 }}