내 프로젝트에 오디오 속성 리스너를 추가하는 라이브러리가 있습니다. 그렇게 할 수 없도록 차단할 수 있어야하지만 소스 코드가 없습니다.AudioSessionAddPropertyListener를 swizzle하는 방법
나는 NSNotificationCenter에서 addObserver 메소드를 사용하기 전에 미리 살펴 봤다. AudioSessionAddPropertyListener에 대해 동일한 작업을 수행하도록 도와 줄 수 있습니까? 통화에 추가하려는 메소드가 내 화이트리스트와 일치하지 않으면 차단하려고합니다. 그렇지 않으면 원래 메서드를 호출합니다.
로드 기능을 어떤 클래스에 과부하해야하는지 알지 못합니다. 나는 Audio.h를보고 있습니다. 나는 pseudo/real/badlyNamed 코드를 추가하여 내가하려는 것을 볼 수있다.
#import <AudioToolbox/AudioToolbox.h>
@interface AuidoClassUmm (SOMETHING)
@end
+ (void) load
{
Method original, swizzled;
original = class_getInstanceMethod(self, @selector(AudioSessionAddPropertyListener:selector:name:object:));
swizzled = class_getInstanceMethod(self, @selector(swizzled_AudioSessionAddPropertyListener:selector:name:object:));
method_exchangeImplementations(original, swizzled);
}
-(void) swizzled_AudioSessionAddPropertyListener:selector:name:object:
{
if(//funciton object I don't like)
{
return;
}
else
{
// Calls the original addObserver function
[self swizzled_AudioSessionAddPropertyListener::notificationObserver selector:notificationSelector name:notificationName object:notificationSender];
}
}
앗의 터무니없는 (당신이 그것을 스위 즐링 (swizzle) 수있다하더라도, 그것은 거의 확실. 나쁜 생각 것),하지만 난 그것을 할 수없는 것을 알 수있다. – Gandalf458