Coder Social home page Coder Social logo

leanflutter / flutter_distributor Goto Github PK

View Code? Open in Web Editor NEW
717.0 717.0 90.0 1.35 MB

An all-in-one Flutter application packaging and distribution tool, providing you with a one-stop solution to meet various distribution needs.

Home Page: https://distributor.leanflutter.dev/

License: MIT License

Dart 96.29% TypeScript 0.12% JavaScript 2.10% MDX 1.23% CSS 0.03% Astro 0.23%
flutter flutter-app-packager flutter-packager

flutter_distributor's Introduction

flutter_distributor's People

Contributors

allcontributors[bot] avatar animator avatar byteszero avatar cybrox avatar dependabot[bot] avatar gargantuax avatar groovinchip avatar hiperioncn avatar krtirtho avatar laiiihz avatar lailaimaster avatar liangludev avatar lijy91 avatar tienisto avatar ueki-tomohiro avatar zacksleo avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

flutter_distributor's Issues

Null check operator used on a null value

执行操作

flutter_distributor publish --path dist/1.8.0+314/app-1.8.0+314-android.apk --targets fir
# or
flutter_distributor publish --path dist/1.8.0+314/app-1.8.0+314-android.apk --targets pgyer

错误

Unhandled exception:
Null check operator used on a null value
#0      AppPackagePublisherFir.publish (package:app_package_publisher_fir/src/app_package_publisher_fir.dart:59:60)
#1      FlutterAppPublisher.publish (package:flutter_app_publisher/src/flutter_app_publisher.dart:21:28)
#2      FlutterDistributor.publish (package:flutter_distributor/src/flutter_distributor.dart:82:54)
#3      CommandPublish.run (file:///Users/zero/project/zero/dart/flutter_distributor/packages/flutter_distributor/bin/command_publish.dart:24:23)
#4      CommandRunner.runCommand (package:args/command_runner.dart:209:27)
#5      main (file:///Users/zero/project/zero/dart/flutter_distributor/packages/flutter_distributor/bin/main.dart:18:16)
#6      _delayEntrypointInvocation.<anonymous closure> (dart:isolate-patch/isolate_patch.dart:295:32)
#7      _RawReceivePortImpl._handleMessage (dart:isolate-patch/isolate_patch.dart:192:12)

错误情况

如果我没有把以下 key 添加到环境变量中就会报错

  • 环境变量 Key:FIR_API_TOKEN、PGYER_API_TOKEN

type 'Null' is not a subtype of type 'List<dynamic>' in type cast

运行 flutter_distributor package --platform=mac --targets=dmg,zip 后异常

type 'Null' is not a subtype of type 'List<dynamic>' in type cast
#0      new DistributeOptions.fromJson (package:flutter_distributor/src/distribute_options.dart:23:48)
#1      FlutterDistributor.distributeOptions (package:flutter_distributor/src/flutter_distributor.dart:63:48)
#2      FlutterDistributor.package (package:flutter_distributor/src/flutter_distributor.dart:133:35)
#3      CommandPackage.run (file:///Users/mac/.pub-cache/hosted/pub.flutter-io.cn/flutter_distributor-0.0.9/bin/command_package.dart:39:23)
#4      CommandRunner.runCommand (package:args/command_runner.dart:209:27)
#5      main (file:///Users/mac/.pub-cache/hosted/pub.flutter-io.cn/flutter_distributor-0.0.9/bin/main.dart:28:16)
<asynchronous suspension>

/// distribute_options.yaml

output: dist/

/// flutter_distributor 0.0.9.

[Linux] Nix

Support deployment for Nix package

nixos.org

【Windows】自定义应用名、默认选中创建桌面快捷方式

是否可添加功能
make_config.yaml中是否可添加配置项
1、Windows中是否可添加appName设置
控制iss文件中的:#define MyAppName "XXXX"
2、添加是否默认选中“创建桌面快捷方式”,配置项目

控制iss文件中的 [Tasks] 节点下的
Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"
默认check值

`release` supports filter option

like

flutter_distributor release --name dev --filter-platform android

or

flutter_distributor release --name dev --filter-target apk

Support initialization command

example

flutter_distributor init

Implementation ideas

  • Determine if the user is in the flutter project directory
  • Pull the default configuration file from Github domestically (consider Chinese users)
  • Download the configuration file to the project directory

ProcessException: No such file or directory

执行

flutter_distributor publish --path /dist/1.8.0+314/app-1.8.0+314-android.apk --targets fir

Error

Unhandled exception:
ProcessException: No such file or directory
  Command: apkanalyzer manifest print /dist/1.8.0+314/app-1.8.0+314-android.apk
