在iOS应用中使用宏SEC_IS_BEING_DEBUGGED_RETURN_NIL

Mah*_*kar 2 xcode gdb objective-c ios cycript

我了解了下面这段代码,声称可以在某种程度上阻止Method Swizzling.

#ifndef DEBUG
SEC_IS_BEING_DEBUGGED_RETURN_NIL();
#endif
Run Code Online (Sandbox Code Playgroud)

但是在我的测试项目中包含了一些错误.

函数'SEC_IS_BEING_DEBUGGED_RETURN_NIL'的隐式声明在C99中无效

如果我需要包含任何库标题,有人可以帮我解决这个错误.

Mah*_*kar 6

我不打算回答我自己的问题.从上面的评论中,我搜索了任何这样的实现.并在GitHub项目中找到了这个.这是一个类别NSObject

也许,它会帮助任何人future.

#define SEC_IS_BEING_DEBUGGED_RETURN_NIL()  size_t size = sizeof(struct kinfo_proc); \
                                            struct kinfo_proc info; \
                                            int ret, name[4]; \
                                            memset(&info, 0, sizeof(struct kinfo_proc)); \
                                            name[0] = CTL_KERN; \
                                            name[1] = KERN_PROC; \
                                            name[2] = KERN_PROC_PID; \
                                            name[3] = getpid(); \
                                            if ((ret = (sysctl(name, 4, &info, &size, NULL, 0)))) { \
                                            if (ret) return nil; \
                                            } \
                                            if (info.kp_proc.p_flag & P_TRACED) return nil
Run Code Online (Sandbox Code Playgroud)

对此制造商的信誉

//由Derek Selander在愉快的一天创建.//
//版权所有(c)
// 2013 Derek Selander.版权所有.//