Xcodeを最新にアップグレードする

事前準備

念のためXcodeを終了しておきます。
(このときはXamarin.iOSのために更新したかったので、Visual Studio for Macも念のため終了しておきました。)

Xcodeのアップデート

AppStoreを開き、「アップデート」タブを選択します。

更新がある場合はXcodeの行が追加され「アップデート」のボタンが表示されます。

「アップデートボタン」をクリックするとアップデートが開始されます。

このとき、完了するまで放置する場合は、念のためディスク等がスリープ状態にならないように設定を調整しておきます。
システム環境設定>省エネルギー

ディスプレイがオフのときにコンピュータを自動でスリープさせない」のチェックをオン。
可能な場合はハードディスクをスリープさせる」のチェックをオフ。

経験上、アップデート失敗の原因になっていそうな感じでした(´・ω・`;)。スリープに入ったら何度も失敗したので関係あるかなと…

2023.8.15追記

MacOS 13.4(Ventura)で確認しました。

ディスプレイがオフのときに自動でスリープさせない
環境設定>ディスプレイ>詳細設定>

ディスプレイがオフのときに自動でスリープさせない

可能な場合はハードディスクをスリープさせる
SSDにはスリープの設定はないそうです。

アップデート処理完了後

アップデートが完了したら、環境設定を変更していた場合は元に戻します。

アップデートを適用させるためにはXcodeを一度起動する必要があります。起動したタイミングでアップデートを適用するかの確認メッセージが表示されます。
「Install」を選択すると、更新用のコンポーネントがインストールされます。

このとき、終了しておく必要があるアプリケーションが起動されている場合は以下のメッセージが表示されます。
「Quit All」を選択するとリストの全てのアプリを自動で終了します。作業途中等で手動で終了させる場合は、「Cancel」を選択して、リストの全てのアプリを終了させてから、再度追加コンポーネントインストールを行います。

インストールが開始すると、システムへの変更のためパスワードを求められますので入力して許可します。

インストールが完了したらXcodeが起動します。Xcode>About Xcodeから開いてバージョンが更新されたか確認します。

以上でXcodeのアップグレードは完了です。
「システム環境設定>省エネルギー」の設定を変更していた場合は元に戻してください。

ソース管理から取得したソリューションがビルドできないとき(NuGetパッケージの復元の有効化)

NuGetパッケージが足りないエラーメッセージが出て、ASP.NET MVCで作成されたプロジェクトをソース管理から取得したがビルドできないとき、「NuGetパッケージの復元の有効化」をするとうまくいったことについてです。

ASP.NET プロジェクトとNuGet

NuGetパッケージとソース管理について、以下の記事でだいぶ理解できました。ありがたい…

ASP.NET でソース管理システムへの NuGet パッケージのコミットを不要とする – THE TRUTH IS OUT THERE
https://blogs.msdn.microsoft.com/chack/2013/02/07/asp-net-nuget/

上記記事で関係あったことをまとめると、
ASP.NET プロジェクトを構成するライブラリ群の多くが NuGet 経由でプロジェクトに追加される
ASP.NET プロジェクトをTFS や Git などのソースコード バージョン管理システムなどで管理する場合、NuGet パッケージについてはコミットしない
・ ビルド時に不足している NuGet パッケージは、自動でダウンロードする
・ この機能によりソース管理システムのリポジトリの肥大化を軽減できる

Xamarinで「プロジェクト ○○ は開始前に配置する必要があります」というエラー

環境:
Windows10
Visual Studio 2017

Xamarinのサンプルプロジェクとをビルドしようとしたら「プロジェクト XamarinCRM.Android は開始前に配置する必要があります」というエラーメッセージが出ました。
配置する設定へと変更すればOKです。

f:id:mocotanus:20181102154509p:plain

ビルド>構成マネージャー f:id:mocotanus:20181102154525p:plain

必要なプロジェクトにチェックを入れます。 f:id:mocotanus:20181102154542p:plain

C#の正規表現で全てが数字かどうか調べる

.NET Framework 4.5で確認

全てが数字かどうかを調べるには。。「^[0-9]+$」か「^[\d]+$」を使います。

「全てが○か」のパターン

^[○]+$
の「○」のところに条件を入れれば色々な表現ができます。今回の場合は「○」に「数字のみ」を記述すればいいわけです。

0〜9の数字を表すには

[0-9]を使うなら

「^[0-9]+$」と書ける。
「[0-9]」は半角の0〜9の数字のいずれかで一致する。

\dを使うなら

「^[\d]+$」と書ける。
.NET Frameworkには「文字クラス」と呼ばれるものがあって、それを使うと検索したいパターンを少ない文字で表現できる。
10 進数字と一致するかを判定するには「\d」を使う。
全角半角の0〜9の数字のいずれかで一致する。

「文字クラス」については↓
正規表現言語 - クイック リファレンス | Microsoft Docs

以下のページに「ECMAScript 準拠の動作が指定された場合、\d は [0-9] と同じになります。」とあったのが気になる。。
正規表現での文字クラス>10 進数字: \d
正規表現での文字クラス | Microsoft Docs

試しに確認した環境だと、何も指定せずに「 \d 」を使ってみて全角半角両方一致した。環境によって全角のほうは一致しない扱いになる?

サンプルコード

var words = new List<string>()
{
    "12",// 半角数字のみ
    "12",// 全角数字のみ
    "34",// 半角と全角(全角半角を区別しない)
    "A",// アルファベット
    "あ",// ひらがな
    "一",// 漢数字
};

foreach (var w in words)
{
    // 開始文字と終了文字を-(ハイフン)でつなぐと、ユニコードで範囲を指定できる
    if (System.Text.RegularExpressions.Regex.IsMatch(w, @"^[0-9]+$"))
    {
        // 全て数字(半角)
        // "12"
    }
    
    // 「文字クラス」を使う場合
    if (System.Text.RegularExpressions.Regex.IsMatch(w, @"^[\d]+$"))
    {
        // 全て数字(半角、全角)
        // "12""12""34"
    }
}