Category Archives: Visual Studio

XamarinでAdmobをiOS、Androidを実装

手順はこちらを参考にしました。

Xamarin.Formsでカスタムレンダラーを使って、AdMobのバナー広告を表示する(iOS/Android)

nuGetでXamarin.Google.iOS.MobileAdsを追加。Google.MobileAdsネームスペースが使用可能になる。(バージョンは常にアップデートされているので注意)

サンプルでは、iOSとAndroidでNativeレンダラーをそれぞれに作って、違うコードで書くようになっている。

ポイントは、PCLの共有部分で空のContentViewの派生クラスを作って、PCLのUI上にコントロールを配置し、レンダラーをExportからオーバーライドしている点。

iOS Nativeのコードはまだ、理解不能だけれどこういうやり方は参考になる。

やっぱりアップデートに時間が取られる

少々愚痴っぽいことを書いてみる。

個人的な事情で約3週間自宅を離れてマシンを起動しない状況でした。帰ってきて、マシンを起動して、設定を変えたか何かの理由でマシンを再起動が必要になり、スタートメニューの再起動欄にアップデートして再起動の選択肢しかない。

仕方なく、アップデートして再起動する。そしてアップデートが始まりそのまま、5分くらいアップデートがはじまる。さらにマシンが起動後、アップデートが10分くらい続く。

今のメインマインがBIOSブートということもあり、OSのディスクからの読み込みに時間がかかる。C:ドライブがSSDなのに、起動が遅い。早くUEFIに乗り換えたいが今はそんな暇はない。とにかくWindowsストアアプリをリリースして、確認することが山ほどある。

クロスプラットフォームでC#がどのくらい使えるのか、そしてダウンロード数はどのくらいなのか。

そして、VisualStudioの起動も試してみたけれど、案の定こちらもアップデートあり。インストーラーを起動してアップデートを起動するがこちらもダウンロードが遅い。OSのアップデートと、開発環境のアップデートでまた1日取られてしまう。

VisualStudioのアップデートがされてしまうと、ターゲットのOSバージョンまで新しい環境が要求される訳で、開発側とユーザー側の両方でアップデートをしないといけない。

アンドロイドでは、アプリのアップデートのためにOSすべてのアップデートを要求されるというのを聞いたことがあるけれど、Windowsもそのうちそういう状況になるのだろうか。

なにもしていないのに、時間だけが過ぎていく・・・

Visual Studio Community C# コードをXamarinでiOSと共有してみる その1

投稿が、日記のようになってきているが、日を追って進んでいるというで。一般的には進捗とか言うんだろうけど、そうなると仕事っぽく報告とか嫌いな感じになっていくのでそういう話はやめて書きたいことだけ書く。

C#プロジェクトのテンプレートに”Shared Project”というものがあり、どのくらいクロスプラットフォーム間でコードが共有できるか試してみました。
結局のところC#で書いたクラスをネームスペース上で使えるようになるというもの。

Desktop Appなり、UWPなり、Androidなり、iOSに依存したコードは書いた時点で、プロジェクト側がエラーを検知するようになっている。
一つのソリューション内に違うプラットフォーム用にプロジェクトを作っておいて、同じコードを使いまわすという想定なのだろう。

C#を中心にコードを書くのに、悪くない環境だ。下にあるスクリーンショットは書くプロジェクトのアイコンを示したもの。

この中でCSSharedProject1というのがShared Project。ちなみに、CPPSharedというのはWin32 C++のShared Project。それぞれ同じ言語でしか共有はできくなっている。Win32でDLLを書いて.NET側からDllImportなりでAPIを取り込むのとどちらがいいのかは、この時点では不明。

Win32で書かれた共有コードをC#に共有するためにはC++CLRでも書けるので、それぞれのクロスプラットフォームではコードレベルでの共有が有効かもしれない。

 

この共有プロジェクトを今回、VisualStudio2017 Communityに含まれることになった、XamarinでAndoidとiOSで共有ができることが確認できた。

注意が必要なのは、XamarinでiOSプロジェクトを書くときは、ネットワーク上にXCodeとVS2017がインストールされたMacが必要になる。しかもXCodeはiOS用にライセンスが必要。幸いiOS用のライセンスはあったのでVS2017 Community for Macをインストールしてサンプルをデバッグしてみた。

Windowsマシンからデバッグをスタートさせ、デバイスにiOS Simulatorを選ぶ。

その時点ではMacにVS2017がインストールされたいなかったので、リモートデバッグができないメッセージがでる。さらにXamarinのガイドでMac側のリモートログインを有効にしないといけないとのこと。(SSHを有効にする)

さらにSSHを有効にし、VS2017をインストールしたところで、デバッグを走らせると今度はXCodeのSDKのバージョンが古い。

今日はここまでで作業終了。

なんという長い手順だ。しかし、MacにVisual Studioをインストールして、リモートデバッグとはMSFTの好むやり方だ。

最近話題になっている、IoTデバイス(ラズパイ)のデバッグも同じ形式。ラズパイにIoT版Windowsをインストールして、デスクトップのVisualStudioからコードを書いてデバッグするという方法をとっている。もともとラズパイはスタンドアローンでパソコンとして動作するものをどうしてもう一台のパソコンを使ってプログラムを書かないといけないのか。Windowsをラズパイにインストールすればそれでいいはずなのに。

