UUID для приложения на iOS5

Возможный дубликат:
UIDevice uniqueIdentifier устарел - Что делать теперь?

Как я надеюсь, вы знаете, uniqueIdentifier in UIDevice устарел в iOS5. Я ищу в основном те же функции для iOS5.

Из документации я понимаю, что Apple хочет, чтобы мы (разработчики) создали наш собственный UUID (используя CFUUIDCreate, я думаю) и сохранили его в NSUserDefaults. Это, однако, заставляет меня немного дрожать и совсем не чувствовать себя в безопасности. Чувствует себя немного бессмысленным, чтобы иметь UUID в этом случае.

Причина, по которой мне нужен UUID, заключается в том, что я отправляю информацию о связке, включая UUID, на мои серверы в процессе auth и хотел бы пропустить некоторые шаги, если сервер может "угадать", с кем пользователь в следующий раз приложение запускается или переустанавливается, или другое приложение реализует мою библиотеку. CFUUIDCreate, похоже, не помогает мне в этом.

Я быстро просмотрел gekitz, но, как я понимаю, он основывает его исключительно на MAC-адресе Ethernet-карта в телефоне. Это не подходит, так как я смутно чувствую, что MAC-адрес изменчив. uniqueIdentifier в UIDevice был

Буквенно-цифровая строка, уникальная для каждого устройства на основе различных деталей оборудования.

Currenly Я написал этот код, который извлекает UUID. Но как только я чищу в XCode и переустанавливаю приложение на телефоне, я получаю новый UUID.

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSString *UUID = @"";

if (![defaults valueForKey:@"UUID"])
{
    CFUUIDRef UUIDRef = CFUUIDCreate(kCFAllocatorDefault);
    CFStringRef UUIDSRef = CFUUIDCreateString(kCFAllocatorDefault, UUIDRef);
    UUID = [NSString stringWithFormat:@"%@", UUIDSRef];

    [defaults setObject:UUID forKey:@"UUID"];
}
else {
    UUID = [defaults valueForKey:@"UUID"];
}

[deviceInformation setObject:UUID forKey:@"UUID"];

Подводя итог, мой вопрос следующий:
Есть ли какой-то солидный способ создания UUID, основанный на устройстве, которое "трудно" вмешиваться, и дает мне в качестве получателя немного чего-то, на что можно рассчитывать и доверять? Это не должно быть основано на устройстве, может быть основано на приложении в качестве UUID приложения, если оно остается неизменным после повторной установки.

Ответ 1

До сих пор MAC, по-видимому, был единственным известным "стабильным" способом идентификации устройства.

Посмотрите Erica Sadun UIDevice(Hardware) category, вы заметите, что единственной полезной вещью для идентификации является MAC.

У нее также есть категория UIDevice(IOKit_Extensions), которая предоставляет IMEI и серийный номер. Однако IOKit является частным API. Эрика написала:

Как читатель iPhone Matt Drance написал в твиттере: "IOKit не публикуется на iPhone. Отсутствие заголовков и документов редко является надзором".

Таким образом, использование IOKit может привести к отклонению.

Насколько я знаю, пользователю не удастся изменить MAC без джейлбрейка устройства (и тогда он может делать все, что захочет). Поэтому мое предложение состоит в том, чтобы игнорировать джейлбрейкеры и просто использовать UUID на основе MAC.

Внимание! API-интерфейсы MAC-адресов не будут работать в iOS 7.