基于 flex/yacc 的 iOS 热更新框架

2019-07-30 18:14:47 +08:00
 dKingbin

English README

功能特点

基本用法

动态执行 block

NSString* text = @" \
	__block int result = 0;\
	UIView* view = [[UIView alloc]init];\
	void(^blk)(int value) = ^(int value){\
		view.tag = value;\
	};\
blk(1024);\
return view.tag;";

ASTNode* root = [ASTUtil parseString:text];
[ASTUtil linkContextToRoot:root];
ASTVariable* result = [root execute];
NSAssert([result.value doubleValue] == 1024, nil);

动态执行 C 函数

int echo(int value) {
	return value;
}

NSString* text = @" \
[OCCfuntionHelper defineCFunction:@\"echo\" types:@\"int, int\"]; \
return echo(1024);";

ASTNode* root = [ASTUtil parseString:text];
[ASTUtil linkContextToRoot:root];
ASTVariable* result = [root execute];
NSAssert([result.value doubleValue] == 1024, nil);

动态添加 Property

NSString* text = @" \
[OCCfuntionHelper defineCFunction:@\"objc_setAssociatedObject\" types:@\"void,id,void *,id,unsigned int\"];\
[OCCfuntionHelper defineCFunction:@\"objc_getAssociatedObject\" types:@\"id,id,void *\"];\
NSString* key = @\"key\"; \
objc_setAssociatedObject(self, key, @(1024), 1);\
return objc_getAssociatedObject(self, key);";

ASTNode* root = [ASTUtil parseString:text];
[ASTUtil linkContextToRoot:root];
ASTVariable* result = [root execute];
NSAssert([result.value doubleValue] == 1024, nil);

已支持语法

TODO

联系方式

License

Copyright (c) 2019 dKingbin
Licensed under MIT or later

DynamicOC required features are based on or derives from projects below:

2637 次点击
所在节点    iOS
2 条回复
mrrobot97
2019-07-30 23:51:22 +08:00
你觉得 App Store 会容忍这么干吗
wobuhuicode
2019-07-31 16:09:44 +08:00
可以列出已经上线了的 APP 吗,想去举报

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/587603

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX