読者です 読者をやめる 読者になる 読者になる

Xamarin 日本語情報

Xamarin(ザマリン) の代理店だったエクセルソフト田淵のブログです。主に Xamarin に関するエントリーをアップしていきます。(なるべく正しい有益な情報を掲載していきたいと考えていますが、このブログのエントリーは所属組織の公式見解ではありませんのでご注意ください)

目次

Xamarin

はじめに

Xamarin (ザマリンと読みます) とは、Gnome, Mono の開発者である Migel de Icaza (ミゲル・デ・イカザ) 氏が立ち上げた企業名であり、C#Android, iOS, Mac のネイティブアプリを作成できる開発ツール郡 (Xamarin.Android*1、Xamarin.iOS*2、Xamarin.Mac*3、Xamarin Studio*4 など) のブランド名です。

2016/4/1 をもって、Visual Studio に付いてくるようになりました。

本ブログは、エクセルソフトの田淵義人が Xamarin に関する様々な情報を記載しています。Xamarin って何だろ?という方、Xamarin についてもっと知りたい。というような開発者の皆様の手助けになれば幸いです。

まだ Xamarin に関する日本語の情報は少ないのが現状ですので、まず手始めにどのような情報を追えばよいのかを纏めておきます。

 

新規に作った Xamarin.Forms プロジェクトはそのままでは Android に配置できないので、こちらのエントリーをお読みください (2016/12/9再喚起)

 

Xamarin とは?

紹介スライドなどをご覧ください。

 

書籍

 

コミュニティ

公式コミュニティサイト Japan Xamarin User Group (JXUG) 

facebook User Group

 

各種情報へのリンク

本ブログの主なエントリー

全般
Xamarin.Forms
Xamarin.Forms TIPS/逆引き
Xamarin Test Cloud
BAD KNOW HOW

全記事一覧 - Xamarin 日本語情報

Xamarin.Forms エントリー纏め

 

事例

事例

 

エクセルソフト Xamarin ページ

Qiita

ブログ、連載記事など

 

Xamarin 本家の開発者向けの情報(英語)

Xamarin 学習用リソースまとめ でも公式情報を纏めていますので、ご参照ください。

 

Xamarin 気になった方は

是非 ダウンロード(直接) / ダウンロード(弊社経由) して触ってみてください。
学習用リソースJXUG リンクページ に参考資料を纏めてますので併せてどうぞ。

Xamarin の情報が欲しい方はこのブログも購読いただいたりすると嬉しいです。

以上です。

*1:旧 MonoDroid, Mono for Android

*2:旧 MonoTouch

*3:OSS版はMonoMac

*4:OSS 版は MonoDevelop

Xamarin のテンプレートの不備一覧

Xamarin お知らせ

こんにちは。エクセルソフトの田淵です。

2016/12/9 現在で、Visual Studio で新規に作った Xamarin.Forms プロジェクトはそのままでは Android に配置できない問題について、先日のエントリーを各所のトップに配置しておきました。適宜加筆修正していきます。

ytabuchi.hatenablog.com

まだまだありそうですよね。今分かっているのは、Visual Studio での iOS のクラス作成についてです。

iOS プロジェクトの新規クラステンプレートの不備

f:id:ytabuchi:20161209120907p:plain:w450

iOS プロジェクトで新規にクラスを追加するときに「Class」と「クラス」があります。どっちや…

「Class」で作ったクラスは

f:id:ytabuchi:20161209121152p:plain:w450

このように、参照が using MonoTouch.Foundation;using MonoTouch.UIKit; になっていて、参照エラーになります。現在の名前空間は MonoTouch が取れて、単純に using Foundation:using UIKit; なので、「MonoTouch.」の部分は手動で削除してください。

「クラス」で作ったクラスは

f:id:ytabuchi:20161209121409p:plain:w450

このように、System 系の参照しかありません。おそらく標準の C# のクラスですね。そのため、iOS で使用する場合は、適宜必要な参照を追加してください。FoundationUIKit はとりあえず追加しておいて良いかと。

こんなエントリーで気になってくれるか分かりませんがw、Xamarin 気になった方は

是非 ダウンロード して触ってみてください。Visual Studio 2015 をご利用の方は Update 3 にアップデートする際にカスタムインストールで Xamarin を追加しましょう。 学習用リソースJXUG リンクページ に参考資料を纏めてますので併せてどうぞ。

Xamarin の導入支援サービスを始めました。ベースは基本的なアプリを一緒に作ることで Xamarin を使えるようになって頂く内容ですが、ご要望に応じて講習内容のカスタマイズも可能です。詳しくは田淵までお問い合わせください(^^)

有償セミナー、トレーニング | Xamarin : XLsoft エクセルソフト

Xamarin の情報が欲しい方はこのブログも購読いただいたり、私のTwitterアカウントをフォローいただいたりすると嬉しいです。

私が所属している エクセルソフト の宣伝を少しさせてください。弊社は開発者向けの様々なソフトウェアを扱っています。おなじみの ReSharper (JetBrains)、 や Atlassian の JIRA, Confluence、Office/PDF ファイルを .NET/Java で操作するライブラリ Aspose(アスポーズ)Windows アプリ、Web ページ、iOS/Android アプリの UI テストができる TestComplete などお勧めです(^^) また、Visual Studio Professional/Enterprise with MSDN も販売してますし、日本で売っていない海外のソフトウェア、開発ツールなどを弊社経由で日本円で購入頂くことも可能です。ご興味あれば 弊社ページ を覗いてみてください。

以上です。

UIImageView に Url で取得した画像を指定するには

Xamarin iOS

こんにちは。エクセルソフトの田淵です。

Xamarin.iOS をいじっていて、UITableView に独自のセルを作る方法を調べていたところ、UIImageViewUIImage Image プロパティに URL で引っ張ってきた画像を指定する方法でちょっとハマったのでメモとして残しておきます。

github.com

この、Xamarin Dev Days で作るアプリの Xamarin.iOS 版を作っています。Azure まで実装するかは検討中w

f:id:ytabuchi:20161207210950g:plain:w300

今回は、これの画像部分をどう指定したか?というお話です。

UITableView のカスタムセルを作る話は追って別のエントリーで書きたいと思います。

UIImage の FromXXX メソッド

UIImage には、From〜〜 というメソッドが幾つか用意されています。

  • FromBudle (string name)
    Bundle から引っ張ってきます。
  • FromFile (string filename)
    ファイル名を指定して引っ張ってきます。
  • FromImage (CGImage image)
    CGImageCIImageから引っ張ってきます。
  • FromResource (Assembly assembly, string name)
    Resourceアセンブリから引っ張ってきます。
  • LoadFromData (NSData data)
    データから引っ張ってきます。

ただし、Xamarin.Forms にはありましたが、iOS には FromUrl (string path) が無いようです。

stackoverflow.com

調べていたら、こちらに情報がありました。

以下のような imageUrl を引数に実行すると UIImage を返してくれるメソッドを用意して、

private async Task<UIImage> LoadImage(string imageUrl)
{
    using (var client = new HttpClient())
    {
        // imageUrlからバイト配列を取得します。
        byte[] contents = await client.GetByteArrayAsync(imageUrl);
        // バイト配列のデータからUIImageを生成します。
        return UIImage.LoadFromData(NSData.FromArray(contents));
    }
}

UITableViewSource に再度流し込んで、TableView を ReloadData() で再読込すれば OK です。

var src = CustomTableView.Source as CustomTableViewSource;
src.Items.Clear();
foreach (var x in tableItems)
{
    src.Items.Add(x);
}
CustomTableView.ReloadData();

github.com

一応アップしましたが、「XiOS_App01」とかになっているので、ソリューション名とかちゃんとして再度アップし直します。すみません。 多分合っていると思いますが、識者の方ツッコミお待ちしています。

Xamarin 気になった方は

是非 ダウンロード して触ってみてください。Visual Studio 2015 をご利用の方は Update 3 にアップデートする際にカスタムインストールで Xamarin を追加しましょう。 学習用リソースJXUG リンクページ に参考資料を纏めてますので併せてどうぞ。

Xamarin の導入支援サービスを始めました。ベースは基本的なアプリを一緒に作ることで Xamarin を使えるようになって頂く内容ですが、ご要望に応じて講習内容のカスタマイズも可能です。詳しくは田淵までお問い合わせください(^^)

有償セミナー、トレーニング | Xamarin : XLsoft エクセルソフト

Xamarin の情報が欲しい方はこのブログも購読いただいたり、私のTwitterアカウントをフォローいただいたりすると嬉しいです。

