我正在尝试修补Apple已发现的this安全漏洞。只是,它们提供的示例代码(VerificationController)使用以下行:
[UIDevice currentDevice].uniqueIdentifier
已弃用且已从应用商店拒绝了应用。知道这是否还好吗?或者这里发生了什么?
答案 0 :(得分:4)
Apple更新了示例代码,删除了使用了UDID的行。
答案 1 :(得分:1)
根据我的理解,Apple不希望开发人员再次访问UDID(唯一设备标识符),因为它不在应用程序的sandbox内。
考虑用户获取新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
存储为刚刚创建的实例的属性。
答案 2 :(得分:0)
您在哪里听说应用因使用而被拒绝了?也许他们是恶意使用它,但它是一个公共API。另外,请查看您链接到的页面上的注释。
注意:此列表使用符号kSecTrustInfoExtendedValidationKey和SecTrustCopyInfo,它们不是公共API。您的应用程序可以将它们用于此特定目的。
如果他们甚至愿意让你为此目的使用私人API,我怀疑他们会关心公共API。
答案 3 :(得分:0)