Logos介绍以及用法【未完待续】

参考链接
Logos wiki


定义

Logos是theteosdevelopment套件的一个组件,它允许使用一组特殊的预处理器指令轻松而清晰地编写方法挂钩代码。


概述

Logos提供的语法极大地简化了MobileSubstrate扩展(“tweaks”)的开发,它可以在整个OS中钩住其他方法。在这种情况下,“方法钩住”是指用于替换或修改在电话上的其他应用程序中找到的类的方法的技术。


标识指令列表

######Block level

此类别中的指令打开一个代码块,该代码块必须由%enddirective关闭(如下所示)。这些不应该存在于函数或方法内。

  • %group

%group Groupname

组用于条件初始化或代码组织。分组对于管理与旧代码的向后兼容性非常有用。以名称groupname开始一个钩子组。组不能在另一个%groupblock内。所有未分组的挂钩都在隐式“未分组”组中。如果没有其他组,将为您初始化未分组的组。您可以使用%init指令手动初始化它。其他组必须使用%init(Groupname)指令初始化。

%group iOS8
%hook IOS8_SPECIFIC_CLASS
	// your code here
%end // end hook
%end // end group ios8

%group iOS9
%hook IOS9_SPECIFIC_CLASS
	// your code here
%end // end hook
%end // end group ios9

%ctor {
	if (kCFCoreFoundationVersionNumber > 1200) {
		%init(iOS9);
	} else {
		%init(iOS8);
	}
}
  • %hook

%hook Classname

打开类名称dclassname的挂钩块。可以在%groupblock中。下面是一个简单的例子:

%hook SBApplicationController
-(void)uninstallApplication:(SBApplication *)application {
	NSLog(@"Hey, we're hooking uninstallApplication:!");
	%orig; // Call the original implementation of this method
	return;
}
%end
  • %new

%new
%new(signature)

通过在方法定义上方添加此指令,将新方法添加到挂接类或子类中。signatureis是新方法的Objective-C类型编码;如果省略,则将生成一个新方法。必须在%hook钩块内。

  • %subclass

%subclass Classname: Superclass

子类块-该类在运行时创建,并用方法填充。IVAR还没有被支持(使用关联对象)。对于超类中不存在的方法,需要%New。要实例化新类的对象,可以使用%coperator。可以在%group block中。下面是一个例子

%subclass MyObject : NSObject

- (id)init {
	self = %orig;
	[self setSomeValue:@"value"];
	return self;
}

//the following two new methods act as `@property (nonatomic, retain) id someValue;`
%new
- (id)someValue {
	return objc_getAssociatedObject(self, @selector(someValue));
}

%new
- (void)setSomeValue:(id)value {
	objc_setAssociatedObject(self, @selector(someValue), value, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
}

%end

%ctor {
	MyObject *myObject = [[%c(MyObject) alloc] init];
	NSLog(@"myObject: %@", [myObject someValue]);
}
  • %property

%property (nonatomic|assign|retain|copy|weak|strong|getter|setter) Type name;

将一个属性添加到一%subclass个子类,就像您将用@ propertyto一个普通OC子类一样,以及向%Hook中的现有类添加新属性。必须在%subclass %Hook中。

  • %end

关闭组/钩子类块。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值