handleGetURLEvent не вызывается - PullRequest
       16

handleGetURLEvent не вызывается

5 голосов
/ 15 февраля 2012

Я реализую пользовательскую схему 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: // тест"

- (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 ]

6 голосов
/ 18 апреля 2012

Похоже, вам может понадобиться очистить ваш проект.Иногда база данных Launch Services (которая обрабатывает связи URL) не обновляется правильно, когда Xcode создает приложение.Очистка проекта должна полностью удалить построенное приложение, поэтому в следующий раз, когда вы создаете проект, он создается с нуля, в процессе обновления базы данных Launch Services.

Вы также можете попробовать скопировать приложение вПапка /Applications, которая должна заставить Launch Services повторно анализировать файл Info.plist приложения.

Вы можете заставить Launch Services перестроить свою базу данных, выполнив в терминале следующую команду:

/System/Library/Frameworks/ApplicationServices.framework/Frameworks/LaunchServices.framework/Support/lsregister -kill -r -domain local -domain system -domain user
4 голосов
/ 15 февраля 2012

Переместить код обработчика события в метод 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, чтобы она никогда не конфликтовала с какой-либо другой схемой.

См. Также: Для получения дополнительной информации по этой теме см. Как настроить приложение Какао в качестве веб-браузера по умолчанию?

2 голосов
/ 23 марта 2014

Обновление базы данных OS10.8 Mountain Lion

/ Система / Библиотека / Каркасы / CoreServices.framework / Версии / A / Каркасы / LaunchServices.framework / Версии / A / Поддержка / 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

1 голос
/ 29 марта 2015

Видимо, под песочницей вам нужно зарегистрироваться в applicationWillFinishLaunching :, а не applicationDidFinishLaunching:

См. Документы Apple .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...