noxi雑記

.NET、Angularまわりの小ネタブログ

Azure Extensions Librariesを使ってAzure接続クライアントを管理する

はじめに

ここ最近(最近。。?)、 .NET から StorageAccount などの Azure リソースへ接続するための NuGet ライブラリ群が Azure.* に変更されています。ライブラリの使い方自体は Microsoft のドキュメントを眺めれば良いのですが、各接続クライアントの管理に利用できるライブラリ Microsoft.Extensions.Azure に関するドキュメントが全然見当たりません。 Microsoft.Extensions.Azure は Azure 接続クライアントと Microsoft Extensions の DI 、 Configuration 機能を統合して利用するためのライブラリです。この記事では Microsoft.Extensions.Azure の機能を利用して BlobStorage に接続します。

www.nuget.org

github.com

続きを読む

Angular CDK Overlay でポップアップ Directive を実装する

だいぶ昔の記事で Angular CDK の Overlay モジュールの使い方を解説しました 1 2 3
今回は標準機能では実装できない簡易ポップアップを表示する Directive を実装してみるメモです。

続きを読む

とても古いAndroidアプリを更新してみた話

はじめに

遙か太古の時代、 Eclipse 全盛期時代に作られた古い Android アプリを大改修してリリースしてみた話です。

筆者は気象庁ホームページの HTML をパースして天気予報やアメダスの情報を表示する「WeatherNow」というアプリを開発していました。初期リリースは Android のバージョンがまだ 1.6 や 2.1 の時代で、そこそこ思い入れがあるアプリです。特にメンテナンスをしなくても安定して動いていたアプリでしたが、最近気象庁ホームページが大幅にリニューアルされた結果、完全にお亡くなりになりました。

少なくない数の対応を依頼するメールを頂いていたのは気付いていましたが筆者が最近多忙にしていることもあり、全く改修するつもりはありませんでした。しかし仕事に余裕が出始めたこと、最近の Android 事情を肌で感じてみたかったことから、とりあえず直してみるかと重い腰を上げて取りかかりました。

ガンガン Android 開発されている方には不要な内容でしょうが、久しぶりに古いアプリを改修してみようという方がいらっしゃれば、参考になるかも知れません。

余談ですが筆者は普段から JetBrains 系の IDE を愛用しており、また Java 8 や正式リリース前の Kotlin を一通り触った経験があるため、今回の改修に関してかなりアドバンテージがあったことだけは先に記しておきます。なお、後半は息切れしたため内容が雑になってしまっていることを先に記しておきます。

続きを読む

.NET で MSAL トークンを X.509 証明書で取ってみる

この記事は .NET Core 3.1 のデーモンコンソールアプリで MSAL トークンをクライアント ID と X.509 証明書で取得してみた時の作業メモです。
やったこと:

  1. Azure Key Vault で証明書作成
  2. Azure AD アプリ作成
  3. .NET からトークン取得
続きを読む

Xamarin iOSアプリをAzure PipelinesでビルドしてAppCenterに送信する(配布編)

はじめに

Azure Pipelines 使っていますか? 昨今は GitHub Actions に後塵を拝している感が否めませんが、マルチステージを利用した承認機能など、実は結構便利に利用できます。今回は Xamarin.Forms で実装した iOS アプリをビルドするための Azure Pipelines を組んでみます。またビルド結果を AppCenter へ送信し、テスト配布も行います。

全体を一本の記事にするととても長くなってしまうためビルドとテスト配布の2つに分割しました。本記事は後編の配布編です。

ノンビリと書いていたら GitHub Actions にも承認処理が来てしまったような気がしますが、気にしたら負けです。

環境

今回試したものはこちらに置いてあります。

github.com

ビルドYAML全体

前編の記事でビルドした Xamarin iOS アプリを AppCenter へ送信する Pipeline YAML は全体でこのようになります。実際にはビルドと配布のマルチステージ構成となっていますので、 GitHub 上の YAML をご参照下さい。

variables:
  AppCenterAppSlug: 'AppCenterの識別名 "チーム名/アプリ名" '

pool:
  vmImage: 'ubuntu-latest' # 何でも良い

steps:

  # Pipeline Artifacts をダウンロード
  - download: current

  # AppCenter へビルドしたアプリを配信
  - task: AppCenterDistribute@3
    displayName: 'Distribute to AppCenter'
    inputs:
      serverEndpoint: 'AppCenterConnection'
      appSlug: '$(AppCenterAppSlug)'
      appFile: '$(Pipeline.Workspace)/drop/SampleApp.iOS.ipa'
      releaseNotesOption: 'input'
      releaseNotesInput: '$(Build.SourceVersionMessage)'
      destinationType: 'groups'
      isSilent: false

Azure Pipeline Tasks

download

downloadDownload Pipeline Artifact タスクのショートカットです。ドキュメントに記載の通りこのショートカットを使用すると $(Pipeline.Workspace)/ に Pipeline Artifacts がダウンロードされます。デプロイ系のジョブであれば自動で Pipeline Artifacts を持ってきてくれる気がしますが普通のジョブでは手動の点、注意が必要です。

docs.microsoft.com

AppCenterDistribute@3

ビルドで生成された *.ipa ファイルを AppCenter で配布するために AppCenter へと送信するタスクです。このタスクを使用するには AppCenter から取得したトークンを元に ServiceConnection を作成することが必須となります。また AppCenter のアプリ登録を {userName}/{appName} の形式で appSlug に設定します。先行タスクで Pipeline Artifacts から ipa ファイルをダウンロードしているので、 appFile にはダウンロードしたファイルのパスを指定します。
そしてちょっと面倒臭いことに AppCenter に登録するリリースノート情報が必須です。リリースノートの指定は releaseNotesOptionreleaseNotesInput または releaseNotesFile を使用します。サンプルではビルド対象のコミットのコミットメッセージが格納されている Azure Pipelines の Build.SourceVersionMessage 環境変数を固定で指定しています。

docs.microsoft.com

task: AppCenterDistribute@3
inputs:
  serverEndpoint: 'AppCenterConnection'
  appSlug: '$(AppCenterAppSlug)'
  appFile: '$(Pipeline.Workspace)/drop/SampleApp.iOS.ipa'
  releaseNotesOption: 'input'
  releaseNotesInput: '$(Build.SourceVersionMessage)'
  destinationType: 'groups'
  isSilent: false

AppCenter ServiceConnection

続いて AppCenter へ送信するために必要な ServiceConnection の登録方法です。まずはプロジェクトの設定画面から ServiceConnection を選択して新規作成を行います。種別は Visual Studio App Center を選択します。選択した後の設定値は表を参考にして下さい。

設定名 設定値
Server URL (元の値から変更しない)
API Token AppCenter の設定画面から FullAccess スコープで出力したトークンキー
Service connection name AppCenterDistribute タスクの serverEndpoint に指定する名前
Description お好みで