くうと徒然なるままに

モバイルアプリを作りながらバックエンドも作っています。

既知 の Wifi Spot に Xamarin.Android なアプリから接続する

コード

 protected override void OnCreate(Bundle savedInstanceState)
        {
            // 良さげな Permission 設定はしてくださいませ
            // Access_Wifi_State とか
            base.OnCreate(savedInstanceState);

            // Set our view from the "main" layout resource
            SetContentView(Resource.Layout.Main);

            var connectButton = FindViewById<Button>(Resource.Id.ConnectButton);
            var wifiStatusText = FindViewById<TextView>(Resource.Id.WifiStatusText);

            connectButton.Click += (sender, args) =>
            {
                var TartgetSSID = "daido-o";
                WifiConfiguration tartgetSpot;
                using (var wifiManager = GetSystemService(WifiService) as WifiManager)
                {
                    if (wifiManager != null && !wifiManager.IsWifiEnabled) return;
                    tartgetSpot = wifiManager?.ConfiguredNetworks.First(configuration => configuration.Ssid.Replace("\"","") == TartgetSSID);
                }
                wifiStatusText.Text = $"接続中: {tartgetSpot?.Ssid}";
            };
        }

実行結果

f:id:kuxumarin:20171120114155j:plain

Connect(); 2017 Visual Studio とモバイル関係まとめ とかとか

今北産業って人向けまとめ

  • Visual Studio App Center (旧 Visual Studio Mobile Center) GA
  • Cognitive Services + ML Kit ( iOS11 )
  • Xamarin Work Books がオープンソース化 & 3Dオブジェクトの表示に対応

Connect(); 2017 で公開されたモバイル関係の情報についてまとめています。 Azure 関係については、 ブチザッキ に詳しく書いてあるはずなのでご覧くださいませ。

Visual Studio App Center

Visual Studio App Center については、別途詳細を書いた記事を用意しました。

goo.gl

簡潔にまとめると

  • GA
  • Mobile Center から App Center へ Rename
  • GAに伴い テスト (Xamarin Test Cloud 相当の機能)、ビルド機能の一部 が有償化へ、

Cognitive Services + ML Kit (iOS 11)

Cognitive Services の Custom Vision にて作成して学習モデルを ML Kit に読み込ませて利用できるというアナウンスです。 機械学習などのモデルを作成する部分を Custom Vision にお任せすることにより、開発者は 機械学習の力をより手軽にアプリケーションに組み込むことができるといったところでしょうか。

Custom Vision Service にてすでに利用できるようになっています。 利用するためには Domain を Compact に選択してくださいね。

https://lh3.googleusercontent.com/--2fZl-IWlvM/Wgy9NWCzbqI/AAAAAAAAbag/Yaj_wy9Hb5A76ztczgNTK6mks9rKIKQjACHMYCw/s0/chrome_2017-11-16_07-18-28.png

https://lh3.googleusercontent.com/-dZy5mDCdOPM/Wgy8_zYFt2I/AAAAAAAAbaY/V-xErVZQWLAX3XHyDQsfkpebPZyMnZSuwCHMYCw/s0/chrome_2017-11-16_07-17-34.png

https://lh3.googleusercontent.com/-BD6ps3cn6cI/Wgy9IbFj33I/AAAAAAAAbac/aKZTb_LnJzkMn5cX6_K1oSERV0PrUwtBwCHMYCw/s0/chrome_2017-11-16_07-18-09.png

詳しいやり方等については Github の公式ドキュメントを参照くださいませ

github.com

Xamarin Work Books 1.4 Beta 1

iOS 11, Xcode 9 に対応したバージョンです。 今のMSらしく3Dビューに対応していますね。 詳細は公式サイトをご覧ください。

Workbooks & Inspector 1.4 release notes - Xamarin | Microsoft Docs

Xamarin Work Books オープンソース化

ソースコードは Github にホスティングされています。

Miguel de Icaza on Twitter: "We have open sourced Workbooks: https://t.co/FcdQLPK1Vu… "

Xamarin Live Player

Xamarin Live Player アプリの上で Xamarin 製アプリを動かして気軽に動作チェックできるというものです。 この機能があることにより Xamarin.Forms でアプリを作成するときには XAML という XML の拡張言語を利用するのですが、より反復してデザインをしていくことができます。

Windows 単体で開発しているのに iPhone の上で動かすことができるのはなんか不思議な気持ちになりますよね !!

※よく誤解されるのですが、 iOS アプリを Mac 無しでストアへ公開できるようになるというものではありません 詳しい仕組みについては以下のブログ記事を参照くださいませ

ticktack.hatenablog.jp

しかし、James さんのTwitterを見ると どうやら Android Emulator の上で Xamarin Live Player を動かして Xamarin.Forms Previewr の進化版のような雰囲気を漂わせていますね。 個人的には、 Visual Studio 内にわざわざ プレビュー機能を実装するのではなくエミュレーターの上にプレビューするための基盤を実装したのは面白いなと感じています。

Embedding .NET

