<

Linux アプリをビルドして Snap Store にリリースする

通常の開発サイクルでは、 を使用してアプリをテストしますflutter runコマンドラインで、 または、走るデバッグIDE のオプション。デフォルトでは、 Flutter はデバッグアプリのバージョン。

準備の準備ができたら、リリースアプリのバージョン、 たとえばスナップストアに公開する、 このページが役に立ちます。

前提条件

Snap Store を構築して公開するには、 次のコンポーネント:

  • UbuntuOS、18.04 LTS (またはそれ以上)
  • スナップクラフトコマンドラインツール
  • マルチパス仮想化マネージャーまたLXDコンテナマネージャー

ビルド環境をセットアップする

次の手順に従ってビルド環境をセットアップします。

スナップクラフトをインストールする

コマンドラインで次を実行します。

$ sudo snap install snapcraft --classic

マルチパスのインストール

コマンドラインでも次のコマンドを実行します。

$ sudo snap install multipass --classic

マルチパスが正しく動作するには、CPU へのアクセスが必要です 仮想化拡張機能。拡張子が正しくない場合は、 CPU アーキテクチャでは利用可能ですが、BIOS では有効になっていません。 またはアクセスできない(たとえば、 ネストされた仮想化を持たない仮想マシン)、 マルチパスは使用できなくなります。

次のエラーが表示された場合は、LXD を使用する必要があります。

launch failed: CPU does not support KVM extensions

LXDをインストールする

LXD をインストールするには、次のコマンドを使用します。

$ sudo snap install lxd

LXD は、 スナップビルドプロセス。インストールしたら、LXD を次のようにする必要があります。 使用できるように設定されています。デフォルトの回答が適切です ほとんどのユースケースに対応します。

$ sudo lxd init
Would you like to use LXD clustering? (yes/no) [default=no]:
Do you want to configure a new storage pool? (yes/no) [default=yes]:
Name of the new storage pool [default=default]:
Name of the storage backend to use (btrfs, dir, lvm, zfs, ceph) [default=zfs]:
Create a new ZFS pool? (yes/no) [default=yes]:
Would you like to use an existing empty disk or partition? (yes/no) [default=no]:
Size in GB of the new loop device (1GB minimum) [default=5GB]:
Would you like to connect to a MAAS server? (yes/no) [default=no]:
Would you like to create a new local network bridge? (yes/no) [default=yes]:
What should the new bridge be called? [default=lxdbr0]:
What IPv4 address should be used? (CIDR subnet notation, “auto” or “none”) [default=auto]:
What IPv6 address should be used? (CIDR subnet notation, “auto” or “none”) [default=auto]:
Would you like LXD to be available over the network? (yes/no) [default=no]:
Would you like stale cached images to be updated automatically? (yes/no) [default=yes]
Would you like a YAML "lxd init" preseed to be printed? (yes/no) [default=no]:

最初の実行では、LXD はソケットに接続できない場合があります。

An error occurred when trying to communicate with the 'LXD'
provider: cannot connect to the LXD socket
('/var/snap/lxd/common/lxd/unix.socket').

これは、ユーザー名を LXD に追加する必要があることを意味します (lxd) グループなので、セッションからログアウトして、再度ログインします。

$ sudo usermod -a -G lxd <your username>

スナップクラフトの概要

snapcraftツールは指示に基づいてスナップを構築します にリストされているsnapcraft.yamlファイル。 スナップクラフトとその基本を理解するには 核となる概念については、をご覧ください。スナップドキュメントそしてそのスナップクラフトの紹介。 追加のリンクと情報は、次の場所にリストされています。 このページの一番下。

Flutter snapcraft.yaml の例

YAML ファイルを Flutter に配置します 下のプロジェクト<project root>/snap/snapcraft.yaml。 (YAML ファイルは空白に敏感であることを忘れないでください。) 例えば:

name: super-cool-app
version: 0.1.0
summary: Super Cool App
description: Super Cool App that does everything!

confinement: strict
base: core18
grade: stable

slots:
  dbus-super-cool-app: # adjust accordingly to your app name
    interface: dbus
    bus: session
    name: org.bar.super_cool_app # adjust accordingly to your app name and
    
