Quindi, se non si preoccupano le nuove regole AppStore, ecc ... qui si va:
- (NSString *)getSystemUUID {
io_service_t platformExpert = IOServiceGetMatchingService(kIOMasterPortDefault,IOServiceMatching("IOPlatformExpertDevice"));
if (!platformExpert)
return nil;
CFTypeRef serialNumberAsCFString = IORegistryEntryCreateCFProperty(platformExpert,CFSTR(kIOPlatformUUIDKey),kCFAllocatorDefault, 0);
IOObjectRelease(platformExpert);
if (!serialNumberAsCFString)
return nil;
return (__bridge NSString *)(serialNumberAsCFString);;
}
Attenzione: per
- è necessario aggiungere al vostro
IOKit.framework
progetto in modo che questo funzioni.
- Questo codice è conforme ARC;
- Questo codice è sicuro e restituirà un
nil
NSString
se qualcosa va storto;
- Apple non garantisce che tutti i sistemi futuri dispongano di un numero di serie leggibile da software.
- Gli sviluppatori non devono formulare alcuna ipotesi sul formato del numero di serie come la sua lunghezza o quali caratteri può contenere .
"IOObjectRelease (platformExpert);" può anche essere chiamato all'interno del blocco '! SerialNumberAsCFString'? Leggendo solo il codice, questo sembra necessario. –
@DjS sì, hai un buon punto. Ho fatto una modifica per risolvere questo problema. – TCB13
Cosa succede se ci preoccupiamo delle nuove regole di AppStore? – tofutim