2012-03-29 11 views
6

Quindi apparentemente Apple ha iniziato a rifiutare le app che usano [UIDevice uniqueIdentifier]. Ho sentito rapporti di app rifiutate e approvate la scorsa settimana che la usano (alcune riescono, altre no). Tuttavia, nessuna delle principali reti pubblicitarie (che genera entrate per la mia app) è ancora stata pubblicata con un'API che non utilizza l'UDID. Tutte le loro API che sono incluse nella mia app lo usano. Tutti dicono che stanno lavorando su una nuova API e uscirà presto, ma potrebbero essere trascorsi alcuni mesi.In che modo Apple rileva l'accesso UDID durante la revisione dell'app?

Mi sembra molto strano che Apple applichi questa politica tramite il processo di revisione dell'app, piuttosto che attraverso una nuova versione del sistema operativo che semplicemente non lo consente (e le persone hanno tempo per programmare contro durante la beta) .

Detto ciò, la mia domanda è: in che modo Apple rileva esattamente se si accede all'UDID durante la revisione dell'app? Eseguono in qualche modo la scansione del bundle per verificare se la chiamata è presente o monitorano le chiamate di sistema effettivamente effettuate mentre testano l'app? Stavo pensando di non accedere alle API pubblicitarie se l'utente vuole pagare o dare loro la scelta di pubblicare annunci supportati e quindi fornire il loro UDID. Ma, devo capire se Apple rifiuta basato su [UIDevice uniqueIdentifier] semplicemente compilato nel tuo codice, o se rileva in base alla chiamata [UIDevice uniqueIdentifier] durante il test di revisione dell'app.

Si prega di non rispondere a questa domanda con i motivi per cui non si dovrebbe usare [UIDevice uniqueIdentifier] o come creare i propri UDID, ecc. Il mio problema sono le librerie di terze parti che richiedono che non abbiano ancora un soluzione alternativa. La domanda è: in che modo Apple rileva l'accesso UDID durante la revisione dell'app?

+1

"piuttosto che attraverso una nuova versione del sistema operativo che semplicemente non lo consente", ma Apple non ha potuto utilizzarlo. ;) – Joel

+0

Rimuovere l'API, senza imporre agli sviluppatori di aggiornare prima le app, interromperebbe le app approvate e acquistate attualmente in esecuzione sui dispositivi dei clienti, potenzialmente creando clienti molto insoddisfatti dell'aggiornamento del sistema operativo. – hotpaw2

risposta

7

È noto che utilizzano l'analisi statica, che esegue fondamentalmente una scansione del file binario compilato per le versioni compilate delle chiamate a metodi specifici. Lo usano anche per rilevare chiamate verso API private. Potrebbe essere possibile ingannare l'analisi statica costruendo selettori dalle stringhe in modi creativi. Anche se questo non è in alcun modo onesto o raccomandato.

Ma il metodo più affidabile è molto probabilmente tramite un proxy HTTP, attraverso l'utilizzo della vostra app possono osservare il traffico HTTP per qualsiasi UDID che viene inviato. Che potrebbe essere ottenuto da hashing o crittografia 2way. Anche questo non sarebbe onesto o raccomandato.

E quando uscirà iOS6 quest'estate, il metodo sarà probabilmente rimosso completamente, rendendo completamente confusa l'offuscazione del suo utilizzo.

+0

Le API della rete pubblicitaria di terze parti sono precompilate in modo che non ci sia modo di "offuscare" la chiamata a [UIDevice uniqueIdentifier] all'interno del loro codice sorgente. Sto semplicemente pensando di dare all'utente l'opzione, piuttosto che connettersi all'API automaticamente all'avvio. Ma buona risposta. Grazie. – user1301928

2

È stato segnalato che Apple utilizza le scansioni statiche per tutte le firme dei metodi utilizzate all'interno di un'app (al punto di rifiutare occasionalmente un'applicazione per l'utilizzo della stessa firma del messaggio per una classe personalizzata di uno sviluppatore come quella di uno di Apple non pubblico API.)

Inoltre, è stato anche segnalato che eseguono app in revisione su hardware speciale e versioni di SO non rilasciate, che possono includere o meno strumenti di qualche tipo, ad esempio sul traffico di rete.