Syncfusionの登録とライセンスの設定

2020年6月24日

XamarinでChart.jsっぽい感じで使えるライブラリーないかなと探していたら、Syncfusion社のコンポーネントライブラリを見つけた。

ユーザ登録する

どうやら、年間総収入が100万ドル以下で、開発者が5人以下の企業および個人なら無償( Community License )で使えるようだ。コンポーネントとか作るの大変だし、既にあって無料で使えるなら使わない手はない!ということで、使ってみました。

こちらでユーザ登録する。

ライセンスキーを登録する

ユーザ登録が完了したらダッシュボードに移動する。

https://www.syncfusion.com/account

Download & Keysをクリックして
Get License Key リンクをクリック

すると、以下の入力フォームが出るので、プラットフォームとバージョンを選択してGET LICENSE KEYボタンをクリックする。

License Keyが表示されるのでコピーして記録しておく。

ライセンスキーをコードに埋め込む方法は以下に記載されている。
それぞれのプラットフォームごとにやり方が違うので、そこは注意が必要。

https://help.syncfusion.com/common/essential-studio/licensing/license-key#xamarinforms

Xamarin.Formsの場合だと
App.xaml.csを以下のように編集する

        public App()
        {
            // 以下をコピーして記録しておいたライセンスキーを書く。
            Syncfusion.Licensing.SyncfusionLicenseProvider.RegisterLicense("ここにライセンスキーを入力する");

            InitializeComponent();
            MainPage = new NavigationPage(new MainPage())
            {
                BarBackgroundColor = Color.FromHex("#000"),
            };
        }

ライセンスキーをハードコーディングではなく、環境変数に設定して使う方法

ソースをGitなどで管理している場合、こういうライセンスキーをリポジトリに置いておくことはできない。どう管理すべきか悩むところです。っで、公式にハードコーディングでライセンスキーを使わず、環境変数に設定して使う方法という内容で記事が公開されていたので、その手順でライセンスキーを使えるようにしてみた。

https://www.syncfusion.com/kb/9179/syncfusion-license-register-without-hardcoded

環境変数で新しいユーザ変数を追加する。

変数名:SyncfusionLicenseKey
変数値:発行されたライセンスキー
とする。

ビルドイベントで使うバッチを配置する

SyncfusionLicenseRegister.bat をこちらからバッチをダウンロードして、対象のプロジェクトに配置する。

ライセンス認証するためのコードを記述

使用するライブラリごとに書き方が異なる。
こちらが参考になります。

Xamarin.Formsの場合だと
App.xaml.csを以下のように編集

        public App()
        {
            //Register Syncfusion license
            Syncfusion.Licensing.SyncfusionLicenseProvider.RegisterLicense("##SyncfusionLicense##");

            InitializeComponent();
            MainPage = new NavigationPage(new MainPage())
            {
                BarBackgroundColor = Color.FromHex("#000"),
            };
        }

ビルドイベントを設定する

ひな形は以下です。

PreBuild: cd "$(ProjectDir)" 

SyncfusionLicenseRegister.bat PreBuild {ライセンス認証するためのコードを書いたファイル名} 

PostBuild: cd "$(ProjectDir)" 

SyncfusionLicenseRegister.bat PostBuild {ライセンス認証するためのコードを書いたファイル名} 

xamarinだとこんな感じ

PreBuild: cd "$(ProjectDir)" 

SyncfusionLicenseRegister.bat PreBuild App.xaml.cs 

PostBuild: cd "$(ProjectDir)" 

SyncfusionLicenseRegister.bat PostBuild App.xaml.cs

手順通りにやったけど上手くいかない

結論、再起動して直った。
変なところにはまってしまった。

手順通りにやったはずなのに、上手くいかなかったので調べた。

まず、cmdで環境変数がちゃんと設定されているか確認した。コマンドプロンプトで%SyncfusionLicenseKey%を入力すると、ちゃんとライセンスキーが出力された。

次に、ビルド前イベントとビルド後イベントがちゃんと動いているのか確認。
それぞれ以下のようにechoでビルド時に出力されるログに表示されるかを確認した。
Visual Studioの出力タブでビルドを選択した状態でリビルドすると、確かに”test”と表示されていることが確認できた。

cd $(ProjectDir)
echo "test"
SyncfusionLicenseRegister.bat PreBuild App.xaml.cs

少しづつ原因に近づいて行っているような気がする。
とういことで、次にbatの中身を確認する。

原因の切り分けのため、どこまで上手くいっているのかみる。
以下のように、echoでlog01とlog02が出力されるように修正。

@echo on&setlocal
echo "log01"
    setlocal enableextensions disabledelayedexpansion

	::Arguments of either PreBuild or PostBuild
	set buildType=%1
	::License key replacement file
	set sourceFile=%2
	
	::Replacement string
    set DummyKey=##SyncfusionLicense##
	set LicenseKey=%SyncfusionLicenseKey%
		
	::Replacement statement
	if NOT "%LicenseKey%" == "" (
	echo "log02"
		if "%buildType%" == "PostBuild" (
		powershell -Command "(gc %sourceFile%) -Replace '%LicenseKey%','%DummyKey%'|SC %sourceFile%"
		)
		if "%buildType%" == "PreBuild" (
		powershell -Command "(gc %sourceFile%) -Replace '%DummyKey%','%LicenseKey%'|SC %sourceFile%"
		)
	)

結果、log2が出力されていないことがわかった。
つまり、LicenseKey=%SyncfusionLicenseKey%がセットされていないようだ。

しかし、既に調べたようにコマンドプロンプトでは %SyncfusionLicenseKey% が正しく出力されていたのでお手上げ状態。
環境変数を変更して再起動してないからかな?と思って再起動すると上手くいったという流れ。