3

シンプルな Finder Sync 拡張機能を作成できません。

新しい OS X プロジェクトを作成し、Finder Sync Extension ターゲットを追加して、finder に添付された拡張機能を実行しました。コードは init メソッドを実行しているように見え、ツールバー項目のメソッドが呼び出されていますが、ファインダーには何も表示されていません。

端末は実行時にこれを表示しています

2015-04-20 12:45:52.700 pcssyncextension[3196:62451] (NSApplication) から (NSColorPickerGridView) への (colorGridView) アウトレットの接続に失敗しました: セッターまたはインスタンス変数がありません 2015-04-20 12:45:52.701 pcssyncextension[3196 :62451] (NSApplication) から (NSColorPickerGridView) へのアウトレットの接続 (表示) に失敗しました: セッターまたはインスタンス変数がありませんuser/Library/Developer/Xcode/DerivedData/findersynctest-dkyjmfmqzedkquhbhqxejzlzzukn/Build/Products/Debug/findersynctest.app/Contents/PlugIns/pcssyncextension.appex ; 12:36:01 にコンパイル

空のプロジェクトを作成して Finder Sync Extension を追加する以外に、これを機能させるために必要なことはありますか?

4

1 に答える 1

9

私に役立ついくつかのことを見つけることができました。デフォルトでは、ユーザーがドラッグしない限り、ツールバー項目はファインダ ウィンドウに追加されません。項目をプログラムでファインダ ウィンドウ ツールバーに追加する方法を見つけることができませんでした。

ファインダーのサイドバーにアイテムを追加

// Create a reference to the shared file list.
LSSharedFileListRef favoriteItems = LSSharedFileListCreate(NULL, kLSSharedFileListFavoriteItems, NULL);

// Check Items
if (favoriteItems)
{
    // Get CFURL for Application
    CFURLRef url = (__bridge CFURLRef)[NSURL fileURLWithPath:path];

    // Add Item
    LSSharedFileListItemRef item = LSSharedFileListInsertItemURL(favoriteItems, kLSSharedFileListItemBeforeFirst, NULL, NULL, url, NULL, NULL);

    // Release
    if (item)
        CFRelease(item);
}

// Release
if (favoriteItems != NULL)
    CFRelease(favoriteItems);

サイドバーからアイテムを削除するコード

// Create a reference to the shared file list.
LSSharedFileListRef favoriteItems = LSSharedFileListCreate(NULL, kLSSharedFileListFavoriteItems, NULL);

// Check Items
if (favoriteItems)
{
    // Get Login Items
    CFArrayRef favoriteItemsArray = LSSharedFileListCopySnapshot(favoriteItems, NULL);

    // Loop Through Items
    for (id item in (__bridge NSArray *)favoriteItemsArray)
    {
        // Get Item Ref
        LSSharedFileListItemRef itemRef = (__bridge LSSharedFileListItemRef)item;

        // Get Item URL
        CFURLRef itemURL = LSSharedFileListItemCopyResolvedURL(itemRef, kLSSharedFileListNoUserInteraction | kLSSharedFileListDoNotMountVolumes, NULL);
        if (itemURL != NULL)
        {
            // If Item Matches Remove It
            if ([[(__bridge NSURL *)itemURL path] hasPrefix:path])
                LSSharedFileListItemRemove(favoriteItems, itemRef);

            // Release
            if (itemURL != NULL)
                CFRelease(itemURL);
        }
    }

    // Release
    if (favoriteItemsArray != NULL)
        CFRelease(favoriteItemsArray);
}

// Release
if (favoriteItems != NULL)
    CFRelease(favoriteItems);

Finder でディレクトリをリロードする

// Reload Finder (change the word directory to file if updating file)
NSAppleScript * update = [[NSAppleScript alloc] initWithSource:[NSString stringWithFormat:@"tell application \"Finder\" to update POSIX directory \"%@\"",path]];
[update executeAndReturnError:nil];

拡張機能を有効にするコード (バンドル ID)

system("pluginkit -e use -i com.mycompany.finderExt")

拡張機能を無効にするコード (バンドル ID)

system("pluginkit -e ignore -i com.mycompany.finderExt")
于 2015-04-23T14:59:43.667 に答える