Xcodeの古いシミュレータを削除して空き容量を増やす

Xcodeの古いシミュレータを削除して、macOSの空き容量を増やす方法です。

次のコマンドを実行すると、unavailableの古いiOSシミュレータを削除できます。

xcrun simctl delete unavailable

不要なiOSシミュレータが削除され、空き容量が増えます。

Xamarin.MacでSystem.Drawingを使う

Xamarin.Macでプロジェクトのターゲットフレームワークに「Xamarin.Mac Modern」を選択していると、System.Drawingを使用できません。

System.Drawingの代わりに「ZKWeb.System.Drawing」を使用できます。

ZKWeb.System.Drawingは、クラス名はSystem.Drawingと同じですが、パッケージ名はSystem.DrawingCoreになります。

導入方法

プロジェクトのターゲットフレームワークは「Xamarin.Mac Modern」を選択します。

メニューから「プロジェクト」-「NuGetパッケージの追加」を選択し、「ZKWeb.System.Drawing」をインストールします。

使用例

サンプルアプリケーションでは、NSImageで楕円を描画し、Bitmapファイルに保存します。

var image = new NSImage(new CGSize(300, 100));
image.LockFocus();
var path = NSBezierPath.FromOvalInRect(new CGRect(new CGPoint(0, 0), new CGSize(300, 100)));
NSColor.Red.Set();
path.Fill();
image.UnlockFocus();

var bmprep = new NSBitmapImageRep(image.CGImage);
var data = bmprep.RepresentationUsingTypeProperties(NSBitmapImageFileType.Bmp);
var bitmap = new Bitmap(data.AsStream());

var folder = Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory);
var filename = System.IO.Path.Combine(folder, "test.bmp");
bitmap.Save(filename);

Xcodeのアップデートが待機中から進まないときの対策

App StoreでXcodeのアップデートが待機中になったまま進みません。
困った。

調べてみたところ、一度、Xcodeを削除すると良いらしいことがわかったので、 試しにXcodeを削除しました。
そうすると、新しいバージョンをインストールすることができました。

参考になれば。

Xamarin.MacでMacOSのバージョンを調べるには

OSのバージョンによって使用するAPIを変えたいとき、OSのバージョンを確認する必要があります。

MacOSのバージョンを確認する方法を紹介します。

MacOSのバージョンを取得する

/// <summary>
/// MacOSのバージョンを取得します
/// </summary>
private static string GetVersion()
{
    var version = NSProcessInfo.ProcessInfo.OperatingSystemVersion;
    StringBuilder sb = new StringBuilder();
    sb.AppendLine($"Major: {version.Major}");
    sb.AppendLine($"Minor: {version.Minor}");
    sb.AppendLine($"PatchVersion: {version.PatchVersion}");
    return sb.ToString();
}

MacOSのバージョンが指定バージョンより新しいか

/// <summary>
/// MacOSのバージョンが指定バージョンより新しければtrue
/// </summary>
private static bool IsLaterVersion(int major, int minor, int patchVersion)
{
    var version = new NSOperatingSystemVersion(major, minor, patchVersion);
    return NSProcessInfo.ProcessInfo.IsOperatingSystemAtLeastVersion(version);
}

サンプルアプリケーション

こちらからサンプルアプリケーションをダウンロードできます。