2009-11-16 12 views
10

Sono stato rifiutato su App Store per l'utilizzo di variabili di istanza private nella mia app. Gli ivars che presumibilmente sto utilizzando non sono assolutamente accessibili nel mio codice, ma sto usando una o due librerie statiche di terze parti. Come potrei verificare se questi potrebbero effettivamente essere i colpevoli?Rilevamento dell'utilizzo di API private

Aggiornamento:

Apple mi (e librerie 3a parte) di accusa utilizzando le variabili di istanza private nella classe UITouch, tra cui

  • _locationInWindow
  • _tapCount
  • _previousLocationInWindow
  • _timestamp
  • _touchFlags
  • _phase
  • _window
+0

Come di sostituire il terzo librerie parti da non stub offendere e testare se fallisce? –

+1

Non voglio passare 2 cicli di revisione se riesco a ottenerlo in uno – nduplessis

risposta

1

Sto usando uno o due librerie statiche da terzi

Contatto terzi, chiedendo spiegazioni, hanno scritto il codice, che deve sapere cosa c'è lì dentro Potrebbero avere una sezione forum o commenti, dove altri utenti potrebbero aver già espresso queste preoccupazioni, e puoi cercare risposte e alternative.

+0

Ho eseguito entrambi, il fornitore nega l'utilizzo delle API private e non ho riscontrato lamentele simili, ma avrei ancora mi piace sapere per certo – nduplessis

5

È possibile utilizzare nm per cercare quale libreria utilizza lo ivar in questione.

% nm static_lib.a | grep name_of_ivar 

Se si ottiene una linea, credo che con un capitale U, con il nome del ivar probabilmente avete un sospetto.

+0

Esattamente quello che sto cercando, gli darà un colpo. Grazie – nduplessis

+0

OK, quindi ho eseguito nm -a static_lib.a e non sembra che mostri chiamate di messaggi alle classi UIKit, mostra solo qualcosa di simile: U.objc_class_name_NSCharacterSet – nduplessis

+0

Ho letto il tuo aggiornamento. Si può accedere a quei vars in maniera diritta, rendendoli compensi noti dai compilatori ... quindi penso che dovresti concentrarti su quali parti usano roba UITouch. cioè, chi usa/definisce i touchBegin:/touchesMove:/toccaEnd: – epatel

0

Per coloro che hanno molte librerie di terze parti, in grado di controllare il progetto in modo tale nel percorso del progetto, ad esempio se si desidera trovare GraphicsService:

$ find . |grep "\\.a" | xargs grep GraphicsService