How do I detect which iOS device my user is using?

2019-06-27 15:55发布

我在寻找一种方法来检测我的应用程序上运行的设备。 我不感兴趣的软件版本。 我搜索了很多问题,但他们都不(奇怪)满足以下原因,我的需求:

解决方案1:

NSString *deviceType = [UIDevice currentDevice].model;

这不起作用,因为它给了我刚刚的“iPad”。 我想知道它是否是的iPad,iPad 2的,新的iPad,iPhone 3GS,iPhone4的等等。

解决方案2:未测试对于设备类型,检查个体的能力

这并不适用,因为我想这个数据收集用户统计数据,没有进行任何设备特定的操作。

解决方案3:使用UIDeviceHardware发现这里

这段代码看起来很过时,似乎在设备上访问私人数据。 甚至有争论使用这个应用程序是否会得到批准与否。 更重要的是,我不知道它是如何工作:)另还发现在这里

是否有任何最后两个我提到的安全使用呢? 他们是未来的兼容? 难道他们遵守苹果的审批规则?

或者有没有其他的方法来解决这个问题?

提前致谢。

Answer 1:

苹果在它的代码示例使用这样的API。 引述LargeImageDownsizing示例项目,在文件LargeImageDownsizingViewController.m与线83开头:

选择合适的生成的图像尺寸和瓷砖尺寸可以做到的,但作为练习留给开发人员。 注意,装置类型/版本字符串(例如,“iPhone2,1”可以在运行时通过使用sysctlbyname函数来确定:

size_t size;
sysctlbyname("hw.machine", NULL, &size, NULL, 0);
char *machine = malloc(size);
sysctlbyname("hw.machine", machine, &size, NULL, 0);
NSString* _platform = [NSString stringWithCString:machine encoding:NSASCIIStringEncoding];
free(machine);

_platform在我的情况会是iPod4,1为iPod touch的第四代。

此代码是什么,是在双方你张贴的Github上的例子的根源。



Answer 2:

从技术上讲, [UIDeviceHardware platform]应该可以正常工作,你应该把它发送到您的服务器,因为它是。 你也应该与平台id来拯救你麻烦,如果平台的ID会在未来的OS改变一起发送的iOS版本。

由于功能sysctlbyname这里正在使用的证据充分的,所以我不认为苹果可以使用规则号2.5对付你。 然而,仍然有规则的编号17.1:

17.1应用未取得用户的事先许可和向用户提供访问信息有关的数据将如何以及在何处使用不能发送关于用户数据

这是值得商榷的,如果设备平台是有关用户或没有。 我的建议是你应该提交应用假设你不违反17.1和从来没有提到这一点。 这是极有可能的是,评审会不知道你在做什么幕后。



Answer 3:

你提到的UIDeviceHardware是不够好,但有点过时。 你可以试试这个变得更加的苹果风格,所以可以通过他们会喜欢它更多。



文章来源: How do I detect which iOS device my user is using?