在 iOS9 中使用“hw.machine”标志调用“sysctlbyname(...)”
Posted
技术标签:
【中文标题】在 iOS9 中使用“hw.machine”标志调用“sysctlbyname(...)”【英文标题】:Calling "sysctlbyname(...)" with "hw.machine" flag in iOS9 【发布时间】:2015-11-17 22:43:27 【问题描述】:在 WWDC 2015 会议“703 隐私和您的应用程序”之后,使用sysctl
进行了更改。现在我们将无法再调用kern.proc
、kern.procargs
、kern.procargs2
并查看来自任何其他进程的数据,而不是自己的数据。这是苹果公司相当合法的隐私强化措施。
谁能确认在 ios9 中允许使用 hw.machine
调用 sysctlbyname(...)
来获取确切的设备名称,并且不受上述限制的影响?
【问题讨论】:
如果您需要 "iPhone1,1" 之类的字符串,另请参阅How to get device make and model on iOS?。模型字符串看起来比sysctlbyname
更容易使用。
【参考方案1】:
是的,我已经在 iPhone5 中使用 Xcode7 beta5 进行了测试(安装的是 iOS9 beta5,不是模拟器)。
+(NSString *) getDeviceModel
size_t size;
sysctlbyname("hw.machine", NULL, &size, NULL, 0);
char *model = malloc(size);
sysctlbyname("hw.machine", model, &size, NULL, 0);
NSString *deviceModel = [NSString stringWithCString:model encoding:NSUTF8StringEncoding];
free(model);
return deviceModel;
并且返回值为“iPhone5,2”。所以我认为设备名称不受“sysctl”功能限制的影响。
【讨论】:
您好,谢谢您的回答。但我的问题实际上是苹果是否可以拒绝使用带有“hw.machine”标志的“sysctlbyname”的应用程序,或者他们只拒绝那些使用“kern.proc”标志的应用程序? 顺便说一句,出于同样的原因,我们现在无法获取正在运行的应用程序列表((( 我相信这是在Cordova的CDVDevice.m中使用的。因此,如果不允许,Cordova 就不会使用它。我真正的问题是......我们如何验证这个字符串来自真实设备?我需要它来防止人们在我的社交网络上创建无限帐户。以上是关于在 iOS9 中使用“hw.machine”标志调用“sysctlbyname(...)”的主要内容,如果未能解决你的问题,请参考以下文章
Safe Area Layout Guide before iOS9.0
14.VisualVM使用详解15.VisualVM堆查看器使用的内存不足19.class文件--文件结构--魔数20.文件结构--常量池21.文件结构访问标志(2个字节)22.类加载机制概(代码片段