gpt4 book ai didi

ios - 如何在 iOS8 中使用 IOKit 获取设备的序列号作为 IOPlatformSerialNumber 给出 nil 值

转载 作者:塔克拉玛干 更新时间:2023-11-02 09:15:16 25 4
gpt4 key购买 nike

我想知道如何在 iOS8 中使用 IOKit 获取设备的序列号?我使用了 UIDevice+serialNumber 并且我能够在 iOS6 和 7 中获取序列号。在 iOS8 中,platformSerialNumber 的值在以下行中变为 nil:

CFTypeRef platformSerialNumber = IORegistryEntryCreateCFProperty(platformExpertDevice,CFSTR("IOPlatformSerialNumber"), kCFAllocatorDefault, 0);

我正在使用:https://gist.github.com/0xced/566994

注意:我的应用不会进入应用商店,它是内部应用。所以我正在寻找永远不会改变的更具体的东西,无论是字符串还是整数

最佳答案

从 iOS 8 开始,序列号等硬件信息受到保护。如果您想检索此值,则必须使用私有(private)权利对您的应用程序进行签名。我不确定是否可以在企业应用程序中使用私有(private)权利,而且它们肯定不能用于 App Store 应用程序,但这个问题带有越狱标签,所以我会为此提供解决方案。

如果您希望序列号跟踪您公司拥有的设备,我建议您利用 Apple 的移动设备管理 (MDM) 等服务。这使您可以访问有关设备的大量信息,并允许您远程管理它们。

如果您只是在寻找一个永远不会因其他目的而改变的标识符,我建议您改用设备的 UDID。我能够在没有授权的情况下在我的设备上获得这个,但这可能是因为我的手机被越狱了。其他人告诉我,权利实际上是必需的。有关这方面的更多信息,请访问 iPhoneDevWiki .

代码:

- (NSString *)udid
{
void *gestalt = dlopen("/usr/lib/libMobileGestalt.dylib", RTLD_GLOBAL | RTLD_LAZY);
CFStringRef (*MGCopyAnswer)(CFStringRef) = (CFStringRef (*)(CFStringRef))(dlsym(gestalt, "MGCopyAnswer"));
return CFBridgingRelease(MGCopyAnswer(CFSTR("UniqueDeviceID")));
}

权利:

<key>com.apple.private.MobileGestalt.AllowedProtectedKeys</key>
<array>
<string>UniqueDeviceID</string>
</array>

关于ios - 如何在 iOS8 中使用 IOKit 获取设备的序列号作为 IOPlatformSerialNumber 给出 nil 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27602368/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com