#0      AppPackagePublisherFir.publish (package:app_package_publisher_fir/src/app_package_publisher_fir.dart:109:7)
<asynchronous suspension>
#1      FlutterAppPublisher.publish (package:flutter_app_publisher/src/flutter_app_publisher.dart:21:12)
<asynchronous suspension>
#2      FlutterDistributor.publish (package:flutter_distributor/src/flutter_distributor.dart:82:37)

Support custom `artifact_name` and `channel` parameter in package command.

My solution is to provide custom artifact_name and add arch parameter in package command.

output: dist/
artifact_name: "{{name}}{{#channel}}-{{channel}}{{/channel}}-{{version}}}-{{platform}}.{{ext}}"
releases:
  - name: release
    jobs:
      - name: arm32
        package:
          platform: android
          target: apk
          build_args:
            target-platform: android-arm
      - name: arm64
        package:
          platform: android
          arch: arm64
          target: apk
          build_args:
            target-platform: android-arm64

Originally posted by @lijy91 in #53 (comment)

WinSparkle.lib 定位错误

“D:\WORKSPACE\Flutter\build\windows\plugins\auto_updater\auto_updater_plugin.vcxproj”(默认目标) (4) ->
[ ] (Link 目标) ->
[ ] 0 个警告
[ ] 1 个错误
[ ] 已用时间 00:00:25.45
[ ] LINK : fatal error LNK1104: 无法打开文件“D:\WORKSPACE\Flutter\windows\flutter\ephemeral.plugin_symlinks\auto_updater\windows\WinSparkle-0.7.0\x64\Release\WinSparkle.lib” [D:\WORKSPACE\Flutter\build\windows\plugins\auto_updater\auto_updater_plugin.vcxproj]

WinSparkle.lib 文件位置定位错误
报错路径:D:\WORKSPACE\Flutter\windows\flutter\ephemeral.plugin_symlinks\auto_updater\windows\WinSparkle-0.7.0\x64\Release
正确路径:D:\WORKSPACE\Flutter\windows\flutter\ephemeral.plugin_symlinks\auto_updater\windows\WinSparkle-0.7.0\Release
image

低版本使用

ERR : The current Dart SDK version is 2.13.3.
|
| Because flutter_distributor >=0.0.6 depends on pubspec_parse >=1.2.0 which requires SDK version >=2.14.0 <3.0.0, flutter_distributor >=0.0.6 is forbidden.
| So, because pub global activate depends on flutter_distributor 0.0.9, version solving failed.

低版本现在不可以用吗?

[Linux] AUR

Support deployment of flutter apps in AUR

Windows installation package configuration

Package the exe installation package, hoping to support the configuration of the installation interface language, custom shortcut names, and some other configurations

pgyer 上传成功但是显示失败

pgyer 上传成功但是显示失败,实际已上传成功

执行命令

flutter_distributor publish --path dist/1.8.0+314/app-1.8.0+314-android.apk --targets pgyer

结果

Publish to pgyer: 100%
Unhandled exception:
PublishError: 0 -
#0      AppPackagePublisherPgyer.publish (package:app_package_publisher_pgyer/src/app_package_publisher_pgyer.dart:43:7)
<asynchronous suspension>
#1      FlutterAppPublisher.publish (package:flutter_app_publisher/src/flutter_app_publisher.dart:21:12)
<asynchronous suspension>
#2      FlutterDistributor.publish (package:flutter_distributor/src/flutter_distributor.dart:82:37)
<asynchronous suspension>
#3      CommandPublish.run (file:///Users/zero/.pub-cache/hosted/pub.flutter-io.cn/flutter_distributor-0.0.6/bin/command_publish.dart:24:5)
<asynchronous suspension>
#4      CommandRunner.runCommand (package:args/command_runner.dart:209:13)
<asynchronous suspension>
#5      main (file:///Users/zero/.pub-cache/hosted/pub.flutter-io.cn/flutter_distributor-0.0.6/bin/main.dart:18:3)
<asynchronous suspension>

数据返回

  • 正常成功
{
    "code": 0,
    "message": "",
    "data": {
        "buildKey": "9ef94134e9efd5e3850146f7ffd4bdb7",
        "buildType": "2",
        "buildIsFirst": "0",
        "buildIsLastest": "1",
        "buildFileKey": "36c9c143a2204cb77601c0e43c3bb063.apk",
        "buildFileName": "app-1.8.0+314-android.apk",
        "buildFileSize": "17879795",
        "buildName": "xxx",
        "buildVersion": "1.8.0",
        "buildVersionNo": "314",
        "buildBuildVersion": "251",
        "buildIdentifier": "xxxx",
        "buildIcon": "eec62155ff03cde14f628bd472a30d26",
        "buildDescription": "",
        "buildUpdateDescription": "",
        "buildScreenshots": "",
        "buildShortcutUrl": "xgja",
        "buildCreated": "2021-12-24 12:52:56",
        "buildUpdated": "2021-12-24 12:52:56",
        "buildQRCodeURL": "https://www.pgyer.com/app/qrcodeHistory/e68ed2fb6e4224eb85ac15c8291d9de1b25103893accffa146c6f14739746027"
    }
}
  • 失败
{
    "code": 1002,
    "message": "_api_key not found"
}

