はつねの日記

Kinect, Windows 10 UWP, Windows Azure, IoT, 電子工作

Visual Studio 2022 が利用可能になりました

Visual Studio 2022がついにGA(リリース)されました。
visualstudio.microsoft.com
いよいよ64bitなVisual Studioですよ。

ダウンロードも可能です。

ダウンロードしたらインストールですね。
f:id:hatsune_a:20211110100104p:plain

必要なワークロード(機能)だけ選択してサクッとインストールできます。
f:id:hatsune_a:20211110100253p:plain

今回の注目はなんといってもここですね。「.NET 6」そして「C# 10」。
f:id:hatsune_a:20211110100331p:plain

それでは、今日のこれからの時間は、新しいVisual Studoの探検を開始したいと思います。
また、後日!

.NETランタイムと.NETデスクトップランタイム

.NET Core系のランタイムには、.NET Runtimeと.NET Desktop Runtimeがあります。
dotnet.microsoft.com

.NET Runtimeはコンソールアプリを実行するためのランタイム群

.NET Runtimeに含まれているのは、.NET Core系(5や6も含む)のコンソールアプリを実行するのに必要なDLL群です。

.NET Desktop Runtimeは、UI系DLL

.NET Desktop Runtimeには、WPFWindowsフォーム関連のDLLなどのUI系DLLが含まれています。
なお、.NET Desktop Runtimeを動作させるには.NET Runtimeが必要となります。
しかし、「.NET Desktop Rutimeのインストーラー」には、.NET Runtimeも含まれていて自動的にインストールされるので、「.NET Desktop Runtimeには.NET Runtimeが必要」というのは意識することは少ないでしょう。

.NET 6がいよいよRC1になったようです。

2021/09/14に.NET 6がいよいよRC1になったようです。
github.com
RC=Relase Candidateであり、いわゆるリリース候補版とよばれているものです。
.NET 6 RC1は、"Go Live”となっているので、いよいよ実開発に適用できる品質のものがでてきたということです。

.NET 6のロードマップ

github.com
.NET 6は、2021年11月に一般提供(GA)予定です。
あと2か月ありますので、このまま予定通り一般提供がはじまってくれるといいですね。
11月あたりのMicrosoftの大型イベントには、2021年11月2日~4日に開催される「Ignite 2021」があります。このあたりでGA発表されるのが有力かもですね。
myignite.microsoft.com

なぜ、.NET 6に注目しているのか

.NET Coreは、.NET 5にて.NET Frameworkからの乗り換えがかなり容易になりました。つまり、既存アプリのフレームワーク.NET Frameworkから.NET Core変更し、今後の機能エンハンスの計画に.NET Frameworkでは実現が難しかったな機能などを計画できるようになったということです。
.NET 6はそのような状況での最初のLTS (Long Term Support)が提供されるバージョンとなります。

.NET 6 RC 1を使うには

Visual Stuido 2022 Version 17.0以上が必要です。
visualstudio.microsoft.com
Visual Studio 2022は現在プレビュー 3.1版が提供されています。

Project Reunion改め、Windows App SDK

