2011-12-08 13 views
4

私はMac上のココアを使ってファイルアイコンのオーバーレイ(アイコンのバッジ)(DropboxのようなMac)を検索します。 誰かがこれを行う方法を知っていますか? 私はXcodeのドキュメントを検索しましたが、私はscppluginsの古い炭素コードのようなソースコードを調べています。任意のヘルプmac osx>上のファインダーファイルのアイコンのバッジ(アイコンのオーバーレイ)> = 10.6

+0

あなたはこのリンクで探しているものを見つけることができます:http://stackoverflow.com/questions/3181145/add-an-icon-mac-pc-to-a-file-with-cocoa –

答えて

4

、古いカーボン・メソッドが機能しなくなります。私がFinderでアイコンにバッジを付けるために取ったルートは、Finderに注入する必要のあるカスタムバンドルを書くことです。

カスタムバンドルをCocoaアプリケーションに挿入するには、Wolf Rentzschのmach_inject(https://github.com/rentzsch/mach_star/tree/master/mach_inject)を参照してください。

Cocoaアプリケーションのヘッダーファイル(Snow LeopardとLionのFinderなど)を調べて、自分のバンドルで上書きする必要があるアイデアを得るには、class-dumpを使用します。

0

NSDockTileため

おかげで、これは非常に簡単になります:FinderがSnow Leopardで作り直したので

NSDockTile *dockTile = [NSApp dockTile]; 
[dockTile setBadgeLabel:@"33"]; 
+0

私はファインダーファイルアイコンを求めています。もちろん、ドックアイコンのものは本当に簡単です。私は十分正確ではなかったが、私は自分の質問を編集した。とにかくありがとう。 –

+0

清算していただきありがとうございます。誰に投票しても-1の理由でコメントできますか? – sbooth

5

リットビットが遅く、おそらく誰かを助けるでしょう。

私はクラスNSWorkspaceと同じ問題を解く(setIconを参照してください。forFileを:オプション

基本的な考え方:あなたNULLでない場合

1.)(QLThumbnailImageCreateでファイルのプレビューを取得してくださいあなたは、サムネイルを取得していない場合は、ファイルのデフォルトのOS Xのアイコンを取得))

2.サムネイルアイコンを取得します(NSWorkspace iconForFile

3)Combineサムネイル(またはデフォルトのアイコン)バッジと

4)ファイルに新しいアイコンを設定します(NSWorkspace setIcon:forFile:オプション

+0

解決に感謝します。私はそれを試してみましょう。しかし、ユーザーがファイルを移動するとどうなりますか?アイコンはそこにありますか? –

+0

ご迷惑をおかけして申し訳ありません。はいアイコンはそこに残ります。 – miham

+0

このソリューションは正しく機能しましたか? –

0

次の2つの方法を使用して、フォルダ/ファイルにアイコンオーバーレイを付けることができます。 forFileを::オプション:NSWorkspaceの方法あなたは、Mac OS Xの 内のファイルやフォルダのアイコンを変更したい場合は、このメソッドを使用して、アイコンオーバーレイを適用しかし後に、オーバーレイ終了をあなたが-setIcon使用することができます

  1. あなたがそのファイル/フォルダを外に移動したとしても。これは正確な解決策ではないかもしれません。

  2. 代わりに、アプリ内でFinder Sync Extensionターゲット(ファイル - 新規 - ターゲット - Finder Sync Extension)を使用してください。 エクステンションを作成すると、アプリケーションはこのターゲットと直接通信しません。 AppleScriptのコマンドを使用し、活性化するために(私はこれのためのより良い選択肢がないと思います。)

有効にするには

NSStringの* pluginPath = [[[NSBundle mainBundle] builtInPlugInsPath] stringByAppendingPathComponent:@ "yourextension.appex"];

NSString * pluginkitString = [NSString stringWithFormat:@ "pluginkit -e use -a \"%@ \ ""、pluginPath]; システム([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です。エクステンションターゲットに対しても同じ手順を実行します。

締め切り前に、拡張機能が有効になっているかどうかを確認してください。チェックするには、システム環境設定 - 拡張機能 - あなたのApp Finderを参照してください。 これは、ユーザーがアプリケーションのアイコンオーバーレイを有効または無効にできるグローバルポイントです。

関連する問題