2017-02-14 12 views
-1

Мне нужно иметь демонстрационное приложение, которое проснется от фона на событии таймера. Можно ли без джейлбрейка использовать частный API? Попробовал этот код:iOS Private API: wake app from background

void* sbServices = dlopen(SBSERVPATH, RTLD_LAZY); 
int (*SBSLaunchApplicationWithIdentifier)(CFStringRef identifier, Boolean suspended) = dlsym(sbServices, "SBSLaunchApplicationWithIdentifier"); 
int result; 
result = SBSLaunchApplicationWithIdentifier(CFSTR("com.my.app"), false); 
dlclose(sbServices); 

Не работал

ответ

0

Наконец я нашел решение с помощью собственной API. Вот пример, запускающий пользовательское приложение каждые 10 секунд.

@interface PrivateApi_LSApplicationWorkspace 

- (bool)openApplicationWithBundleID:(id)arg1; 

@end 

@implementation ViewController { 
    PrivateApi_LSApplicationWorkspace* _workspace; 
} 

- (void)viewDidLoad { 
    [super viewDidLoad]; 
    _workspace = [NSClassFromString(@"LSApplicationWorkspace") new]; 

    NSTimer *timer = [NSTimer timerWithTimeInterval:10.0 repeats:YES block:^(NSTimer * _Nonnull timer) { 
     [self openAppWithBundleIdentifier:@"com.app.my"]; 
    }]; 
    [[NSRunLoop mainRunLoop] addTimer:timer forMode:NSDefaultRunLoopMode]; 

} 

- (BOOL)openAppWithBundleIdentifier:(NSString *)bundleIdentifier { 
    return (BOOL)[_workspace openApplicationWithBundleID:bundleIdentifier]; 
} 

@end 
+0

Каков частный API в приведенном выше коде? – Hisenberg

+0

LSApplicationWorkspace класс – Rost

+0

Работает на iOS 10? – Hisenberg

 Смежные вопросы

  • Нет связанных вопросов^_^