アプリ上のリンクから、ローカルのHTMLを開くようにしたい

アプリ上のリンクから、ローカルのHTMLを開くようにしたい

  • HTMLファイルはアプリ内部にもたせる
  • macOS アプリ
  • ObjectiveC / Xcode11

こんな感じのリンク

  • 開く処理は、通常のボタンクリックで開くかたち
  • 見た目はテキストボックスっぽく変更( Interface Builder で少しいじった)
  • リンクっぽい見た目はNSMutableAttributedString でNSLinkAttributeName をつかった
- (void)viewDidLoad {
    [super viewDidLoad];

//  見た目用にNSMutableAttributedStringのNSLinkAttributeName を使う
    NSMutableAttributedString *attrStr = [[NSMutableAttributedString new] initWithString:@"リンクをブラウザで開く"];
    [attrStr addAttribute:NSLinkAttributeName value:@"Dummy" range:NSMakeRange(0,[attrStr length])];

    [self.openLinkButton setAttributedTitle:attrStr];
}

- (IBAction)pushLinkButton:(id)sender {

// 実際に開く処理はボタン押下で実施
    NSBundle *bundle = [NSBundle mainBundle];
    NSString *path = [bundle pathForResource:@"Docs/index" ofType:@"html"];
    NSURL *localHTMLUrl = [[NSURL alloc] initFileURLWithPath:path isDirectory:false];

    [NSWorkspace.sharedWorkspace openURL:localHTMLUrl];
}

●最初はNSMutableAttributedString のみで実現したかった

やり方がわからなかった。

NSURLで file://... を設定すると、ファイルのある場所が開かれてしまった…。(ブラウザで開いてほしい)

見た目のために NSMutableAttributedString 処理は残した

●ローカルファイルを階層を維持した状態で含めたい

含めたいフォルダ/ファイルをプロジェクトに追加する際、Create groups ではなく、Create folder references を選択して追加する

参考:

stackoverflow.com

Microsoft Store アプリの証明書の更新

メモ:

ひさしぶりに Microsoft Store アプリを更新した。

証明書の有効期限が切れていた。

Visual Studio マニフェスト デザイナーで アプリの紐づけし直すだけ・・・だと思っていたが、うまくいかなかった。

アプリケーション パッケージに署名する証明書が見つかりません 的なメッセージが出てしまう。

  1. アプリの紐づけし直し
  2. アプリケーションパッケージを別途追加 してみる
  3. 自己署名証明書 を作成してみる

などなどを何度かしていたら、有効な証明書が作成されて選択できるようになった。

何が影響したのか不明・・・。

f:id:kawaishi2:20220405194949p:plainf:id:kawaishi2:20220405194944p:plainf:id:kawaishi2:20220405194947p:plain

MahApps.Metro の DropDownButton でのエラー

メモ:

WPFプロジェクトで、MahApps.Metro の DropDownButton使っていたら実行時エラーが出た。(動作は問題ない?)

System.Windows.Data Error: 4 : Cannot find source for binding with reference 'RelativeSource FindAncestor, AncestorType='System.Windows.Controls.ItemsControl', AncestorLevel='1''. BindingExpression:Path=HorizontalContentAlignment; DataItem=null; target element is 'MenuItem' (Name=''); target property is 'HorizontalContentAlignment' (type 'HorizontalAlignment')
System.Windows.Data Error: 4 : Cannot find source for binding with reference 'RelativeSource FindAncestor, AncestorType='System.Windows.Controls.ItemsControl', AncestorLevel='1''. BindingExpression:Path=VerticalContentAlignment; DataItem=null; target element is 'MenuItem' (Name=''); target property is 'VerticalContentAlignment' (type 'VerticalAlignment')

MahApps というよりWPF関連の既知の動作っぽい。

MenuItemを対象に Style設定をして回避。

<mah:DropDownButton>

    <mah:DropDownButton.ItemContainerStyle>
        <Style BasedOn="{StaticResource {x:Type MenuItem}}" TargetType="{x:Type MenuItem}">
            <Setter Property="HorizontalContentAlignment" Value="Left" />
            <Setter Property="VerticalContentAlignment" Value="Center" />
        </Style>
    </mah:DropDownButton.ItemContainerStyle>

</mah:DropDownButton>

参考:

tawamuredays.blog.fc2.com

MahApps:ToggleSwitch で 一部の色を変更

メモ:

状況

mahapps の ToggleSwitch を使っていたら、ONの時の表示がおかしくなってしまった。

MahApps.Metro - ToggleSwitch

実態はあるが、白くなって見えなくなっている。