int? code = response.data['code'];
if (code != null) {
String message = response.data['message'];
throw PublishError('$code - $message');
}
return PublishResult(
url: response.data!['buildShortcutUrl'],
);

  • 第 41 行应该判断 code != 0
  • 第 47 行应该取 response.data!['data']['buildShortcutUrl'] ,并且应该拼接:http://www.pgyer.com/

url 取 buildShortcutUrl 还是 buildKey

  • buildKey 是指当前 build 的版本,buildShortcutUrl 是整个引用,大多情况下是相等的,但是多人同时打包情况,就会不同
  • 如果 buildKey 是最新的版本会自动重定向到 buildShortcutUrl
  • 所以这里应该取 buildKey 拼接 'http://www.pgyer.com/$buildKey'

参考文档

打包ipa出错

打包ipa出错

不知道为什么打包ipa一直都是报这个错

版本

flutter_distributor: ^0.1.4

配置

......省略
      - name: release-dev-ios
        package:
          platform: ios
          target: ipa
          build_args:
            target: lib/main.dart
            export-options-plist: ios/ExportOptions.plist
        publish_to: pgyer

打包日志(xxx为隐藏信息)

Packaging xxx 1.0.0+1 as ipa:
Building...
Cleaning Xcode workspace...
8.0s
Deleting build...
742ms
Deleting .dart_tool...
275ms
Deleting .packages...                                                0ms

Deleting Generated.xcconfig...
0ms
Deleting flutter_export_environment.sh...                            0ms
Deleting Flutter.podspec...
0ms
Deleting .flutter-plugins-dependencies...
0ms
Deleting .flutter-plugins...
0ms
Running "flutter pub get" in xxx...
4.4s
Archiving xxx...
Automatically signing iOS for device deployment using specified development team in Xcode project: xxx
Running pod install...
12.1s
Running Xcode build...

Xcode archive done.                                         526.4s
Built /Users/xxx/build/ios/archive/Runner.xcarchive.

💪 Building with sound null safety 💪
Building IPA...
16.0s
Encountered error while building IPA:
BuildError
#0      AppBuilder.build (package:flutter_app_builder/src/app_builder.dart:52:7)
<asynchronous suspension>
#1      FlutterAppBuilder.build (package:flutter_app_builder/src/flutter_app_builder.dart:42:12)
<asynchronous suspension>
#2      FlutterDistributor.package (package:flutter_distributor/src/flutter_distributor.dart:146:25)
<asynchronous suspension>
#3      FlutterDistributor.release (package:flutter_distributor/src/flutter_distributor.dart:300:43)
<asynchronous suspension>
#4      CommandRelease.run (file:///xxx/.pub-cache/hosted/pub.flutter-io.cn/flutter_distributor-0.1.4/bin/command_release.dart:33:5)
<asynchronous suspension>
#5      CommandRunner.runCommand (package:args/command_runner.dart:209:13)
<asynchronous suspension>
#6      main (file:///xxx/.pub-cache/hosted/pub.flutter-io.cn/flutter_distributor-0.1.4/bin/main.dart:38:3)
<asynchronous suspension>

Unhandled exception:
Bad state: No element
#0      List.first (dart:core-patch/growable_array.dart:339:5)
#1      FlutterDistributor.release (package:flutter_distributor/src/flutter_distributor.dart:309:50)
<asynchronous suspension>
#2      CommandRelease.run (file:///xxx/.pub-cache/hosted/pub.flutter-io.cn/flutter_distributor-0.1.4/bin/command_release.dart:33:5)
<asynchronous suspension>
#3      CommandRunner.runCommand (package:args/command_runner.dart:209:13)
<asynchronous suspension>
#4      main (file:///xxx/.pub-cache/hosted/pub.flutter-io.cn/flutter_distributor-0.1.4/bin/main.dart:38:3)
<asynchronous suspension>

IOS打包出来的IPA文件是上个版本的

修改了版本号(1.0.7 -> 1.0.8)以及完善了一些APP的功能,然后调用 flutter_distributor 打包上传到蒲公英,发现 IOS 的 IPA 包版本竟然是 1.0.7,功能也是 1.0.7 的,Android又没问题。用手动的方式调用flutter build ios 然后xcode打包 ipa 出来的版本则是最新的

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.