我正在尝试修补Apple 发现的这个安全漏洞。只是,他们提供的示例代码(VerificationController)使用了这一行:
[UIDevice currentDevice].uniqueIdentifier
已被弃用,并且应用商店已拒绝应用。知道这是否还可以吗?或者这里发生了什么?
我正在尝试修补Apple 发现的这个安全漏洞。只是,他们提供的示例代码(VerificationController)使用了这一行:
[UIDevice currentDevice].uniqueIdentifier
已被弃用,并且应用商店已拒绝应用。知道这是否还可以吗?或者这里发生了什么?
Apple 更新了示例代码,删除了使用 UDID 的行。
据我了解,Apple 不希望开发人员再访问 UDID(唯一设备标识符),因为它不在应用程序的沙箱中。
想一想用户获得新的 iOS 设备(具有不同的 UDID)的情况。仅仅因为有新设备并不一定意味着有新用户。此外,如果某人获得了其他人以前使用过的设备,我们不想假设因为我们拥有相同的设备,所以必须是同一个用户使用它。
Apple 建议为您的应用程序使用 UUID(通用唯一标识符)。Apple 之前允许您使用 UDID 的唯一原因是因为他们还没有实现 UUID 或者没有考虑到上述情况(据我所知)。UUID 是为您要跟踪的对象(例如用户)生成的。
基本上,Apple 的心态是您应该跟踪用户(或其他实例),而不是设备。
要生成 UUID,请尝试将以下内容作为类方法包含在内:
+ (NSString *)GetUUID
{
CFUUIDRef uuidReference = CFUUIDCreate(kCFAllocatorDefault);
NSString *theUUID = [(NSString *)CFUUIDCreateString(kCFAllocatorDefault, uuidReference) autorelease];
CFRelease(uuidReference);
return theUUID;
}
根据我的经验,我在方法中调用了这个方法,init
并将结果存储NSString
为刚刚创建的实例的属性。
您从哪里听说应用程序因为使用它而被拒绝?也许他们恶意使用它,但它是一个公共 API。 另外,请查看您链接到的页面上的注释。
注意:此清单使用符号 kSecTrustInfoExtendedValidationKey 和 SecTrustCopyInfo,它们不是公共 API。您的应用可以将它们用于此特定目的。
如果他们甚至愿意让您为此目的使用私有 API,我怀疑他们会关心公共 API。
Apple 对 UDID 的问题始终是他们认为它是私人信息,因此他们拒绝将其发送到例如服务器的应用程序,而无需事先征得许可。如果您只是在本地使用它,我认为您不会遇到麻烦。