コードの共有ができたところで今日はここまで。C#で一度書けば、今のところ考えられる全てのデバイスで使えるのは良いところであろう。で?Arduinoは?やらないの?

 

 

VS2017でUWPを始めてみる

さて、さっそくUWPアプリを作ってみる。

最近のプログラミングの入り口はUIを作るところから入るのだけれど、今までのWPFとは勝手が違い、UWPの場合にはフルHD(1920×1080)用の画面をPC用に作ってから、それぞれのデバイスでも動くようにコントロールのサイズ、配置をしていくのが手順のようだ。

しかし、画面のフォーマットを横長(1920×1080)で書いて、ウィンドウズモバイルの5インチ、6インチに縦画面(1920×1080の250%表示)に最適化していくのだけれど、PC用の横長で表示しているものを同じXAMLを使ってモバイル用の小さい画面に表示できるフォーマットを考えるのに一苦労。C#の処理部分はさっと書いてしまえるのに、これに時間を取られてしまっている。

画面のサイズが違うデバイスで見る画面を一つのXAMLで書くのはちょっとやりにくい。デバイス一つ一つにXAMLを用意してほしかった。しかも画面サイズによって違う処理をするというのもできないみたいだ。

結果から言うと、画面のフォーマットが限られてくるようにしか思えない。Flyoutとか、Popupとか静的に画面に見えていない要素があると操作を覚えにくい。昔から思うけれど、ソフトウェアを起動してマニュアルを見ないと操作がわからない様なUIはクソだ。

UWPに開発者側が以降しない訳が、わかってきた。

けれど、Windows10は死なない。ストアという市場は思ったよりも大きいが、使えるアプリが少ない。ここを狙うのは間違いではないはず。使えるアプリを作るとしよう。

エディタやメモアプリ、日々生活で使うアプリを考えて行くことにしよう。

PS.素直にデスクトップアプリを作って、UWPアプリのパッケージに添付させるデスクトップブリッジで行く方法もありそうだ。

Visual Studio 2017 Community

新規一転、プロジェクトを立ち上げようと、VisualStudio 2017 Proを買って正規の個人ライセンスで行こうと張り切っていたけれど、購入ページをよくみるとVS2017 Communityは Pro版との機能の違いはほとんどないみたいなので検証しつつ試用しながらインストールすることにした。(なんだかまだ環境だけでも長くかかりそうなので現在進行形)

一応価格は、Pro版で、スタンドアローンが$499、1 か月ごとのサブスクリプションで月$45。サブスクリプション版はMacでもつかえて、TFSも使えるようだ。

あとはクラウドサブスクリプション版で、月$45、年$539がある。クラウドサブスクリプションは旧版ののVSのライセンスもついて来て、その他もろもろの特典があるようだ。でもライセンスを買うならスタンドアローン以外に買う理由がない。(マイクロソフトに洗脳されるのは危険だしね)

結果からするとPro版とほぼ同じというのは、本当なようだ。

前回ExpressではWin32 C++プロジェクトで、COMのインスタンス数に制限があったり、スタティックライブラリを使えなかったりで一番使いたいところに制限がかけられていて使い物にならなかった。さらに検証するのに無駄な時間をさいてしまう結果だった(その時はVS2013Proを結局買った)けれど、今のところ既存のプロジェクトを開いてコンパイルも通っている。

一つ、見つかった不具合は、今日(8月15日)15.3のアップデートがリリースされていて、アップデート後Win32 C++プロジェクトをテンプレートから作成すると、文字化けが発生する。原因はテンプレートが吐き出すリソースファイルのテキストフォーマットがUTF-8になっている。UNICODEじゃないといけないんだけど、手動でNOTEPADでSaveAsするしかない。

結果としては、こういう画面になる。

このサイトは自分用のメモ書きなので、一つ一つ手順を書くことはしないが同じ問題に当たった人が検索でここにたどり着ければ、すぐにわかることなので詳細はこれ以上書かないよ。

15.2のWin32のテンプレートの名前はWin32Project1なんだけど、15.3ではWindows デスクトップ アプリケーションとされていて、感が的中。VSのスプラッシュが変わったのも変だと思ったけど。

今日と昨日で、2台のマシンにインストールして、今日インストールしたマシンだけこれが発生してちょっと焦った。2台入れて違うテンプレート名がでるなんてね。今日リリースという偶然で半日無駄にしてしまった。ふう。(お盆明けVS2017を使っている方々、アップデート結構時間かかるので要注意ですよ~。ってアップデート前にこの記事を見る人もいないと思うけど)

あと、SubVersionのプラグイン(ASVN)を入れたのだけれど、ローカルリポジトリを作ろうとするとVSごと固まってしてしまう。(VSが固まった後、OSがアプリケーションクラッシュのダイアログを出す)

原因はASVNプラグインにありそうだけれど、HTTPSのリポジトリは試していないので何とも言えない。MSでAzureのフリーアカウントでTeamServiceでGitを提供してくれるみたいなので、今後はGitでやっていこうかな。今後はGitが主流みたいだしね。(やっとSVNで慣れてきたのに。個人的にはLinux寄りのGitよりも、ApacheよりなSVNの方がすきなんだけど。その辺はどっちも使えないとね)