Come controllare i metodi non documentati forniti da Apple?

1

I seguenti strumenti sono forniti da Apple

  • dlopen
  • dlsym
  • objc_getClass
  • sel_registerName
  • objc_msgSend

Quelli elencano i selettori Objective-C, o stringhe. I selettori Objective-C sono memorizzati in una regione speciale del binario, e quindi Apple potrebbe estrarre il contenuto da lì e controllare se hai usato alcuni metodi Objective-C non documentati.

  • Come utilizzare questi strumenti per trovare metodi Objective-C non documentati?

Modifica Recentemente, una delle mie app è stata respinta a causa dell'utilizzo di metodi non documentati.

-[UIDevice setOrientation]

Poiché i selettori sono indipendenti dalla classe di messaggistica, anche se la mia classe personalizzata definisce -setOrientation : irrilevante per UIDevice, ci sarà la possibilità di essere rifiutati.

    
posta Md Mahbubur Rahman 01.10.2012 - 19:59
fonte

1 risposta

3

Non devi cercare molto duro nel Riferimento al runtime Objective-C per capire come fare cose come ottenere un elenco di tutte le classi registrate, ottenere tutti i metodi per un dato classe, ecc. Da ciò è possibile generare un elenco di metodi tutti . Al runtime non interessa quali siano i metodi documentati, quindi, per scegliere i metodi non documentati, è necessario anche creare un elenco dei metodi documentati, magari scansionando i file di intestazione e quindi confrontare i due liste.

Ho visto come tutto ciò potrebbe essere utile se volessi creare uno strumento che ti avvisasse se hai usato un metodo non documentato nel tuo codice. Ma poi, se non vai a curiosare nel runtime, la possibilità di utilizzare un metodo non documentato per errore nel tuo codice è piuttosto piccola, quindi non sono sicuro che valga la pena di dare il massimo.

Since, selectors are independent from the class you're messaging, even if my custom class defines -setOrientation: irrelevant to UIDevice, there will be a possbility of being rejected.

Non è vietato utilizzare metodi con lo stesso nome dei metodi non documentati delle classi fornite da Apple. Quello che non puoi fare è chiamare metodi non documentati delle classi fornite da Apple. Il motivo per cui la tua app è stata rifiutata, presumibilmente, è che hai inviato -setOrientation: a un'istanza di UIDevice . Se invece avessi inviato quel messaggio a una classe della tua creazione, non credo che tu sia stato rifiutato. Non ho alcuna conoscenza approfondita, ma ritengo ragionevolmente certo che Apple non rilevi l'uso di metodi non documentati semplicemente elencando i selettori usati nella tua app.

    
risposta data 01.10.2012 - 20:34
fonte

Leggi altre domande sui tag