简体   繁体   English

如何重新启动iDevice?

[英]How to respring iDevice?

I am trying to make an app to respring and reboote any iDevice.我正在尝试制作一个应用程序来重新启动和重新启动任何 iDevice。 My code works fine in the iOS Simulator but on my iDevice nothing happens (Yes, it is jailbroken).我的代码在 iOS 模拟器中运行良好,但在我的 iDevice 上没有任何反应(是的,它已越狱)。

Here is my code for respiring:这是我的呼吸代码:

        if(system("killall SpringBoard"));

        if(system("killall -9 SpringBoard"));

        if (system([@ "reboot" UTF8String]));

        if ([[[UIDevice currentDevice] systemVersion] hasPrefix:@"2."])
            notify_post("com.apple.language.changed");

        if (system([@ "killall SpringBoard" UTF8String]));

and here is my code for rebooting:这是我的重启代码:

if (system([@ "reboot" UTF8String]));

respring only works one time and than it stops working:( respring 只工作一次,然后停止工作:(

My Script:我的脚本:

#!/bin/sh

#  Script.sh
#  Respring
#
#  Created by David on 08.11.12.
#  Copyright (c) 2012 David. All rights reserved.

app binary - root:wheel 4755

script - root:wheel 0755

C=/${0}
C=${C%/*}
declare -a flags
[[ :${DYLD_INSERT_LIBRARIES}: == */MobileSubstrate.dylib: ]] && flags[${flags[@]}]=--substrate
exec "${C:-.}"/Respring "${flags[@]}" -- "$@" 2>>/tmp/Respring.log

This is my alertView for respring and reboot with BugReport if respiring doesn't function如果呼吸不起作用,这是我的警报视图,用于重新启动并使用 BugReport 重新启动

//Respring

-(IBAction)respring {

    UIAlertView *respring=[[UIAlertView alloc]initWithTitle:@"Respring"
                                                     message:@"Do you want to respring your iDevice?"
                                                    delegate:self
                                           cancelButtonTitle:@"No"
                                           otherButtonTitles:@"Yes", nil];
    respring.tag = 1;       
    [respring show];
}


//AlertView   
-(void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex {

    if (buttonIndex == 1){            
        if (alertView.tag ==1) {            
            setuid(0); system("killall i5MMS_");                

            UIAlertView *respringerror=[[UIAlertView alloc]initWithTitle:@"Error"
                                                                message:@"Respring is not possible, please send me an Bug Report."
                                                               delegate:self
                                                      cancelButtonTitle:@"OK"
                                                      otherButtonTitles:@"Send Bug Report",nil];                
                respringerror.tag = 3;                
                [respringerror show];                
        }

        if (alertView.tag ==2) {                
            if (system([@ "reboot" UTF8String]));

            UIAlertView *respringerror=[[UIAlertView alloc]initWithTitle:@"Error"
                                                                 message:@"Rebooting is not possible, please send me an Bug Report."
                                                                delegate:self
                                                       cancelButtonTitle:@"OK"
                                                       otherButtonTitles:@"Send Bug Report", nil];

            respringerror.tag = 4;                
            [respringerror show];            
        }                

    if (alertView.tag ==3) {            
        iDevice.text = [UIDevice currentDevice]. model;            
        ios.text = [UIDevice currentDevice]. systemVersion;            
        MFMailComposeViewController *composer = [[MFMailComposeViewController alloc] init];            
        [composer setMailComposeDelegate:self];            
        if ([MFMailComposeViewController canSendMail]) {                
            [composer setToRecipients:[NSArray arrayWithObjects:@"david.goelzhaeuser@me.com", nil]];                
            [composer setSubject:@"Bug Report"];                
            [composer setMessageBody: [NSString stringWithFormat: @"%@ \n%@ \n%@", ios.text,iDevice.text, jailbreakstatus.text]isHTML:NO];                
            [composer setModalTransitionStyle:UIModalTransitionStyleCoverVertical];                
            [composer setModalPresentationStyle:UIModalPresentationFormSheet];                
            [self presentModalViewController:composer animated:YES];
        }

    }

    if (alertView.tag ==4) {

        iDevice.text = [UIDevice currentDevice]. model;            
        ios.text = [UIDevice currentDevice]. systemVersion;            
        MFMailComposeViewController *composer = [[MFMailComposeViewController alloc] init];            
        [composer setMailComposeDelegate:self];    
        if ([MFMailComposeViewController canSendMail]) {                
            [composer setToRecipients:[NSArray arrayWithObjects:@"david.goelzhaeuser@me.com", nil]];                
            [composer setSubject:@"Bug Report"];
            [composer setMessageBody: [NSString stringWithFormat: @"%@ \n%@ \n%@", ios.text,iDevice.text, jailbreakstatus.text]isHTML:NO];                
            [composer setModalTransitionStyle:UIModalTransitionStyleCoverVertical];                
            [composer setModalPresentationStyle:UIModalPresentationFormSheet];                
            [self presentModalViewController:composer animated:YES];
        }


        }
    }
}


//Reboot

-(IBAction)reboot;{        
    UIAlertView *reboot=[[UIAlertView alloc]initWithTitle:@"Reboot"
                                                    message:@"Do you want to reboot your iDevice? If you have a tethered jailbreak you have to make a tethered boot after rebooting!"
                                                    delegate:self
                                                    cancelButtonTitle:@"No"
                                                    otherButtonTitles:@"Yes", nil];

    reboot.tag = 2;        
    [reboot show];        
}

EXAMPLE例子

I will name my app Respring我将我的应用命名为 Respring

In my app code I have an RespringViewController.h and RespringViewController.m在我的应用程序代码中,我有一个RespringViewController.hRespringViewController.m

Inside of the ResringViewController.h I will add a button to call my respring action.ResringViewController.h我将添加一个按钮来调用我的 respring 操作。

#import <UIKit/UIKit.h>

@interface RespringViewController : UIViewController
//Creates the button
- (IBAction) respring:(id)sender;

@end

Now inside of RespringViewController.m现在在RespringViewController.m里面

#import "RespringViewController.h"

@interface RespringViewController ()

@end

@implementation RespringViewController
//This calls the button created in RespringViewController.h
- (IBAction) respring: (id) sender {
setuid(0); system("killall SpringBoard");
}
//This makes the view for the button programmatically
UIButton *button9 = [UIButton buttonWithType:UIButtonTypeRoundedRect];
    [button9 addTarget:self
                action:@selector(respring:)
      forControlEvents:UIControlEventTouchUpInside];
    button9.frame = CGRectMake(96.0, 262.0, 130.0, 37.0);
    button9.adjustsImageWhenDisabled = YES;
    button9.adjustsImageWhenHighlighted = YES;
    button9.alpha = 1.000;
    button9.autoresizesSubviews = YES;
    button9.autoresizingMask = UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleBottomMargin;
    button9.clearsContextBeforeDrawing = YES;
    button9.clipsToBounds = NO;
    button9.contentHorizontalAlignment = UIControlContentHorizontalAlignmentCenter;
    button9.contentMode = UIViewContentModeScaleToFill;
    button9.contentStretch = CGRectFromString(@"{{0, 0}, {1, 1}}");
    button9.contentVerticalAlignment = UIControlContentVerticalAlignmentCenter;
    button9.enabled = YES;
    button9.hidden = NO;
    button9.highlighted = NO;
    button9.multipleTouchEnabled = NO;
    button9.opaque = NO;
    button9.reversesTitleShadowWhenHighlighted = NO;
    button9.selected = NO;
    button9.showsTouchWhenHighlighted = NO;
    button9.tag = 0;
    button9.titleLabel.font = [UIFont fontWithName:@"Helvetica-Bold" size:15.000];
    button9.titleLabel.lineBreakMode = UILineBreakModeMiddleTruncation;
    button9.titleLabel.shadowOffset = CGSizeMake(0.0, 0.0);
    button9.userInteractionEnabled = YES;
    [button9 setTitle:NSLocalizedString(@"APPLY SETTINGS", nil) forState:UIControlStateNormal];
    [button9 setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
    [button9 setTitleColor:[UIColor colorWithWhite:1.000 alpha:1.000] forState:UIControlStateHighlighted];
    [button9 setTitleShadowColor:[UIColor colorWithWhite:0.500 alpha:1.000] forState:UIControlStateNormal];

//Adds the button to the view
[view addSubview:button9];

Now I go ahead and build it and get a file called Respring.app现在我继续构建它并获得一个名为Respring.app的文件

Inside of Respring.app there are for example these filesRespring.app里面有例如这些文件

Info.plist信息表

Icon.png图标.png

Respring重生

I have to rename Respring inside of Respring.app to Respring_我必须将RespringRespring.app重命名为Respring_

Now I have to upload the script below to /path/to/Respring.app/现在我必须将下面的脚本上传到/path/to/Respring.app/

#!/bin/bash
C=/${0}
C=${C%/*}
declare -a flags
[[ :${DYLD_INSERT_LIBRARIES}: == */MobileSubstrate.dylib: ]] && flags[${#flags[@]}]=--substrate
exec "${C:-.}"/Respring_ "${flags[@]}" -- "$@" 2>>/tmp/Respring.log

and name it Respring并将其命名为Respring

You will now need to fake code sign the binary using the tool ldid您现在需要使用工具ldid对二进制文件进行伪代码签名

You can download it here你可以 在这里下载

From the terminal use the following command从终端使用以下命令

sudo ldid -S /path/to/Respring.app/Respring_

Be sure to sign the binary not the script确保对二进制文件而不是脚本进行签名

The correct permissions have to be in place for the script to launch app as root user from terminal you can run this脚本必须具有正确的权限才能以 root 用户身份从终端启动应用程序,您可以运行它

sudo chown 0:0 /path/to/Respring.app/Respring*

sudo chmod 0755 /path/to/Respring.app/Respring

sudo chmod 4755 /path/to/Respring.app/Respring_

Everything is all set now and you can launch the app, any logs will be stored inside of /tmp/Respring.log of your device now and you can use the button to respring.现在一切都设置好了,您可以启动应用程序,任何日志现在都将存储在您设备的/tmp/Respring.log中,您可以使用按钮重新启动。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM