Macでココアを使ってファイルアイコンオーバーレイ(アイコンバッジ)(DropboxがMacで行うように)を行うための解決策を探しています。
誰かがこれを行う方法を知っていますか?
Xcodeのドキュメントを検索し、古いカーボンコードの一種であるscppluginsのソースコードを調べました。
Macでココアを使ってファイルアイコンオーバーレイ(アイコンバッジ)(DropboxがMacで行うように)を行うための解決策を探しています。
誰かがこれを行う方法を知っていますか?
Xcodeのドキュメントを検索し、古いカーボンコードの一種であるscppluginsのソースコードを調べました。
Finder が Snow Leopard で作り直されたため、古い Carbon メソッドは機能しなくなります。Finder でアイコンにバッジを付けることができるようにするために取ったルートには、Finder に挿入する必要があるカスタム バンドルを作成することが含まれます。
Wolf Rentzsch の mach_inject (https://github.com/rentzsch/mach_star/tree/master/mach_inject) を調べて、Cocoa アプリケーションにカスタム バンドルを挿入できるようにします。
class-dump を使用して、Cocoa アプリケーション (Snow Leopard や Lion の Finder など) のヘッダー ファイルを調べて、独自のバンドルで何をオーバーライドする必要があるかを把握できます。
私はこれが古い質問であることを知っています。
最近、この機能を実装するライブラリがあります: https://github.com/liferay/liferay-nativity。
NSDockTileこれを非常に簡単にします:
NSDockTile *dockTile = [NSApp dockTile];
[dockTile setBadgeLabel:@"33"];
次の 2 つの方法を使用して、フォルダ/ファイルにアイコンを重ねることができます。
NSWorkspaceMac OS X でファイルまたはフォルダーのアイコンを変更する場合は、-setIcon:forFile:options: メソッドを使用できます。
ただし、このメソッドを使用してアイコン オーバーレイを適用すると、そのファイル/フォルダーを外部に移動してもオーバーレイが終了します。 . これは正確な解決策ではない可能性があります。
代わりに、アプリ内で Finder 同期拡張機能ターゲット (ファイル - 新規 - ターゲット - Finder 同期拡張機能) を使用します。
拡張機能を作成すると、アプリケーションはこのターゲットと直接通信できなくなります。アクティブ化するには、AppleScript コマンドを使用します (これに代わるより良い方法はないと思います)。
有効にするために
NSString *pluginPath = [[[NSBundle mainBundle] builtInPlugInsPath] stringByAppendingPathComponent:@"yourextension.appex"];
NSString *pluginkitString = [NSString stringWithFormat:@"pluginkit -e use -a \"%@\"", pluginPath];
system([pluginkitString cStringUsingEncoding:NSUTF8StringEncoding]);
ターゲットがアクティブ化されると、アプリケーションがその拡張機能と通信できる方法がいくつかあります。それらのいくつかは次のとおりです。
を使用してNSDistributedNotificationCenterいます。このクラスは、他のタスクのオブジェクトに通知を送信する方法を提供します (ここの拡張機能など)。
他の方法は使用することです:
[[NSUserDefaults alloc] initWithSuiteName:@"teamid.com.company.test"];
アプリケーションとターゲットの両方に共通のグループ識別子 (つまり、「teamid.com.company.test」) が必要です。
これを行うには、Target - Capabilities - App Groups で "App Groups" を有効にし、上記のような識別子 (例: "teamid.com.company.test") を指定します。teamid は、Apple 開発者ポータルから取得する ID です。Extension ターゲットに対しても同じ手順を実行します。
結論を出す前に、拡張機能が有効になっているかどうかを確認してください。それを確認するには、[システム設定] - [拡張機能] - [アプリ ファインダー] に移動します。これは、ユーザーがアプリケーションのアイコン オーバーレイを有効/無効にできるグローバル ポイントです。