有没有办法以编程方式将我的iPhone恢复到出厂设置?

zzz*_*zzz 4 iphone objective-c jailbreak ios

我正在开发一个越狱的应用程序,我不在乎它是否被应用程序商店拒绝.我已经找到了一种方法来完全消灭我的iPhone使用这种方式有没有办法以编程方式完全消灭iPhone数据?然而,这种方法存在问题.它使我的iphone毫无价值,我必须使用iTunes恢复它.我只是想以编程方式恢复我的iphone.任何人都可以帮助我吗?

Vic*_*nin 10

SpringboardServices私有框架中有一个私有API SBDataReset.它擦除所有数据.

您可以检查以下代码,例如如何使用它.

使用此API的应用程序应具有"com.apple.springboard.wipedevice"权限.

BTW.另一种选择是使用MDM协议.它有一个擦除命令.但是,它需要更多的机器(MDM服务器,注册用户).

更新1

看起来链接中的示例代码已过时.我查看了偏好设置以及其他一些使用SBDataReset的iOS软件,看起来新的参数被引入SBDataReset.

尝试以下代码(对不起,我现在没有越狱的iOS设备,所以我不能自己尝试)

#import <UIKit/UIKit.h>
#import <UIKit/UIApplication.h>
#include <dlfcn.h>
#include <stdio.h>

// Framework Paths
#define SBSERVPATH "/System/Library/PrivateFrameworks/SpringBoardServices.framework/SpringBoardServices"
#define UIKITPATH "/System/Library/Framework/UIKit.framework/UIKit"

#define WIPE_MODE_NORMAL 4

int main(int argc, char **argv)
{
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];

    // Fetch the SpringBoard server port
    mach_port_t *p;
    void *uikit = dlopen(UIKITPATH, RTLD_LAZY);
    int (*SBSSpringBoardServerPort)() = 
    dlsym(uikit, "SBSSpringBoardServerPort");
    p = SBSSpringBoardServerPort(); 
    dlclose(uikit);

    // Getting DataReset proc
    void *sbserv = dlopen(SBSERVPATH, RTLD_LAZY);
    int (*dataReset)(mach_port_t* port, int wipeMode) = dlsym(sbserv, "SBDataReset");
    dataReset(p, WIPE_MODE_NORMAL);
    dlclose(sbserv);

    [pool release];
}
Run Code Online (Sandbox Code Playgroud)

请注意,SBDataReset函数有第二个参数.

看起来4是普通擦除模式,6是砖擦除模式.

免责声明此代码按原样提供.我不知道如果在砖块模式下擦除设备将会发生什么.

  • +1这似乎是您可以找到的最佳解决方案.我只是想提一个小警告,我在iOsBoy的其他类似问题中提到过.在JB设备上,[按"清除设置中的所有内容和设置"按钮](http://www.jailbreakqa.com/questions/106644/reset-all-settings-problem).我不完全理解为什么,但我看到它发生了.如果这个私有API只执行该按钮所做的操作,那么您可能会遇到问题.我认为维克多有责任警告你尝试这个,我只是想为其他勇敢的灵魂人士提一下这个问题. (2认同)