Atsushi Eno (@atsushieno) | Twitter さんが2017/8 に名古屋で熱く語ってくれた

Redirecting to https://docs.microsoft.com/en-us/xamarin/tools/dotnet-embedding/index がついにでましたね!

この技術は、 iOS/Android の Swift/Java なコードから .NET/C# なコード (正確には.dll) を呼び出せるようにしてくれる技術です。 この技術があることによりネイティブアプリから Xamarin への移行が楽になります。ちょっとずつ .NET なコードに置き換えてくみたいなのができるようになります。

そのお話が入ってる同人誌が売ってるのでぜひ!

Xaml Standard for Xamarin.Forms Preview

Xaml を UWP, Xamarin.Forms で共通化しようという取り組みの Xaml Standard の Xamarin.Forms 向けバージョンのプレビューが公開されています。

使いたい人は試せばいいと思います。

https://developer.xamarin.com/guides/xamarin-forms/xaml/standard/

さいごに

Wantedly のプロフィールを公開しています! いろいろお願いします!

www.wantedly.com

「速報」Visual Studio App Center (旧Mobile Center) がGA!

App Center GA

今まで Mobile Center と呼ばれていたものがGAしましたね。 プレビュー期間から実際に使用していたサービス?なので心の底から嬉しいです。ただ、有料化(一部サービスは無料のまま利用できます)してしますが、、、

使い方としては名前の通り モバイルアプリの開発を支援してくれるものです。 対象な環境としては iOS, Android, Windows の native, Xamarin, React native な環境で開発したアプリケーションです。 具体的には、CI/CD, テストユーザーへの配布、アプリ内イベントなどの解析、クラッシュログ収集、プッシュ通知などが行えるサービスです。

正式リリースなサービス

  • Build
  • Test
  • Distribute

まだプレビューなサービス

  • Crashes
  • Analytics
  • Push

SDK はこちらです。地味に Xamarin, UWP 向けSDK の名前が for Xamarin, UWP から for .NET に代わっていることからもUWPに対する考え方が見えてきますね。

https://github.com/Microsoft/AppCenter-SDK-DotNet

Mobile Center の利用料金

わかりやすくするために表にしてみました。 テスト機能はやはり有料ですね。 ビルド機能はVSTSと同じ時間だけ無料でビルドできるようですね。

無制限のアプリ、無制限の組織、無制限のチーム で利用できます。

サービス名 何をするものか 値段
ビルド CIしてくれる ビルドパイプライン1本は無料。各ビルドごと30分までの時間制限あり
Distribute アプリをテスタに配布できる 無料
テスト 様々なデバイスでUIテストを実行してくれる 有料
クラッシュ アプリのクラッシュ情報を集めてくれる 無料
アナリティクス アプリ内イベントを集めて解析できる。 Application insight と連携できるよ! 無料
プッシュ アプリにプッシュ通知を飛ばすことができる 5セグメントまで無料

Twitterより教えていただきました

詳しくはこちらをごらんくださいませ

docs.microsoft.com

さいごに

Wantedly のプロフィールを公開しています! いろいろお願いします!

www.wantedly.com

Visual Studio 15.4 (2017) で Xamarin を選択したときに Android エミュレーターのチェックを外せれなくなっています。ストレージ容量の少ない方はご注意ください。

Visual Studio 15.4 とは、 Visual Studio 2017 の マイナーバージョン4 みたいなやつです。

Visual Studio の新バージョンが出てくるたびになんだかんだ言って再インストールしている くぅ です。

私のPCは 256GB しか積んでいないので(新しいパソコンほしぃ...) Xamarin な環境を セットアップするときは Android エミュレーターをインストールしないようにし、容量を節約して使っていました

下記の記事にあるように皆さんもそうしているようです。

qiita.com

現在の状況

いつも通り Google Android エミュレーター のチェックを外そうとしていました。

https://lh3.googleusercontent.com/-vdlwzSm0rh8/WfbAWY0bQZI/AAAAAAAANxM/Zkw5FeJOeWYxu9NNvLuQs6TbmOS2s_C-gCHMYCw/s0/vs_installershell_2017-10-30_15-02-02.png

外せれない...

対策

現状できる対策は以下ぐらいかなと思います。

  • Xamarin のよしなな場所にフィードバックを送る
  • ストレージ容量の大きなPCを買う

フィードバックですが、 Xamarin 公式 Forum の 15.4 のスレッドをちらっと見た感じでは問題にされてないっぽい....?

Current Release: 15.4 Feature Release — Xamarin Community Forums

追記

.NET によるモバイル開発 で一括で入れなくても、個別に必要なコンポーネントを選択していけばいけるという情報をいただきました。 実際にやってみてその方法で行けました!情報ありがとうございます!

Xamarin.Android で Wifi との接続状況を取得する(シンプル Ver と 詳細 Ver)

Xamarin.Android で Wifi との接続状況を取得してあれこれしたいって場面があると思います。(Wifi と確実に接続してから通信をしなければいけない状況など....

Android では幾つかの方法を利用することで Android 端末の Wifi との接続状況を取得することができます。

今回は、2種類の詳しさで WIfi との接続情報を取得する方法について書いていきます。(必要以上に詳しい情報が必要な場面とそうでない場面とであるからね!

シンプル Ver

得られる結果は以下のページにリストアップされています。

https://developer.xamarin.com/api/type/Android.Net.NetworkInfo+State/

https://lh3.googleusercontent.com/-nDJsY58Vplk/WfaZ3lNtXZI/AAAAAAAANws/ZE_KAxiXWvEr1lsp1iqwJQMMt0h0Xw1PACHMYCw/s0/chrome_2017-10-30_12-17-52.png

// Connectivity Mange を取得するプロパティを適当に生やす
private ConnectivityManager ConnectivityManager => (ConnectivityManager)GetSystemService(ConnectivityService);
// 接続状況を表示するための Label を取得
var SimpleLabel = FindViewById<TextView>(Resource.Id.SimpleNetworkLabel);
// アクティブになっているネットワークを取得
var SimpleWifiState = ConnectivityManager.ActiveNetworkInfo;
// 今回は、 Wifi 以外の場合は興味ないので返しておく
if (SimpleWifiState.Type != ConnectivityType.Wifi) return;
// 結果を見やすくするためにテキスト化して表示
SimpleLabel.Text = SimpleWifiState.GetState().ToString();

詳細 Ver

得られる結果は以下のページにリストアップされています。

SupplicantState Class (Android.Net.Wifi) | Microsoft Docs

https://lh3.googleusercontent.com/-v3yHoiXx10U/WfaZmCPdbgI/AAAAAAAANwo/A914yTAiYykiFIQZpjhGBQSBMo8dVHJIgCHMYCw/s0/chrome_2017-10-30_12-16-41.png

// WifiManger を利用して取得
private WifiManager WifiManager => (WifiManager)GetSystemService(WifiService);
// 接続状況を表示するための Label を取得
var detailLabel = FindViewById<TextView>(Resource.Id.DetailNetWorkStateLabel);
// 結果を見やすくするためにテキスト化して表示
detailLabel.Text = WifiManager.ConnectionInfo.SupplicantState.Name();

Xamarin.Android で Android.Views.InflateException: Binary XML file line #1: Binary XML file line #1: You must supply a layout_width attribute. というエラーが出る

Android.Views.InflateException: Binary XML file line #1: Binary XML file line #1: You must supply a layout_width attribute.

というエラーが Xamarin.Android なアプリを作成していて出ました。

原因

layout_width を付与し忘れていたのが原因でした。 手書きで axml を書いていて書き忘れてしまった....

Microsoft MVP アプリのテストを手伝ってくれるMicrosoft MVP を募集してるよー!ってお話。

主に、Microsoft MVP 向けな記事です。

Microsoft MVP 向けに Microsoft MVP アプリが存在します。

Microsoft MVP Award

Microsoft MVP Award

しかし、 現在は Android 向けアプリはリリースされていない状況です。 そこで、 Android バージョンのテスターを募集しているらしいです。

以下のツイートは Microsoft で Xamarin を担当している開発者さんのツイートです。 この方に メアドと Microsoft Number (受賞時に送られてきたメールについてる数字) をDMで送ると招待されます。(正確には、 アプリへのリンクが送られてきます。)

Xamarin Live Player on iOS で Visualization Error が発生する

手元の端末で気軽に Xamarin.Forms 製アプリのプレビューを見ることができる Xamarin Live Player 、便利ですよね。

Xamarin.Forms で作成したアプリを iOS 端末でプレビューしようとしたら、エラーが発生してしまいプレビューできなかったのでその解決方法を書きます。

エラー画面

f:id:kuxumarin:20171011021412p:plain

56259 – Xamarin Live Player - IOS - Visualization Error - Exception of type 'Foundation.ModelNotImplementedException' was thrown

解決方法

雑に動かしたければ、 Xamarin.Forms のプロジェクト作成画面で SharedProject で作成すればおkみたいです。 PCL 対応版は次のリリースだそうです。 ごにょればPCLでも使えれるっぽいですが、リリースを待ったほうがよさげですね。

あ、 Mac が無くても iOS アプリを開発できるみたいな文脈で Xamarin Live Player が紹介されることがありますが原因の切り分けのために Mac がないと現実問題つらくないですか?

Xamarin.iOS で SF Safari View Controller を使う

使った理由

Web View よりも ユーザーの体験をよくできるかと思い 標準の WebView ではなく、 SF Safari View Controlelr を導入しました。

SF Safari view controller について

この記事にたどり着いている方は、すでに知っているかもしれませんが。。。

mushikago.com

実行例

ログインしなくても、最初からTwitter のユーザー画面が表示されているのがわかるかと思います。 (つまり、Safari と ログイン情報が共有されている)

youtu.be

コード

var url = "https://twitter.com/fumiya_kume";
var safariViewController = new SFSafariViewController(new NSUrl(url));
PresentViewController(safariViewController,true,() => {});