项目作者: alibaba

项目描述 :
iOS efficient AOP Library using C++ and libffi
高级语言: C
项目地址: git://github.com/alibaba/Lokie.git
创建时间: 2019-07-01T06:37:52Z
项目社区:https://github.com/alibaba/Lokie

开源协议:MIT License

下载


LOKIE

A framework for building iOS AOP.

Support iOS 8.0+

building Lokie

  • open Lokie.xcodeproj with Xcode and build it
  • defualt configuration will build Lokie.framework for you
  • you can use Lokie.framework as other normal framework in your project
  • Enjoy it.

Use Lokie

API

  1. //! Lokie.h
  2. #import <Foundation/Foundation.h>
  3. typedef enum : NSUInteger {
  4. LokieHookPolicyBefore = 1 << 0,
  5. LokieHookPolicyAfter = 1 << 1,
  6. LokieHookPolicyReplace = 1 << 2,
  7. LokieHookPolicyPatchEnv = 1 << 3,
  8. } LokieHookPolicy;
  9. @interface NSObject (Lokie)
  10. + (BOOL) Lokie_hookMemberSelector:(NSString *) selecctor_name
  11. withBlock: (id) block
  12. policy:(LokieHookPolicy) policy;
  13. + (BOOL) Lokie_hookClassSelector:(NSString *) selecctor_name
  14. withBlock: (id) block
  15. policy:(LokieHookPolicy) policy;
  16. + (BOOL) Lokie_resetSelector:(NSString *) selector_name withType:(BOOL) isMember;
  17. + (NSArray *) LokieErrorStack;
  18. @end

How to use

  1. #include <Lokie/Lokie.h>
  2. //! insert something before UIViewController::viewDidAppear:
  3. Class cls = NSClassFromString(@"UIViewController");
  4. [cls Lokie_hookMemberSelector:@"viewDidAppear:" withBlock:^(id target, BOOL ani){
  5. NSLog(@"LOKIE: before viewDidAppear");
  6. }policy:LokieHookPolicyBefore];
  7. [cls Lokie_hookMemberSelector:@"viewDidAppear:" withBlock:^(id target, BOOL ani){
  8. NSLog(@"LOKIE: after viewDidAppear");
  9. }policy:LokieHookPolicyAfter];
  10. //! we can insert some code before/after
  11. Class cls = NSClassFromString(@"MyViewController");
  12. [cls Lokie_hookMemberSelector:@"initWithConfig:"
  13. withBlock:^(id target, NSDictionary *param){
  14. NSLog(@"%@", param);
  15. NSLog(@"Lokie: %@ is created", target);
  16. } policy:LokieHookPolicyAfter];
  17. //! hooked selector does not has any param
  18. [cls Lokie_hookMemberSelector:@"dealloc" withBlock:^(id target){
  19. NSLog(@"Lokie: %@ is dealloc", target);
  20. } policy:LokieHookPolicyBefore];