最近我想到了在部署后改变方法实现的想法
当我搜索关于目标c运行时的所有内容时,了解了方法调配方法交换实现等。
我知道有可能https://rollout.io/ 但我的想法是如何自己做简单的Hot Patching。
我的想法是使用webservice调用注入代码。 Web服务应该替代特定方法。 该字符串必须转换为可执行代码
我想知道的是...... 如何在现有的企业应用方法中注入代码。
对于前: 在目标c
中考虑这种方法-(void)fetchTheResult{
// some code lines
}
部署后,我想将方法实现更改为
-(void)fetchTheresult{
NSLog(@"test log");
//some Code lines
//some more lines
}
请指导我实现这个目标的方法
答案 0 :(得分:0)
这是一个很大的问题,你需要做一些研究来找出答案。这里有一些你可以研究的事情:
首先您引用了Rollout,您可以遵循相同的想法并将更新作为JavaScript发送。你需要学习如何调用JavaScript,swizzle方法,以及可能动态添加方法 - 稍后会详细介绍。
您可以调查的另一种方法是动态库加载 - 您可以在应用程序在运行时加载的库中打开并调用代码。因此,您可以将更新作为库发送。您仍然需要进行方法调配并可能动态添加方法......
除了方法调配,您可能会发现需要动态添加方法 - 例如所以你有东西可以交换现有的实现。找到如何做到这一点的好地方是Mike Ash关于KVO的着作 - 去DuckDuckGo(或谷歌)
HTH
答案 1 :(得分:-1)
这并不像你想象的那么容易,至少在Objective C和其他类似的编译语言中。这种运行时对代码的更改只能在Javascript等解释语言中实现。
基本问题是,不允许应用程序自行更改可执行文件。 iOS和Android上的应用程序在沙盒环境中运行,因此只能访问有限的磁盘位置。
此外,在编译代码之后,代码不知道代码的哪一部分被转换并以机器语言存储。您必须了解编译器的基础知识才能理解这一点。在此过程中,代码会发生重大优化。