Альтернатива NSDistributedNotificationCenter для связи между приложениями iPhone - PullRequest
1 голос
/ 28 января 2012

Я искал способ сравнить временные метки между приложениями на одном телефоне в режиме реального времени, и NSDistributedNotificationCenter звучит как идеальное решение, поскольку я могу не знать названия приложений, которые его слушают, но звучит так недоступно в iOS.

Существует ли эквивалентный способ уведомления нескольких приложений о чувствительном ко времени событии, не зная их имени?

Кодирование для iOS 5+ и допущение, что соответствующие приложения будут регистрироваться для уведомления.

Ответы [ 5 ]

3 голосов
/ 28 января 2012

Посмотрите на CPDistributedMessagingCenter в /System/Library/PrivateFrameworks/AppSupport.framework.Тем не менее, это частная структура (может изменяться в зависимости от выпусков ОС и не разрешаться в AppStore).

Документация здесь: http://iphonedevwiki.net/index.php/CPDistributedMessagingCenter

Примеры моих кодов здесь:

https://github.com/H2CO3/PwnTube

https://github.com/H2CO3/Cereal

2 голосов
/ 28 января 2012

Я уверен, что вы можете использовать порты Маха. Они немного низкого уровня, но работают хорошо.

1 голос
/ 03 июня 2014

Я нашел способ использовать CFNotificationCenterGetDistributedCenter () на iOS. Он существует на устройстве, но не экспортируется в iOS SDK

void *libHandle = dlopen("/System/Library/Frameworks/CoreFoundation.framework/CoreFoundation", RTLD_LAZY);
CFNotificationCenterRef (*CFNotificationCenterGetDistributedCenter)() = (CFNotificationCenterRef (*)())dlsym(libHandle, "CFNotificationCenterGetDistributedCenter");
if(CFNotificationCenterGetDistributedCenter) {
    CFNotificationCenterAddObserver(CFNotificationCenterGetDistributedCenter(), NULL, &NotificationUpdateApp, CFSTR("TestApp"), NULL, CFNotificationSuspensionBehaviorCoalesce);
}
dlclose(libHandle);
0 голосов
/ 05 марта 2015

Этот вопрос немного устарел, но я выложу свой ответ только в информационных целях.

NSDistributedNotificationCenter пока недоступен для iOS, и если вы не разрабатываете приложение, которое не претендуете выпустить в AppStore, вы не можете использовать AppSupport.framework, потому что он является закрытым.

iOS8 выпустила App Extensions, которые дают нам возможность общаться с другими приложениями. Я не знаю, что именно вы пытаетесь сделать, но я считаю, что если вы просто пытаетесь сравнить некоторые временные метки из других приложений, это должно решить вашу проблему.

Ссылка на документацию AppExtensions: https://developer.apple.com/library/ios/documentation/General/Conceptual/ExtensibilityPG/

Надеюсь, это кому-нибудь поможет.

0 голосов
/ 28 января 2012

Не совсем. Самое близкое, что вы можете сделать к тому, что вы запрашиваете, на не взломанном устройстве, - это чтобы ваш сервер общался с сервером друг друга, а этот сервер отправлял push-уведомление соответствующему приложению. Без NSDistributedNotificationCenter (который, как вы догадываетесь, недоступен в iOS), у вас действительно нет другого выбора.

...