apps:
  super-cool-app:
    command: super_cool_app
    extensions: [flutter-master] # Where "master" defines which Flutter channel to use for the build
    plugs:
    - network
    slots:
      - dbus-super-cool-app
parts:
  super-cool-app:
    source: .
    plugin: flutter
    flutter-target: lib/main.dart # The main entry-point file of the application

次のセクションでは、YAML ファイルのさまざまな部分について説明します。

メタデータ

このセクションは、snapcraft.yamlファイルの定義と アプリケーションについて説明します。スナップバージョンは、 ビルドセクションから派生(採用)されています。

name: super-cool-app
version: 0.1.0
summary: Super Cool App
description: Super Cool App that does everything!

グレード、閉じ込め、およびベース

このセクションでは、スナップの構築方法を定義します。

confinement: strict
base: core18
grade: stable
学年
スナップの品質を指定します。これは以下に関連します 公開ステップは後で行います。
監禁
スナップにアクセスするシステム リソースのレベルを指定します エンドユーザー システムに一度インストールされます。 厳密な制限により、アプリケーションのアクセスが制限されます。 特定のリソース (プラグインによって定義される)appセクション)。
ベース
スナップは自己完結型のアプリケーションとして設計されています。 したがって、独自のプライベートコアルートが必要です として知られるファイルシステムbase。のbaseキーワードで指定する 共通ライブラリの最小セットを提供するために使用されるバージョン、 そして、実行時にアプリケーションのルート ファイルシステムとしてマウントされます。

アプリ

このセクションでは、スナップ内に存在するアプリケーションを定義します。 スナップごとに 1 つ以上のアプリケーションが存在できます。この例 アプリケーションには super_cool_app が 1 つだけあります。

apps:
  super-cool-app:
    command: super_cool_app
    extensions: [flutter-master]
指図
スナップのルートを基準としたバイナリを指します。 スナップが呼び出されるときに実行されます。
拡張機能
1 つ以上の拡張子のリスト。スナップクラフト拡張機能 ライブラリのセットを公開できる再利用可能なコンポーネントです ビルド時と実行時に簡単に実行できるツール、 開発者が特別な知識を持っている必要はありません 含まれているフレームワークの。のflutter-master拡張機能が公開する GTK 3 ライブラリを Flutter スナップに追加します。これにより、 設置面積が小さくなり、システムとの統合が向上します。

flutter-master拡張機能は flutter チャネルを設定します に3c20f47e-c02f-4207-9406-4ceb4d06540​​0。を使用してアプリを構築したい場合は、devチャンネルは単に使用しますflutter-dev拡大。

プラグ
システム インターフェイス用の 1 つ以上のプラグのリスト。 これらは必要な機能を提供するために必要です スナップが厳密に制限されている場合。この flutter スナップには次のものが必要です ネットワークへのアクセス。
DBusインターフェース
のDBusインターフェーススナップの方法を提供します DBus 経由で通信します。 DBus を提供するスナップ サービスは既知の DBus 名を持つスロットを宣言します そしてどのバスを使うのか。コミュニケーションをとりたいスナップ 提供するスナップのサービスでプラグを宣言します スナップを提供します。 snap 宣言は次のとおりであることに注意してください。 スナップ ストア経由でスナップを配信するために必要です そして、このよく知られた DBus 名を主張します (単に ストアにアクセスして手動レビューをリクエストし、 査読者が検討します)。

提供スナップがインストールされると、snapd は を許可するセキュリティ ポリシーを生成します。 指定された環境で既知の DBus 名をリッスンします。 バス。システム バスが指定されている場合、snapd はまた、 「root」が所有できるようにする DBus バス ポリシーを生成する 名前と通信するユーザー サービス。非スナッププロセスは次のことを許可されます。 提供するスナップと通信します。 従来の権限チェック。その他(消費) スナップは、提供されているものとのみ通信する可能性があります。 スナップバイ スナップのインターフェースを接続します。

dbus-super-cool-app: # adjust accordingly to your app name
  interface: dbus
  bus: session
  name: dev.site.super_cool_app 

部品

このセクションでは、以下に必要なソースを定義します。 スナップを組み立てます。

