objective-c ios app-store swizzling

objective c - App Store-Método Swizzling Legality



objective-c ios (2)

¿Existe alguna información actualizada sobre si la combinación de métodos es legal / ilegal en la App Store?

El único punto de datos que puedo encontrar es la reorganización del marco Three20 hace un tiempo, que comenzó con este aviso:

Su aplicación, xxx, actualmente publicada en la App Store está utilizando implementaciones de cambio de método para intercambiar la implementación de las API proporcionadas por Apple con sus propias implementaciones. Debido a los próximos cambios, este comportamiento en su aplicación puede provocar un bloqueo o la pérdida de datos del usuario en el iPhone OS 4.0.

xxx utiliza method_exchangeImplementations para intercambiar la implementación de dealloc con su método ttdealloc. También intercambia la implementación del método popViewControllerAnimated: con su método popViewControllerAnimated2 :.

Resuelva este problema inmediatamente y cargue su nuevo binario en iTunes Connect. Podemos eliminar su solicitud si creemos que hacerlo es prudente o necesario.


Cuando busco, todas las conversaciones recientes que puedo encontrar sobre swizzling y la tienda de aplicaciones parecen hacer referencia al mismo incidente de Three20. El aviso parece ser bastante específico, y me pregunto si el problema fue sobre cambios específicos, problemas con los cambios que Three20 había realizado o si method_exchangeImplementations está prohibido universalmente.

¿Hay otros puntos de datos sobre si se permite o no la práctica? ¿Hay algún desarrollador con aplicaciones en la tienda que esté usando swizzling?

¡Gracias!


AFNetworking, una biblioteca ampliamente utilizada (IMO) para solicitudes de red, usó swizzling hasta al menos la versión 1.3.4 para admitir códigos de estado y tipos de contenido aceptables adicionales en métodos de clase.

Así que parece legítimo hacerlo.

Nota: utilizaron class_replaceMethod y no method_exchangeImplementations.


Normalmente, swizzling sería para la depuración para ver cuándo se llama a un método específico, o en una situación en la que no se puede crear una subclase de algo o utilizar una categoría para ello. Si no tiene un horario apretado para poner su aplicación en la tienda de aplicaciones, supongo que podría intentar enviar su aplicación utilizando el método swizzling y ver si se acepta. No todas las solicitudes se revisan de la misma manera, a veces solo depende del revisor.