2014-02-22 4 views
1

Я разрабатываю твики для jailbroken iphone, iOS 7, и у меня есть проблема, которую я не могу решить какое-то время, можно закрыть все приложения в фоновом режиме непосредственно из Springboard, не открывая панель переключателя фона? Все настройки и исходные коды, которые я видел, например, Purge, Slide2Kill работают с панелью переключателей приложений, используя self для контроллера.Завершить одно или несколько приложений за пределами переключателя iOS 7 tweak

Я попытался следующие способы:

SBAppSliderController* switcherController = MSHookIvar<SBAppSliderController*>(self, "_switcherController"); 
//or 
SBUIController *sharedUI = [objc_getClass("SBUIController") sharedInstance]; 

SBAppSliderController * switcherController = [sharedUI _appSliderController]; 
//tried this: 
SBAppSliderController * switcherController = [sharedUI _switcherController]; 
//and 
SBAppSliderController * switcherController = MSHookIvar<SBAppSliderController *>(sharedUI, "_switcherController"); 

закрыть все приложения, мне нужно позвонить _quitAppAtIndex со всем индексом приложения доступен

[switcherController _quitAppAtIndex:appIndex]; 

%hook SBAppSliderController 
- (void)_quitAppAtIndex:(unsigned int)arg1 
{ 
     %log; 
    if (arg1 == 0) { 
     for (NSString *appID in [self applicationList]) { 
     if (![appID isEqualToString:@"com.apple.springboard"]) 
      [self _quitAppAtIndex:[[self applicationList] indexOfObject:appID]]; 
     } 
    } 
    else 
    %orig; 
} 

Каждый раз, когда я вызываю функцию я получаю следующее ошибка, даже если я хочу закрыть только одно приложение, и я называю его конкретным индексом:

: - [_quitAppAtIndex: 1] : * T Причина: исключение «NSInvalidArgumentException», причина: '* - [__ NSDictionaryM removeObjectForKey:]: ключ не может быть nil'

Что я делаю неправильно? любая помощь будет оценена

спасибо.

ответ

0

Вы должны переключить переключатель первых, этот код работает для меня:

static SBAppSliderController *_localSBAppSliderC = nil; 
%hook SBAppSliderController 
-(id)init { 
    %log; 
    id r = %orig; 
    _localSBAppSliderC = (SBAppSliderController *)r; 
    NSLog(@" = %@", r); 
    return r; 
} 
%end 

-(void) KillAllApps { 
    SBUIController * SBUIC = [objc_getClass("SBUIController") sharedInstance]; 
    [SBUIC _toggleSwitcher]; 
    if (_localSBAppSliderC) { 
    NSLog(@"----------applist %@",[_localSBAppSliderC applicationList]); 
    for (NSString *identifier in [_localSBAppSliderC applicationList]) { 
     if (![identifier isEqualToString:@"com.apple.springboard"]) 
     { 
     int index = [[_localSBAppSliderC applicationList] indexOfObject:identifier]; 
     NSLog(@"---_quitAppAtIndex: %d",index); 
     [_localSBAppSliderC _quitAppAtIndex:index];   
     } 
    } 
    [SBUIC dismissSwitcherAnimated:YES]; 
}