iOS应用禁止动态调试

闲话少说,直接上步骤

步骤一、打开main.m文件,导入头文件#import

如图所示:


iOS应用禁止动态调试_第1张图片
导入头文件

步骤二、定义禁用调试代码

typedef int (*ptrace_ptr_t)(int _request, pid_t _pid, caddr_t _addr, int _data);
#if !defined(PT_DENY_ATTACH)
#define PT_DENY_ATTACH 31
#endif

void disable_gdb()
{
    void *handle = dlopen(0, RTLD_GLOBAL | RTLD_NOW);
    ptrace_ptr_t ptrace_ptr = dlsym(handle, "ptrace");
    ptrace_ptr(PT_DENY_ATTACH, 0, 0, 0);
    dlclose(handle);
}

如图所示:


iOS应用禁止动态调试_第2张图片
定义禁用调试代码

步骤三、调用禁止调试代码

int main(int argc, char * argv[])
{
    disable_gdb();
    @autoreleasepool {
        return UIApplicationMain(argc, argv, nil, NSStringFromClass([T_TAppDelegate class]));
    }
}

如图所示:


iOS应用禁止动态调试_第3张图片
调用禁止调试代码

此时您用模拟器或真机调试您的APP的时候会发现调试不了,现象就是----xcode编译运行完毕代码的时候,突然就和模拟器或真机断开连接了。此时说明已经可以禁止其他人动态调试您的应用了。


此时可能会有人问,那我想测试的时候可以调试,打包之后禁止调试,该如何做呢。遇到这个疑问请看下面的代码:
int main(int argc, char * argv[])
{
#ifdef RELEASE
    disable_gdb(); // 只在release(archive)时调用这个代码
#endif
    @autoreleasepool {
        return UIApplicationMain(argc, argv, nil, NSStringFromClass([^_^AppDelegate class]));
    }
}

最后祝大家工作顺利!

你可能感兴趣的:(iOS应用禁止动态调试)