如何使用SpringboardServices获取app

时间:2016-08-09 11:44:47

标签: ios objective-c push-notification

如何使用SpringboardServicesSBSPushStore将其他应用的通知计入我的应用中? 我试图将whatsapp中的通知计数显示到我的应用程序中,所以我一直在搜索,有一件事是肯定的,但是我没有找到任何关于如何做到这一点的认可方式。
Here is the question它回答了它,但我没有得到它。怎么做?有人可以分享一步一步的程序。

基于这个问题,我能够找到可以使用SpringboardServices实际锁定iPhone的代码,但我不知道如何将其用于SBSPushStore

void *SpringBoardServices = dlopen("/System/Library/PrivateFrameworks/SpringBoardServices.framework/SpringBoardServices", RTLD_LAZY);
    NSParameterAssert(SpringBoardServices);
    mach_port_t (*SBSSpringBoardServerPort)() = dlsym(SpringBoardServices, "SBSSpringBoardServerPort");
    NSParameterAssert(SBSSpringBoardServerPort);
    SpringBoardServicesReturn (*SBSLockDevice)(mach_port_t port) = dlsym(SpringBoardServices, "SBSLockDevice");
    NSParameterAssert(SBSLockDevice);
    mach_port_t sbsMachPort = SBSSpringBoardServerPort();
    SBSLockDevice(sbsMachPort);
    dlclose(SpringBoardServices);

1 个答案:

答案 0 :(得分:0)

您评论的关联问题的答案暗示您不需要任何框架,只要您的设备已越狱。 您只需加载位于/var/mobile/Library/SpringBoard/applicationState.plist的plist文件即可。该答案的格式有点破碎,但我认为>是作为解释文件内部结构的指标(即键值)。

因此我假设它是一本字典,你可以通过

加载它
NSDictionary *plistFile = [NSDictionary dictionaryWithContentsOfFile:@"/var/mobile/Library/SpringBoard/applicationState.plist"];
NSDictionary *entryForYourApp = plistFile[@"com.app.identifier"]; // obviously you have to use the identifier of whatever app you wanna check
NSInteger badgeCount = entryForYourApp[@"SBApplicationBadgeKey"];

你可能想先自己检查一下文件(所以设置一个调试点)并确保它的结构就像我假设的那样,类型是正确的等等(更不用说它存在了,Apple有时会改变这样的东西和另一个问题已经有好几年了。)

一般情况下,请注意,您只能在越狱设备上执行此操作。否则,您的应用程序根本没有对路径/var/mobile/Library/SpringBoard/applicationState.plist的读取权限。或者对于沙箱以外的任何东西,就此而言。