私が所属している エクセルソフト の宣伝を少しさせてください。弊社は開発者向けの様々なソフトウェアを扱っています。おなじみの ReSharper (JetBrains)、 や Atlassian の JIRA, Confluence、Office/PDF ファイルを .NET/Java で操作するライブラリ Aspose(アスポーズ)Windows アプリ、Web ページ、iOS/Android アプリの UI テストができる TestComplete などお勧めです(^^) また、Visual Studio Professional/Enterprise with MSDN も販売してますし、日本で売っていない海外のソフトウェア、開発ツールなどを弊社経由で日本円で購入頂くことも可能です。ご興味あれば 弊社ページ を覗いてみてください。

以上です。

Xamarin.Android で PutParcelableArrayListExtra を使い List<T> を他の Activity に渡すには?

Xamarin Android

こんにちは。エクセルソフトの田淵です。

Android で Activity 間でデータのやり取りをする場合、intent の PutExtra などを使用します。stringint などはそのまま渡せて、オブジェクトを渡したい場合は、Parcelable を使用します。

今回は、Activity で持っている ListPutParcelableArrayListExtra で渡す方法を調べてみました。

例えばデータを追加していくと、次の Activity の ListView に追加されていくようなイメージです。

f:id:ytabuchi:20161205165516g:plain:w300

サンプル

github.com

こちらにアップしておきました。

MainActivity から、2つのページに遷移できますが、一つ目のボタンでは一つのオブジェクトを単純に Parcelable にして渡す方法です。

こちらは、@amay077 さんの

www.buildinsider.net

をご覧ください。

Parcel にする場合の注意点は、上記記事にもありますが、IParcelable を継承したクラスで必要な WriteToParcel メソッドで Parcel に書き込むオブジェクトと、

public void WriteToParcel(Parcel dest, [GeneratedEnum] ParcelableWriteFlags flags)
{
    dest.WriteString(Item.Name);
    dest.WriteString(Item.Time.ToString());
}

IParcelableCreator を継承したクラスで必要な CreateFromParcel メソッドで読み込むオブジェクトを同じにすること。

public Java.Lang.Object CreateFromParcel(Parcel source)
{
    TableItemParcelable item = new TableItemParcelable(
        source.ReadString(), 
        DateTime.Parse(source.ReadString()));
    return item;
}

後は、IParcelableCreator GetCreator メソッドには、[ExportField("CREATOR")] が必要というところでしょうか。

[ExportField("CREATOR")]
public static IParcelableCreator GetCreator()
{
    return new TableItemParcelableCreator();
}

List を渡す場合はどうする?

受け渡し

PutParcelableArrayListExtra(string name, List<IParcelable> value) メソッドを使用するようです。 IParcelable を継承したクラスの List を List<IParcelable> に移し替えてから Intent に格納し、次の Activity に渡します。

var item = new TableItemParcelable(nameText.Text, DateTime.Parse(timeText.Text));
TableItems.Add(item);

List<IParcelable> values = new List<IParcelable>();
foreach (var x in TableItems)
{
    values.Add(new TableItemParcelable(x.Item.Name, x.Item.Time));
}
var intent = new Intent(this, typeof(GetParcelableArrayListActivity));
intent.PutParcelableArrayListExtra("data", values);
StartActivity(intent);

受け渡し側の Activity

受け取り

まずは Intent を受け取ったか?を確認し、受け取った Intent を変換前の IParcelable を継承したクラス(ここではTableItemParcelable)でキャストし、その List を ListAdapter で使用しているモデルに格納します。

var intent = this.Intent;
if (intent != null && intent.HasExtra("data"))
{
    var data = intent.GetParcelableArrayListExtra("data");
    foreach (var item in data)
    {
        tableItems.Add(((TableItemParcelable)item).Item);
    }
}

受け取り側の Activity

変換前のオブジェクトは IParcelable を継承している必要があるため、このように少し面倒な書き方が必要ですが、慣れてしまえばなんとかなりそうですね。

ListView の Adapter クラス

ArrayAdapter、SimpleListItem1 以外は Adapter クラスが必要なようです。今回は上下二段のリスト SimpleListItem2 を使用したため、Adapter を用意しました。

Custom Adapter については、以下をご覧ください。

ytabuchi.hatenablog.com

Xamarin 気になった方は

是非 ダウンロード して触ってみてください。Visual Studio 2015 をご利用の方は Update 3 にアップデートする際にカスタムインストールで Xamarin を追加しましょう。 学習用リソースJXUG リンクページ に参考資料を纏めてますので併せてどうぞ。