パーツはダウンロードして、プラグインを使用して自動的に構築できます。 拡張機能と同様に、snapcraft ではさまざまなプラグインを使用できます (Python、C、Java、Ruby など) 構築プロセス。 Snapcraft には特別なプラグインもいくつかあります。

なしプラグイン
アクションは実行されず、実際のビルドプロセスは 手動オーバーライドを使用して処理されます。
はためくプラグイン
必要な Flutter SDK ツールを提供するので、 手動でダウンロードしてセットアップすることなく使用できます ビルドツール。
parts:
  super-cool-app:
    source: .
    plugin: flutter
    flutter-target: lib/main.dart # The main entry-point file of the application

デスクトップファイルとアイコン

デスクトップエントリファイルはアプリケーションを追加するために使用されます デスクトップメニューへ。これらのファイルは名前と アプリケーションのアイコン、アプリケーションが属するカテゴリ、 関連する検索キーワードなど。これらのファイルには、 拡張子 .desktop を付けて、XDG デスクトップ エントリに従ってください。 仕様バージョン 1.1。

Flutter super-cool-app.desktop の例

Flutter プロジェクトに .desktop ファイルを配置します。 下<project root>/snap/gui/super-cool-app.desktop

知らせ: アイコンと .desktop ファイル名は yaml ファイル内のアプリ名と同じです。

例えば:

[Desktop Entry]
Name=Super Cool App
Comment=Super Cool App that does everything
Exec=super-cool-app 
Icon=${SNAP}/meta/gui/super-cool-app.png # replace name to your app name
Terminal=false
Type=Application
Categories=Education; #adjust accordingly your snap category

拡張子が .png のアイコンを Flutter に配置します 下のプロジェクト<project root>/snap/gui/super-cool-app.png

スナップを構築する

一度68dd655c-d8a6-447e-9b63-81db51513bd​​2ファイルが完成しました、 走るsnapcraftルートディレクトリから次のように プロジェクトの。

マルチパス VM バックエンドを使用するには:

$ snapcraft

LXD コンテナ バックエンドを使用するには:

$ snapcraft --use-lxd

公開

スナップが構築されると、<name>.snapファイル ルートプロジェクトディレクトリにあります。これでスナップを公開できるようになりました。 このプロセスは以下で構成されます。

  1. 開発者アカウントを作成するにはスナップクラフト.io、 もし、あんたが まだそうしていません。
  2. アプリ名を登録します。登録ができる Snap Store Web UI ポータルを使用するか、 コマンドラインは次のようになります。
    $ snapcraft login
    $ snapcraft register
    
  3. アプリをリリースします。次のセクションを読んだ後 Snap Store チャネルの選択について学ぶには、 スナップをストアにプッシュします。
    $ snapcraft upload --release=<channel> <file>.snap
    

スナップストアチャネル

Snap Store はチャネルを使用して以下を区別します。 スナップのさまざまなバージョン。

snapcraft uploadコマンドはスナップファイルをアップロードします 店舗。ただし、このコマンドを実行する前に、 さまざまなリリース チャネルについて学ぶ必要があります。 各チャンネルは 3 つのコンポーネントで構成されます。

追跡
すべてのスナップには、latest というデフォルトのトラックが必要です。 特に指定がない限り、これは暗黙のトラックです。
危険
アプリケーションの準備状況を定義します。 スナップ ストアで使用されるリスク レベルは次のとおりです。stablecandidatebeta、 とedge
ブランチ
有効期間の短いスナップの作成を許可します バグ修正をテストするシーケンス。

Snap Storeの自動レビュー

Snap Store は、以下に対していくつかの自動チェックを実行します。 あなたのスナップ。手動によるレビューもあるかもしれませんが、 スナップがどのように構築されたか、またスナップがあるかどうかによって異なります。 特定のセキュリティ上の懸念。チェックに合格した場合 エラーがなければ、スナップはストアで利用できるようになります。

追加のリソース

詳細については、次のリンクからご覧ください。スナップクラフト.ioサイト:

  • チャンネル
  • 環境変数
  • インターフェース管理
  • パーツ環境変数
  • スナップストアへのリリース
  • スナップクラフト拡張機能
  • サポートされているプラ​​グイン