HTML5   发布时间:2022-04-27  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了iOS – 检测应用程序是否从Xcode运行大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
这个问题在这里已经有一个答案:> Detecting if iOS app is run in debugger4个
我试图根据代码是否通过USB / Xcode(调试)运行,或者从应用商店(发行版)下载的生产模式中启用/禁用部分代码.我知道检查它是否在DEBUG或RELEASE模式下运行,如下所示:
#ifdef DEBUG

// stuff for debug mode

#else

// stuff for release mode

#endif

但问题是,我看到一个明显的循环孔,您可以将“运行”构建方案的构建配置从“Debug”更改为“Release”.一个更好的方法是,如果我可以简单地检测它是否从Xcode运行.我没有找到一个方法来检查这个.

有没有办法检查iOS应用程序是否从Xcode运行?

解决方法

您可以使用sysctl检查调试器是否附加(可能是但不是绝对的XcodE).以下是 HockeyApp does it
#include <Foundation/Foundation.h>
#include <sys/sysctl.h>

/**
 * check if the debugger is attached
 *
 * Taken from https://github.com/plausiblelabs/plcrashreporter/blob/2dd862ce049e6f43feb355308dfc710f3af54c4d/source/Crash%20Demo/main.m#L96
 *
 * @return `YES` if the debugger is attached to the current process,`NO` otherwise
 */
- (BOOL)isDebuggerAttached {
  static BOOL debuggerIsAttached = NO;

  static dispatch_once_t debuggerPreDicate;
  dispatch_once(&debuggerPreDicate,^{
    struct kinfo_proc info;
    size_t info_size = sizeof(info);
    int name[4];

    name[0] = CTL_KERN;
    name[1] = KERN_PROc;
    name[2] = KERN_PROC_PID;
    name[3] = getpid(); // from unistd.h,included by Foundation

    if (sysctl(name,4,&info,&info_size,NULL,0) == -1) {
      NSLog(@"[HockeySDK] ERROR: checking for a running debugger via sysctl() Failed: %s",strerror(errno));
      debuggerIsAttached = false;
    }

    if (!debuggerIsAttached && (info.kp_proc.p_flag & P_TRACED) != 0)
      debuggerIsAttached = true;
  });

  return debuggerIsAttached;
}

大佬总结

以上是大佬教程为你收集整理的iOS – 检测应用程序是否从Xcode运行全部内容,希望文章能够帮你解决iOS – 检测应用程序是否从Xcode运行所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。