Я хочу иметь возможность создавать GUID / UUID на iPhone и iPad.
Цель состоит в том, чтобы иметь возможность создавать ключи для распределенных данных, которые являются уникальными. Есть ли способ сделать это с помощью iOS SDK?
Есть статья о том, как гарантировать, что вы никогда не потеряете сгенерированный UUID, даже для iOS 5 и более поздних версий, используя KeyChain. blog.onliquid.com/…
РЕДАКТИРОВАТЬ: -[UIDevice uniqueIdentifier]теперь устарела и приложения отклоняются из App Store для его использования. Метод ниже является сейчас предпочтительным подходом.
Если вам нужно создать несколько UUID, просто используйте этот метод (с ARC):
[[UIDevice currentDevice] uniqueIdentifier] устарела с iOS 5, и теперь Apple отклоняет приложения, которые его используют (по состоянию на март 2012 года). Остальная часть ответа все еще точна.
Горм
13
Обдумывая этот вопрос некоторое время, я почти уверен, что оригинальный вопрос был не об уникальном идентификаторе устройства, а о том, чтобы просто получить полезный общий уникальный идентификатор для чего-либо.
Райан МакКуайг
12
Чтобы сделать это ARC-совместимым, вы должны привести строковый объект и удалить вызов autorelease. Другими словами, добавьте приведение: NSString * string = (__bridge_transfer NSString *) CFUUIDCreateString (NULL, theUUID);
Поль де Ланж,
65
Начиная с iOS 6 вы можете использовать: NSString * UUID = [[NSUUID UUID] UUIDString];
Симметричный
1
Если я использую [[NSUUID UUID] UUIDString]; в iOS7 и выше, не будет ли мое приложение отклонено Apple?
Whoami
100
Вот простой код, который я использую, совместимый с ARC.
Честно говоря, это должен быть принятый ответ, первоначальный вопрос, заданный для генератора GUID или UUID, и каждый ответил, как получить UDID телефона. Универсальный уникальный идентификатор (UUID) и Уникальный идентификатор устройства (UDID) - это не одно и то же.
Джо
1
здесь прямая линия NSString * UUID = [[NSUUID UUID] UUIDString];
Это, безусловно, самое простое решение. Если вам не нужна поддержка до iOS 6, используйте это. Я использовал основные данные, сгенерированные постоянные идентификаторы, но это намного лучше. +1
Шон
Отлично, спасибо за это! Это мой +1 ответ за день :)
justinhartman
Он меняется каждый раз, когда я запускаю приложение в симуляторе.
Гаджендра К Чаухан
46
Просматривая документацию Apple Developer, я обнаружил, что объект CFUUID доступен в iPhone OS 2.0 и более поздних версиях.
Самая простая техника заключается в использовании NSString *uuid = [[NSProcessInfo processInfo] globallyUniqueString]. См. Ссылку на класс NSProcessInfo .
Это возвращает уникальный идентификатор для процесса. Это не имеет никакого сходства с GUID. Из документов: «Идентификатор включает в себя имя хоста, идентификатор процесса и метку времени, что обеспечивает уникальность идентификатора для сети»
Мэтт Спрэдли,
Возможно, ты прав. Это прагматичный однострочник, и, вероятно, не такой пуленепробиваемый, как CFUUID. Любой, кому нужна большая строгость, должен перейти на CoreFoundation.
Ответы:
Возвращает уникальный идентификатор вашего iPhone.
Если вам нужно создать несколько UUID, просто используйте этот метод (с ARC):
РЕДАКТИРОВАТЬ: 29 января 2014: Если вы ориентируетесь на iOS 6 или более позднюю версию, теперь вы можете использовать гораздо более простой метод:
источник
Вот простой код, который я использую, совместимый с ARC.
источник
В iOS 6 вы можете легко использовать:
Более подробная информация в документации Apple
источник
Просматривая документацию Apple Developer, я обнаружил, что объект CFUUID доступен в iPhone OS 2.0 и более поздних версиях.
источник
В Свифте :
источник
Самая простая техника заключается в использовании
NSString *uuid = [[NSProcessInfo processInfo] globallyUniqueString]
. См. Ссылку на класс NSProcessInfo .источник
В Swift 3.0
источник
Я загрузил мою простую, но быструю реализацию класса Guid для ObjC здесь: GUID obj-c
Он также может анализировать различные форматы строк.
источник