「Project Reunion」は、簡単に言えばUWP APIをWin32(WPFアプリやWinFormsアプリ)アプリで使用できるようにするものです。
UWP APIなのでWindows 10が前提となり、対応バージョンは(現在サポートされているWindows 10一番古いバージョン(ただしEnterprise LTSC)である Version 1809以降となります。

Project Reunionの名前が変わっていました

2021年6月25日くらいにProject Reunionの名前が「Windows App SDK」に変更になっていました。
現在のバージョンは0.8なので、プレビュー公開されていたProject Reunion 0.8を一般公開するにあたって名称を変更したことになるようです。

Windows App SDKのGA時期は?

Windows App SDKのロードマップを見ると1.0は、2021 Q4となっています。
github.com

Windows App SDKを使ったアプリをWindows 10 Version1809以前で動作させるとどうなる?

例えば、WinUI 3.0などはWindows 10のみをサポートしますが、Project Reunionコンポーネントの一部はWindows 7/8も含めて古いWindows 10バージョンもサポートしています。
とはいえ、Windows 7も基本的にはサポートが終わっていますし、Windows 8/8.1ユーザの大半はWindows 10に移行しているであろうことを考えると、そんなぎりぎりのところを責めるよりも

  • WinUI 3.0を使うならばWindows 10のみサポートと動作OSを限定する
  • Windows 10 Version 1809以降かのバージョンチェックを行い、該当する場合のみProject Reunionで実現した機能を提供する

というような動作環境仕様にした方がよいと思います。

M5Stack Core 2で始めるAzure IoT Hub入門(その4)

前回
hatsune.hatenablog.jp

第4回の今回は、M5Stack Core 2で収集した「気圧」「気温」「湿度」をAzure側もおくるために、まずはAzure側で準備することを紹介します。

Azure IoT Hub について

M5Stack Core 2などのIoTデバイスからのデータ収集を行うとき、次のような仕組みが必要です。

  1. 通信をセキュリティで保護
  2. スケーリング
  3. 正常性を監視
  4. 可用性

具体的な実現方法については、今回は触れませんが、これらの仕組みを考慮しながらクラウド上に独自の収集ロジック用サービスを構築するには、高度な知識が必要になってきます。
オンプレミスなシステムであれば独自の通信路の維持管理なども含めてかなりの規模の開発や運用管理が必要となったでしょう。
しかし、これらの仕組みが含まれたAzure IoT Hubを使うことで、ゼロから設計および構築をしなくても一気に用意することができます。また、運用自体の負荷も利用しているAzure全体の運用の中に組み込むことで、運用負荷が著しく増加するということもありません。


IoT Hubの使用プロトコルについて

Azure IoT Hubは、MQTT (Message Queueing Telemetry Transport)、Http、AMQP (Advanced Message Queuing Protocol)など様々なプロトコルに対応しています。
今回のサンプルでは、「小さい」「大量」のデータを「低遅延」で「双方向」に通信できるMQTTを使います。

Azure IoT Hubを準備するには

Azure IoT Hubを使用するためには、まずは、Azure IoT Hub自体を作成して、そこに接続するデバイスを定義していきます。

Azure IoT Hubを作成する

Azure IoT Hubの作成は、Azure管理ポータルでリソースを作成するだけで簡単にできます。
Azure管理ポータルにサインインしたら、[リソースの作成]で「IoT Hub」を検索し、[作成]をクリックしてリソースを追加します。

プランで無料を選択する

Azure IoT Hubの料金プラン (課金額) は、作成時や作成後に指定できます。無料プランは、IoT Hubでは「F1:Freeレベル」という表記になります。

スケーリングが1だったり、「Defender for IoT」も有効にできなかったりといくつかの制限はありますが、無料プランでも基本的な機能は備えていますので、動作確認や数台を接続して試験するような場合に便利です。

Azure IoT Hubにデバイスを定義する

IoT Hubが作成できたら、その中に「IoTデバイス」を定義します。

[IoTデバイスの追加]をクリックして、「デバイスID」「認証の種類」を選んで、[自動生成キー]にチェックを入れて追加をすれば、IoTデバイスからIoT Hubに接続するための接続文字列が生成されます。

次回は

Azure側の準備が整ったので、次回は、M5Stack Core 5からAzure IoT Hubに「気圧」「気温」「湿度」を送信するためのプログラム(スケッチ)を紹介します。
hatsune.hatenablog.jp

ということで、.NETラボ勉強会2021年8月に登壇してきました。
speakerdeck.com

さらに詳しくAzure IoT Hubを学ぶには

Azure IoT Hubを学ぶ一番の近道は実際に使ってみることです。1日8000メッセージ(IoTデバイス1台だけ接続するならデータ送信間隔は約12秒)という上限はありますが、IoT Hubには無料プランもあるので課金を気にせず試せます。
また、もっと系統的に学びたいということであれば、Microsoft Learnもお勧めします。
docs.microsoft.com
docs.microsoft.com
docs.microsoft.com

資格を取得する

docs.microsoft.com
docs.microsoft.com

iOSアプリでMulticast Networkingを許可する方法

iOS14以降 & XCode 12以降では、ローカルネットワークへの通信にユーザの許可が必要になりました。
そして、マルチキャスト/ブロードキャストで他の機器と通信をするためには、Appleへの申請やentitlementsへの追記など色々必要になっています。

ローカルネットワーク通信の許可

Info.plistに対して、「Privacy - Local Network Usage Description」を追加してローカルネットワーク上の別デバイスとの通信を行うときに許可ダイアログが表示されるようにします。
ただし、Xamarinの場合、2021/07/19現在の最新版では「Privacy - Local Network Usage Description」が選択肢の中にでてきません。
f:id:hatsune_a:20210719200453p:plain
そこで、直接Info.plistファイルを編集して「NSLocalNetworkUsageDescription」を追加します。
f:id:hatsune_a:20210719200741p:plain

マルチキャスト/ブロードキャストで他の機器と通信を許可

Multicast Networking Entitlement申請

Bonjourでサービスを検索するときには不要ですが、それ以外でマルチキャストやブロードキャストをするときには、Appleに「Multicast Networking Entitlement申請」を行う必要があります。
申請方法は下記のURLに開発者アカウントでサインインして申請します。申請してから3~5営業日くらいで「Multicast Networking Entitlement」を取得できます。
https://developer.apple.com/contact/request/networking-multicast
申請時の注意するのは、「Explain why your app needs to send multicast or broadcast traffic, or browse for all Bonjour service types.」という項目の内容です。ここには、次のような内容が含まれていないと、追加情報を要求されて余計に日数がかかります。

  • Multicastなのかbroadcastなのか
  • なんの目的で通信するのか
  • 通信するIPアドレスやポート番号
  • 通信するデータ(例えば、JSON形式で端末で計測したデータなど)
Capabilitiesの追加

「Multicast Networking Entitlement」が取得できたとの連絡メールがAppleからくると、Apple Developer Programのサイトの「Identifiers」にて、Multicast NetworkingのCapabilitiesをEnableにできます。
f:id:hatsune_a:20210719203739p:plain
Enableにチェックをつけて[Save]をクリックすると確認ダイアログが出るので[Confirm]をクリックします。
f:id:hatsune_a:20210719203837p:plain

プロビジョニングプロファイルの再作成

Capabilitiesの追加確認のダイアログには「機能を追加または削除すると、このアプリIDを含むプロビジョニングプロファイルが無効になり、今後使用するためには再生成する必要があります。」と記載があるのでプロビジョニングプロファイルの再作成が必要です。
f:id:hatsune_a:20210719204227p:plain

Entitlements.plsitでエンタイトルメントを有効にする

f:id:hatsune_a:20210719205003p:plain
アプリの.entitlementsファイルに、ブール値が true のcom.apple.developer.networking.multicastエントリを追加します。

実機に転送して動作を確認する

Multicast Networkingを許可する設定がない場合でも実機でなければ影響をうけません。
実機でデバッグ実行をしてマルチキャスト通信でエラーにならないことを確認できれば、設定は終了です。

iOSアプリ作成に必要な証明書についてまとめてみた

.NET 6やMAUIなど、今年、MicrosoftがGA(一般公開)する技術では、マルチプラットフォームのXamarin.Formsよりも更に促進されることが期待されるものが多いと感じています。

そこで、じゃあC#を使ってAndroidiOSのアプリを作成しようと思ったときに、意外にネックになるのが、iOSアプリを作成するときに必要な証明書の作成です。
しかも本番用証明書の期限は1年なので、私だけなのかもしれませんが、毎年どうやったのか思い出しながら不安になりつつ作業しています。
そこで、心理的安全が欲しいということもあり、ちょっとこの辺りを自分の言葉でまとめておきたいと思います。
この分野は専門外なので、何かおかしな記述があればご指摘いただき、随時、本文に反映させていくという若干他力本願な内容となりますが、最後までお付き合いいただければ幸いです。

登場人物

  • Apple Developer Program
  • MacOS上で作成する証明書(便宜上、アカウント証明書とします)
  • Apple Development 証明書(または、iOS App Development証明書)
  • Apple Distribution 証明書(または、iOS Distribution証明書)

証明書を発行しよう

Apple Developer Programの登録/更新

iOSアプリを開発してストアで公開してとなると、Apple Developer Programに加入する必要があります。
アプリ作成するだけなら加入必須ではないという話もあるようですが、そこについては今回は触れません。
developer.apple.com
Apple Developer Programの年間メンバーシップの料金は11,800円です。iOSなどのベータ版も入手できたり、様々な情報も得られますから、実際にストアに登録する作業を別部署でやり開発する人が直接できないようなジャパニーズトラディショナルカンパニーさんだったとしても、開発している部署でも(会社のお金で)登録しておくとよいと思います。

アカウントについて

ここで重要なのは、登録するときに記入するメールアドレスです。これが、今後の様々なところで「アカウント」として一意に識別されるための情報となります。

Team IDについて

メンバーシップに登録されるとTeam IDというものが払い出されます。このIDも重要で、要はアプリの発行元IDのようなものになります。
後々作成する証明書について、どの証明書かわからなくなったらこのTeam IDを他よりに判断することになります。

年間メンバーシップの更新について

なお、年間なので1年後にはメンバーシップの更新が必要になります。近づいてくるとメールで「そろそろ期限がきれますよ」とお知らせが飛んでくる新設設計なので、メール無視せずに期限切れになるまえにちゃんと更新しておくようにしましょう。
忘れない!絶対!

アカウント証明書の作成

Apple Developer Programの登録がおわったら、Macでの作業となります。

認証局に証明書を要求

f:id:hatsune_a:20210616190711p:plain
[キーチェーンアクセス]-[証明書アシスタント]-[認証局に証明書を要求]メニューをクリックします。

f:id:hatsune_a:20210616191257p:plain

  • [ユーザーのメールアドレス]欄には、メンバーシップのアカウントに指定したメールアドレスを指定
  • [通称]欄には任意の名前を指定
  • [ディスクに保存]を選択
  • [鍵ペア情報を指定]チェックにチェック

[続ける]ボタンをクリックしてから、次のように設定されていることを確認します。

デスクトップを指定して[保存]ボタンをクリックすれば、これで、Apple Developer Programのアカウントに紐付いたアカウント証明書が作成できました。
この証明書の有効期限も、作成してから1年間となります。また、作成するときには有効な年間メンバーシップの契約が必要です。
そのため、年間メンバーシップを更新したら、アカウント証明書も再作成しておくとよいでしょう。

Apple Development 証明書の発行

アカウント証明書が作成できたならば、Apple Developer Programのサイトにいって作業します。
事前に登録したアカウントでサインイン
「Certificate, Identifiers & Profiles」のページに移動します。
f:id:hatsune_a:20210616085707p:plain

新しいApple Development 証明書の発行

Certificatesの後ろの[+]を押して、新しい証明書を発行します。
f:id:hatsune_a:20210616091338p:plain
開発用のApple Development証明書ならば、「Apple Development」を指定します。

Apple DevelopmentとiOS App Developmentの違い

XCode 11以降はApple Developmentを指定します。
それより以前のものはiOS App Developmentを指定しますが、古いXCodeを積極的に使う理由はないので、実質「Apple Development」一択です。

Maximum number of certificates generated について

「Maximum number of certificates generated」とでているのは、すでに発行しているApple Development 証明書に紐付いている「Provisioning Profile (Development)」で有効期限切れのものがあるからです。

アカウント証明書をアップロードする

f:id:hatsune_a:20210616093534p:plain
Macで作成したアカウント証明書を選択します。
これでApple Development 証明書が作成できました。
Certificatesの一覧には、Apple Developer Programのアカウント名=メンバーシップの「Account Holder」が証明書名として表示されます。

Apple Development 証明書をMacにダウンロードする

Apple Development 証明書が作成できたので、Macにダウンロードしておきましょう。

Apple Distribution 証明書の発行

アカウント証明書が作成できたならば、Apple Developer Programのサイトにいって作業します。
事前に登録したアカウントでサインイン
「Certificate, Identifiers & Profiles」のページに移動します。
f:id:hatsune_a:20210616085707p:plain

新しいApple Distribution証明書の発行

Certificatesの後ろの[+]を押して、新しい証明書を発行します。
f:id:hatsune_a:20210616094512p:plain
発行用の証明書が必要なので、「Apple Distribution」を指定します。

Apple DistributionとiOS Distributionの違い

XCode 11以降はApple Distributionを指定します。
それより以前のものはiOS Distributionを指定しますが、古いXCodeを積極的に使う理由はないので、実質「Apple Distribution」一択です。

Apple Distribution証明書の発行上限数について

Apple Distribution証明書は、合計で3つ作成できます。
Apple Distribution証明書は、基本的にアプリごとに作成するのではなく、発行者ごと、つまり、Apple Developer Programのメンバーシップごとに1つ作るような運用イメージになります。

アカウント証明書をアップロードする

f:id:hatsune_a:20210616093534p:plain
Macで作成したアカウント証明書を選択します。
これでApple Distribution 証明書が作成できました。
Certificatesの一覧には、メンバーシップの「Team Name」が証明書名として表示されます。

Apple Distribution証明書をMacにダウンロードする

Apple Distribution証明書が作成できたので、Macにダウンロードしておきましょう。

キーチューンに登録する

Apple Develoment証明書と、Apple Distribution 証明書がダウンロードできたら、キーチューンに登録しておきましょう。
登録は簡単で、証明書をダブルクリックすればキーチューンが立ち上がって追加されます。
f:id:hatsune_a:20210616221344p:plain
これで新しい有効期限の証明書がキーチューンアクセスのログイン証明書に登録することができました。
証明書の中の秘密鍵の名前は、アカウント証明書を作成するときに認証局に証明書を要求した時の通称が設定されています。
有効期限の更新で証明書を作成した場合は、この時点で古い有効期限の証明書は削除しておきましょう。

最後に

来年の年間メンバーシップの更新時に新しい証明書を作成するときや、開発機を変更するときなども、きっと、このエントリ見ながらやると思います。忘備録大切!