3

iDeviceを再起動して再起動するアプリを作成しようとしています。私のコードは iOS シミュレーターでは正常に動作しますが、私の iDevice では何も起こりません (はい、ジェイルブレイクされています)。

呼吸するための私のコードは次のとおりです。

        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]));

再起動するための私のコードは次のとおりです。

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

respring は 1 回しか機能せず、機能しなくなります:(

私のスクリプト:

#!/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

これは、呼吸が機能しない場合にバグレポートで再起動および再起動するための私の alertView です。

//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];        
}
4

1 に答える 1

3

アプリにRespringという名前を付けます

私のアプリコードにはRespringViewController.hRespringViewController.m

中にResringViewController.h、リスプリングアクションを呼び出すためのボタンを追加します。

#import <UIKit/UIKit.h>

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

@end

今中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];

今、私は先に進んでそれをビルドし、というファイルを取得しますRespring.app

Respring.appには、例えばこれらのファイルがあります

Info.plist

Icon.png

リスプリング

Respring内部の名前Respring.appをに変更する必要がありますRespring_

次に、以下のスクリプトをにアップロードする必要があります/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

名前を付けますRespring

ここで、ツールを使用してバイナリに偽のコード署名をする必要がありますldid

こちらからダウンロードできます

ターミナルから次のコマンドを使用します

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

スクリプトではなく、必ずバイナリに署名してください

スクリプトがターミナルから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_

これですべてが設定され、アプリを起動できます。ログは/tmp/Respring.logデバイス内に保存され、ボタンを使用して再起動できます。

于 2012-11-08T05:10:20.460 に答える