2

我正在开发 iOS 上的自定义越狱解决方案。我正在尝试能够在 Activator 中添加新触发器。具体来说,我正在尝试为主页按钮定义一个轻按释放轻按并按住的行为,尽管这在理论上适用于任何设备输入。

现在我精通 MobileSubstrate,它可以让您在运行时对现有类进行方法调配(有关更多信息,请参见此处:http: //iphonedevwiki.net/index.php/MobileSubstrate)以及提供其他功能和好处。但是,我不确定如何将其插入 Activator,因为我无法访问代码,虽然我可以使用 ClassDump 导出 Activator 的标头并筛选它们,但 Activator 是一个非常复杂的应用程序,它是为什么与其花一周时间浏览这一切,我希望其他人知道粗略的“注入点”(因为没有更好的术语),这可以让我朝着正确的方向前进。

请注意,虽然我可以简单地在系统级别监听我的操作,但这样做会使 Activator 短路,这会破坏我想要完成的目的,即添加一个可以activator 一起使用的新操作:如果你愿意的话,激活器扩展。

那么有没有人有任何关于实现这一目标的信息或一个很好的起点?我希望有一点方向,所以我不必撕开代码的整个标头类转储。

4

1 回答 1

0

看来您想做类似LAEvent. 以下是一些可以帮助您开始的信息:

  1. 实施LAEventDataSource协议

    @protocol LAEventDataSource <NSObject>
    
    @required
    - (NSString *)localizedTitleForEventName:(NSString *)eventName;
    - (NSString *)localizedGroupForEventName:(NSString *)eventName;
    - (NSString *)localizedDescriptionForEventName:(NSString *)eventName;
    
    @optional
    - (BOOL)eventWithNameIsHidden:(NSString *)eventName;
    - (BOOL)eventWithName:(NSString *)eventName isCompatibleWithMode:(NSString *)eventMode;
    
    @end
    
  2. 注册事件数据源

    @interface LAActivator : NSObject
    - (void)registerEventDataSource:(id<LAEventDataSource>)dataSource forEventName:(NSString *)eventName;
    @end
    

    现在您的活动availableEventNamesLAActivator

    @property (nonatomic, readonly) NSArray *availableEventNames;
    
  3. 发送事件

    @interface LAEvent : NSObject<NSCoding>
    + (id)eventWithName:(NSString *)name;
    + (id)eventWithName:(NSString *)name mode:(NSString *)mode;
    - (id)initWithName:(NSString *)name;
    - (id)initWithName:(NSString *)name mode:(NSString *)mode;
    @end
    
    @interface LAActivator : NSObject
    - (void)sendEventToListener:(LAEvent *)event;
    @end
    
于 2013-07-25T06:50:46.990 回答