macOS アプリ削除 で残ってしまうゴミ保存データ削除

macOS アプリ削除 で残ってしまうゴミ保存データ削除

macOS上の、 アプリを削除しても 次に同じアプリをインストールした場合 保存されたデータが 残っていて 以前の設定でアプリが使えてしまうことがあります。

これは、 アプリが macOS内に 何かデータを書き込んでいることになります

その一つが、 UserDefaults です。

この機能を使えば、 アプリのプログラム内部で 簡単にデータ保存利用できます。

アプリの UserDefaults データを 削除する方法です。

UserDefaultsの保存場所

各ユーザーカレントの中に、 「Library」という アプリのデータを保存するフォルダが隠されています。 この「Library」はターミナルから確認することが可能です。

open ~/Library
open ~/Library

上記コマンドで Finderの[ライブラリ]が 開きます。

Finder ライブラリ

その中に [Preferences]フォルダがあり、 そのフォルダを開くと アプリで保存したplistがあります。

[Preferences]フォルダ
[Preferences]フォルダ

たくさんの plistが入っています。 その中から要らないアプリ名を探します。

そのままゴミ箱ではなく、ターミナルから下記のコマンドを実行し削除します。

ターミナルから defaultsコマンドで 保存情報削除

defaults delete com.xxxxxxx

上記で削除する場合 plist拡張子は なしです

これで アプリの UserDefaultsは削除できました。

削除せず確認だけ行う場合は、ターミナルから 下記のコマンドを実行します。

defaults read com.xxxxxxx

このコマンドで、保存内容を確認することもできます。

Swift ジェネリクス型で switch判定

Swift ジェネリクス型switch判定

Swiftジェネリクス型という言い方が正しいのか? とも思ったが

公式に Genericsと書いていたので 従うことにします。

下↓のコード の引数obj :Tの型でswitchする コード例です。

struct A: Codable{ var a: String}
struct B: Codable{ var b: String}

func test<T>(_ obj: T) -> String{
	switch type(of:obj) {
	case is String.Type:
		return obj as! String
	case is Int.Type:
		return String( obj as! Int )
	case is A.Type:
		let anser:String = (obj as! A).a
		return anser
	case is B.Type:
		let anser:String = (obj as! B).b
		return anser
	default:
		return ""
	}
}
    
var resultStr = ""
resultStr = test(Int(123))
resultStr = test("abc")
resultStr = test(A(a: "Codable A"))
resultStr = test(B(b: "Codable B"))
print(resultStr)

test<T>()というファンクションで 引数obj が Stringか Intもしくは struct AかBかをswitch判定しています。