Xamarin の導入支援サービスを始めました。ベースは基本的なアプリを一緒に作ることで Xamarin を使えるようになって頂く内容ですが、ご要望に応じて講習内容のカスタマイズも可能です。詳しくは田淵までお問い合わせください(^^)

有償セミナー、トレーニング | Xamarin : XLsoft エクセルソフト

Xamarin の情報が欲しい方はこのブログも購読いただいたり、私のTwitterアカウントをフォローいただいたりすると嬉しいです。

私が所属している エクセルソフト の宣伝を少しさせてください。弊社は開発者向けの様々なソフトウェアを扱っています。おなじみの ReSharper (JetBrains)、 や Atlassian の JIRA, Confluence、Office/PDF ファイルを .NET/Java で操作するライブラリ Aspose(アスポーズ)Windows アプリ、Web ページ、iOS/Android アプリの UI テストができる TestComplete などお勧めです(^^) また、Visual Studio Professional/Enterprise with MSDN も販売してますし、日本で売っていない海外のソフトウェア、開発ツールなどを弊社経由で日本円で購入頂くことも可能です。ご興味あれば 弊社ページ を覗いてみてください。

以上です。

Project Blue Monkey のご紹介

こんにちは。エクセルソフトの田淵です。

本エントリーは Xamarin Advent Calendar 2016 (その1) 2日目のエントリーです。明日の担当は itoshinji - Qiita さんです。よろしくお願いいたします。

さて、2日目の今日は、JXUG が主体となり進めている Xamarin.Forms の OSS プロジェクト Project Blue Monkey をご紹介します。

本エントリーはプロジェクトの状況に合わせて少しずつ加筆修正していく予定です。

Project Blue Monkey ってなに?

「Xamarin ってどんなもんじゃい」「実際業務で使えんの?」的な実績や、MVVM でどう構築するのか?の指標として、ある程度形になったサンプルを作ろうと、インフラジスティックス・ジャパン様からコミュニティにお話しをいただき、我々 JXUG と、日本マイクロソフト様、インフラジスティックス・ジャパン様の共同プロジェクトとして進めている OSS のプロジェクトです。

github.com

アメンバーとして、Prism for Xamarin.Forms の作者でもある Brian Lagunas さん(Infragistics社の社員でもある)や、JXUG にも良く来てくださり、実際に Xamarin を使用して開発されている方々 に参加いただいています。

private になっていたようなので、初期メンバーをリストします。

Yamaguchi さん、Kiryu さんはインフラジスティックス・ジャパンの方です。

BlueMonkey というプロジェクト名ですが、Xamarin なので当然、猿関係ですよね。また、Xamarin なので当然青ベースなわけです。そうしたら、Blue monkey という種類の猿がいることが分かりまして。

blue monkey photo - Google 画像検索

あまり凝りすぎる名前にするのも恥ずかしいので、そのまま Blue monkey にしようということになりましたw サンプルとしてそのまま使える Blue print アプリの意味合いも含まれています。

何を作るの?

参考になる機能が多く必要そうな Expence アプリ(経費精算や家計簿に相当)です。

概ね仕様も固まってきており、画面周りは以下、

ER図は以下、

となっています。

機能としては、経費精算なので レシートの写真を撮ったり、レポートを出したり、チャートを表示したり、クラウドに認証機能を付けてデータを保存したり、ローカル DB とオフライン同期したり、提出期限が近くなれば PUSH 通知したり。そんな機能が必要になってくるでしょう。(最初はミニマムスタートですが)

サーバーサイドは Azure に ASP.NET で構築し、Azure SQL Server にデータを格納します。

クライアントサイドは Xamarin.Forms で Prism for Xamarin.Forms、Moq などを使用し、MVVM で組んでいきます。

どうしたいの?

Xamarin.Forms を使ったちゃんとしたサンプルアプリをコミュニティが貢献した形で世の Xamarin ユーザーさん、これから Xamarin を勉強する方の手助けができれば。

と考えています。初期開発が一段階すれば、広くプルリクも受け付けていく方針ですので、ぜひ興味ある皆さんはご参加いただけると嬉しいです。

本当はもう少し進んでる予定だったんですが、環境回りで止まったりしてたのでまだできてません。頑張りますね。

以上です。