6

アプリの1つにカスタムURLスキームを実装していますが、機能させることができません。

これらの行をInfo.plistに追加しました。

<key>CFBundleURLTypes</key>
<array>
    <dict>
        <key>CFBundleURLName</key>
        <string>MyApp URL</string>
        <key>CFBundleURLSchemes</key>
        <array>
            <string>myscheme</string>
        </array>
    </dict>
</array>

アプリケーションデリゲートで、ApplicationDidFinishedLaunchingにイベントハンドラーをインストールします。

NSAppleEventManager *appleEventManager = [NSAppleEventManager sharedAppleEventManager];
[appleEventManager setEventHandler:self andSelector:@selector(handleGetURLEvent:withReplyEvent:) forEventClass:kInternetEventClass andEventID:kAEGetURL];

しかし、URLのリンクをクリックしてもメソッドは呼び出されません。「myscheme://test」

- (void)handleGetURLEvent:(NSAppleEventDescriptor *)event
           withReplyEvent:(NSAppleEventDescriptor *)replyEvent {

    // Extract the URL from the Apple event and handle it here.
    NSString* url = [[event paramDescriptorForKeyword:keyDirectObject] stringValue];
    NSLog(@"%@", url);
}

私は何を取りこぼしたか?

4

4 に答える 4

9

プロジェクトをクリーンアップする必要があるようです。Xcode がアプリをビルドするときに、Launch Services データベース (URL 関連付けを処理する) が正しく更新されないことがあります。プロジェクトをクリーニングすると、ビルドされたアプリが完全に削除されるため、次にプロジェクトをビルドするときに、Launch Services データベースを更新するプロセスで、プロジェクトが最初から作成されます。

アプリをフォルダーにコピーすることもできます。これにより、Launch Services がアプリのファイル/Applicationsを再解析するようになります。Info.plist

ターミナルで次のコマンドを実行して、Launch Services にデータベースを強制的に再構築させることができます。

/System/Library/Frameworks/CoreServices.framework/Frameworks/LaunchServices.framework/Support/lsregister -kill -r -domain local -domain system -domain user
于 2012-04-18T12:31:48.887 に答える
4

イベント ハンドラー コードをinitメソッドに移動します。

- (id) init
{   
    if ((self = [super init]))
    {
        NSAppleEventManager *appleEventManager = [NSAppleEventManager sharedAppleEventManager];
        [appleEventManager setEventHandler:self andSelector:@selector(handleGetURLEvent:withReplyEvent:) forEventClass:kInternetEventClass andEventID:kAEGetURL];

        // Add the following to set your app as the default for this scheme
        NSString * bundleID = [[NSBundle mainBundle] bundleIdentifier];
        LSSetDefaultHandlerForURLScheme((CFStringRef)@"myscheme", (CFStringRef)bundleID 
    }
return self;
}

注: 他のスキームと競合しないようmyschemeに、フォームを使用する必要があります。x-com-companyname-appname

関連項目:このトピックの詳細については、Cocoa アプリケーションをデフォルトの Web ブラウザーとして設定する方法を参照してください。

于 2012-02-15T12:38:51.817 に答える
2

データベースの更新 OS10.8 Mountain Lion

/System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/LaunchServices.framework/Versions/A/Support/lsregister -f

-kill Reset the Launch Services database before doing anything else -seed If database isn't seeded, scan default locations for applications and libraries to register -lint Print information about plist errors while registering bundles -convert Register apps found in older LS database files -lazy n Sleep for n seconds before registering/scanning -r Recursive directory scan, do not recurse into packages or invisible directories -R Recursive directory scan, descending into packages and invisible directories

-f force-update registration even if mod date is unchanged

-u unregister instead of register -v Display progress information -dump Display full database contents after registration -h Display this help

于 2014-03-23T18:36:11.827 に答える