2012-01-12 16 views
19

C'è qualche informazione corrente su come il metodo swizzling è legale/illegale su App Store?App Store - Metodo Swizzling Legality

L'unico punto di dati che posso trovare è il Three20 framework shakeup un po 'indietro, che è iniziato con questo avviso:

L'applicazione, xxx, attualmente inviato ad App Store sta usando method_exchangeImplementations di scambiare l'attuazione di Apple ha fornito le API con le proprie implementazioni. A causa delle imminenti modifiche di , questo comportamento nell'applicazione potrebbe causare un arresto anomalo o causare la perdita di dati utente su iPhone OS 4.0.

xxx utilizza method_exchangeImplementations per lo scambio dell'implementazione di dealloc con il metodo ttdealloc. Inoltre, scambia l'implementazione del metodo popViewControllerAnimated: con il tuo metodo popViewControllerAnimated2 :.

Si prega di risolvere immediatamente questo problema e caricare il nuovo binario su iTunes Connect. Possiamo rimuovere la domanda se riteniamo che lo sia prudente o necessario.


Quando sto cercando in giro, ogni conversazione recente posso trovare circa swizzling e l'app store sembra fare riferimento lo stesso incidente Three20. L'avviso sembra essere piuttosto specifico e mi chiedo se il problema riguardasse specifici problemi di modifica con le modifiche apportate da Three20 o se method_exchangeImplementations fosse universalmente bannato.

Esistono altri punti dati relativi al fatto che la pratica sia consentita o meno? Ci sono degli sviluppatori con le app nello store che stanno utilizzando lo swizzling?

Grazie!

+1

Che cosa esattamente vuoi veramente fare? Nella maggior parte dei casi, il metodo swizzling è un hack che potrebbe essere evitato con un design migliore. – JeremyP

+4

Sto votando per chiudere questa domanda come off-topic perché riguarda le politiche di rifiuto di Apple. Vedi anche: [Perché non siamo il supporto clienti per la tua azienda preferita] (https://meta.stackoverflow.com/questions/255745/why-were-not-customer-support-for-your-favorite-company). – FelixSFD

risposta

7

AFNetworking, un lib ampiamente (IMO) utilizzato per le richieste di rete, utilizzava la swizzling almeno fino alla versione 1.3.4 per supportare codici di stato e tipi di contenuto accettabili aggiuntivi nei metodi di classe.

Quindi sembra legittimo farlo.

Nota: hanno utilizzato class_replaceMethod e non method_exchangeImplementations.

+0

Ho effettuato una ricerca dell'area di lavoro per 'method_exchangeImplementations' in AFNetworking non ho trovato alcun riferimento.AFNetworking utilizza la libreria di runtime solo per alcune categorie della vista e utilizza il metodo objc_setAssociatedObject per l'associazione di valori chiave. Non è questo il metodo swizzling. –

+0

AFNetworking ha subito un rehaul importante, forse la versione 2.0 funziona senza swizzling. Tuttavia, fino alla versione 1.3.4 inclusa ha usato class_replaceMethod prima in AFHTTPRequestOperation. –

+0

per favore aggiorna la tua risposta allora. –

0

Normalmente il swizzling sarebbe per il debug per vedere quando viene chiamato un metodo specifico, oppure in situazione non è possibile creare una sottoclasse o utilizzare una categoria per esso. Se non hai un programma molto serrato per mettere la tua applicazione nell'app store, immagino che potresti provare a inviare la tua applicazione usando il metodo swizzling e vedere se è accettata. Non tutte le applicazioni vengono esaminate allo stesso modo, a volte è proprio all'altezza del revisore.

+0

qualcuno ha provato questo? o sarò il primo a scoprirlo? –

+1

@ShayanRC è legittimo, puoi usare lo swizzling. – Peres