f:id:kawaishi2:20220302122609p:plain

最初はきちんと表示されていたから、別で変なコードを書いた影響だと思う(が、分からん)。

回避

これ ↓ を参考に色を設定

github.com

ToggleSwitch に背景色を設定

f:id:kawaishi2:20220302122609p:plain

// 元:
<mah:ToggleSwitch IsOn="True" />
<mah:ToggleSwitch IsOn="False" />

↓↓↓↓

f:id:kawaishi2:20220302123156p:plain

 <mah:ToggleSwitch IsOn="True">

    <mah:ToggleSwitch.Resources>
        <SolidColorBrush x:Key="MahApps.Brushes.ToggleSwitch.FillOn" Color="{StaticResource MahApps.Colors.Accent}" />
    </mah:ToggleSwitch.Resources>

    </mah:ToggleSwitch>

<mah:ToggleSwitch IsOn="False" />

Microsoft Developer Day 視聴メモ BS15

Microsoft Developer Day 視聴メモ BS15

.NET アップグレード アシスタントで簡単にできます! .NET Framework アプリの .NET 6 へのマイグレーション BS15

視聴メモ:

導入

  • 移行計画をステークホルダーと共有
  • 知見が無い段階だと、移行計画は困難

  • ツールを活用して移行計画や手順を作成

手順と問題点

  • 移行計画(調査/作業のリストアップ/作業量の見積もり)
  • 移行実施(コード修正)
  • テスト

  • 問題点:移行計画の段階では精度が低い > ツール活用しよう

ツール活用

  • Net portability analyzer

    • まだ .net5 まで(これでも ほぼカバーできる)
      • ほどなく .net6 対応される?
  • NET Upgrade Assistant

    • 変換
  • 上記以外は手作業

手順

  1. Net portability analyzer で確認
  2. .NET Upgrade Assistant で変換
  3. 移行計画作成
  4. 移行実施
  5. テスト

Windows Form 移行デモ

  • NET Upgrade Assistant ステップごと

end

Microsoft Developer Day 視聴メモ BS4

Microsoft Developer Day 視聴メモ BS4

時は来たれり。今こそ .NET 6 へ移行する時 BS4

視聴メモ:

事前

PackageReference 形式

  • package.config → プロジェクトファイル
  • 推移的な依存を削除(依存の依存の・・・)
  • package.config → PackageReference は 右クリックから可能

SDKスタイル

依存先の調査

  • Nuget/プロジェクト参照/非Nugetパッケージ

  • Nuget

    • .NetStandard or .NetCoreの依存があれば (たぶん).Net6で稼働
    • ライブラリの破壊的変更のエラーは厄介なことが多い
    • .Net6移行とライブラリ移行の混在は厄介
  • プロジェクト参照

    • 移行不要の可能性あり→互換モード
    • .Net standard2.0 として参照
  • 非Nugetパッケージ(DLLのみ)

    • 開発元に聞く
    • .Net portability analyzer で解析
    • 分からなかった場合は、別を検討
    • .Net portability analyzer 使用例
      • 現状:.net5への移行をチェックしてくれる

移行

.Net6への移行

  • プロジェクトの変更は簡易

依存先のアップグレード

  • Nugetをあげる&エラー修正
  • API(エラー)への対応
  • Visual Studioであれば警告出る
  • 使用てきないAPI/例外をスローするAPI → 再実装
  • 挙動が違うAPI → 修正

移行ツール

  • .NET Upgrade Assistant
  • Xamarin 今後対応予定がある
  • ここまで紹介してきたものを、ほぼ全て対応してくれる
  • 各処理を個別にスキップも可能
  • Nugetの更新は、使用しない(スキップ)がおすすめ。他のエラーと混ざると厄介(司会意見)

フレームワーク別に説明

WindowsForm/WPF

  • Windows互換性パッケージ参照を追加

ASP.NET Core MVC

  • ASP.NET Core MVC2.2 に一旦 移行する。(2.2 は互換性高い。手動移行)
  • Upgrade Assistantで、 Core2.2へ
  • 手動でcore3.1 に
  • Upgrade Assistantで 最終形に

Xamarin Forms

  • 2022-Q2 まで待って

Xamarin ネイティブ

  • Vsプレビューならテンプレートがある(司会:たぶんこれかな?)

ASP.Net WEB Form

  • Blazor への移行が推奨
  • Blazor Server がおすすめ(ASP.Net WEB Form と相性良い)
  • Blazor用のWEBFormの移植(OSS)がある

WCF

  • gRPC への移行(司会おすすめ)
  • CoreWCFへの移行

end