CN114866451A - iOS端路由通信改进方法、装置、存储介质和设备 - Google Patents
iOS端路由通信改进方法、装置、存储介质和设备 Download PDFInfo
- Publication number
- CN114866451A CN114866451A CN202210468000.9A CN202210468000A CN114866451A CN 114866451 A CN114866451 A CN 114866451A CN 202210468000 A CN202210468000 A CN 202210468000A CN 114866451 A CN114866451 A CN 114866451A
- Authority
- CN
- China
- Prior art keywords
- routing
- definition information
- python script
- path definition
- ios
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/70—Software maintenance or management
- G06F8/73—Program documentation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/44—Encoding
- G06F8/447—Target code generation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/54—Link editing before load time
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L45/00—Routing or path finding of packets in data switching networks
- H04L45/02—Topology update or discovery
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L45/00—Routing or path finding of packets in data switching networks
- H04L45/56—Routing software
Abstract
本发明提供一种iOS端路由通信改进方法、装置、计算机可读存储介质和计算机设备,该方法包括:在工程源代码中的路由服务接口函数处添加自定义的注解宏代码;其中,注解宏代码传入对接路由服务接口的路由路径定义信息,注解宏代码段二次封装了使用编译器指令__attribute__((used,section))的通用逻辑代码;配置自定义的python脚本,python脚本被配置为在主源代码被执行编译之前被执行,以使得基于所述编译器指令将路由路径定义信息经处理后自动存储至主源代码执行编译后生成的可执行文件中。该方法优化了路由路径定义信息的存储位置,不需要外部额外的配置文件,便于后期的维护工作,路由表文件的更新、维护通过集成python脚本完成自动化管理,显著降低路由表文件的维护成本。
Description
技术领域
本发明涉及iOS开发技术领域,具体而言,本发明涉及一种iOS端路由通信改进方法、装置、计算机可读存储介质和计算机设备。
背景技术
在iOS端业界内现有常见的组件通信方案手段主要分为三种:第一种是基于protocol协议的接口通信方案,第二种是基于category分类的CTMediator中介模式通信方案,第三种基于路由调度的通信方案。其中,第一、二种方案都会产生大量的接口协议或接口类别的中间类文件,不利于后期的管理和维护。
目前,较为常用的还是第三种路由通信方案,但当前常见的路由通信方案也存在以下需要改进的地方:路由表文件需要手动编写及更新,其后期的维护成本较高;路由服务能力若为统一的手动注册服务模式,则后期的服务注册管理成本较高且服务注册逻辑无法跟随独立的组件模块;路由服务能力利用oc语言特性在+load方法中实现服务注册的自动加载,对app启动流程的preMain阶段的耗时会有一定影响。
发明内容
为至少能解决上述的技术缺陷之一,本发明提供了以下技术方案的iOS端路由通信改进方法及对应的装置、计算机可读存储介质和计算机设备。
本发明的实施例根据一个方面,提供了一种iOS端路由通信改进方法,包括如下步骤:
在工程源代码中的路由服务接口函数处添加自定义的注解宏代码;其中,所述注解宏代码传入对接路由服务接口的路由路径定义信息,所述注解宏代码段二次封装了使用编译器指令__attribute__((used,section))的通用逻辑代码;
配置自定义的python脚本,所述python脚本被配置为在主源代码被执行编译之前被执行,以使得基于所述编译器指令将所述路由路径定义信息经处理后自动存储至所述主源代码执行编译后生成的可执行文件中。
优选地,所述路由路径定义信息包括路由路径串、方法名、类名和接口描述简介信息。
优选地,所述配置自定义的python脚本,所述python脚本被配置为在主源代码被执行编译之前被执行,包括:
在普通工程中配置时,在XCode开发工具中的编译源代码前添加执行python脚本的配置信息,以使所述python脚本在普通工程中的工程源代码被编译之前被执行;或,
在组件化工程中配置时,确定编译顺序最靠前的子模块,在所述子模块的podspec描述文件中添加执行python脚本的配置信息,以使所述python脚本在组件化工程中的子模块源代码被编译之前被执行。
优选地,所述执行python脚本的配置信息包括:python脚本文件的路径信息、待扫描工程源代码文件的根目录的路径信息和待自动存储路由路径定义信息的路由表文件的路径信息。
优选地,所述基于所述编译器指令将所述路由路径定义信息经处理后自动存储至所述主源代码执行编译后生成的可执行文件中,包括:
基于所述编译器指令将路由路径定义信息拼接成字符串,并将所述字符串自动存储至所述主源代码执行编译后生成的二进制mach-o可执行文件中。
优选地,iOS端路由通信改进方法还包括:
在应用程序运行时,基于所述编译器指令从所述可执行文件中读取经处理后的路由路径定义信息;
根据经处理后的路由路径定义信息,对路由服务进行注册加载。
优选地,所述根据经处理后的路由路径定义信息,对路由服务进行注册加载,包括:
对经处理后的路由路径定义信息进行反向解析,得到传入对接路由服务接口的路由路径定义信息;
基于Objective-C语言的runtime特性,采用字符串动态映射的方式对路由服务进行注册加载。
此外,本发明的实施例根据另一个方面,提供了一种iOS端路由通信改进装置,包括:
注解宏设置模块,用于在工程源代码中的路由服务接口函数处添加自定义的注解宏代码;其中,所述注解宏代码传入对接路由服务接口的路由路径定义信息,所述注解宏代码段二次封装了使用编译器指令__attribute__((used,section))的通用逻辑代码;
python脚本配置模块,用于配置自定义的python脚本,所述python脚本被配置为在主源代码被执行编译之前被执行,以使得基于所述编译器指令将所述路由路径定义信息经处理后自动存储至执行编译后生成的可执行文件中。
本发明的实施例根据又一个方面,提供了一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现上述的iOS端路由通信改进方法。
本发明的实施例根据再一个方面,提供了一种计算机设备,所述计算机包括一个或多个处理器;存储器;一个或多个计算机程序,其中所述一个或多个计算机程序被存储在所述存储器中并被配置为由所述一个或多个处理器执行,所述一个或多个计算机程序配置用于:执行上述的iOS端路由通信改进方法。
本发明与现有技术相比,具有以下有益效果:
本发明提供的iOS端路由通信改进方法、装置、计算机可读存储介质和计算机设备,通过在需要定义为路由服务接口的函数上方添加注解宏代码,传入路由路径定义信息并通过编译器指令优化路由路径定义信息的存储位置,不需要外部额外的配置文件,且注解宏代码距离对应的接口函数近,能够便于后期的维护工作,路由表文件的更新、维护能够通过集成python自动扫描脚本完成自动化管理,显著降低路由表文件的维护成本。
本发明附加的方面和优点将在下面的描述中部分给出,这些将从下面的描述中变得明显,或通过本发明的实践了解到。
附图说明
本发明上述的和/或附加的方面和优点从下面结合附图对实施例的描述中将变得明显和容易理解,其中:
图1为本发明实施例提供的iOS端路由通信改进方法的方法流程图;
图2为本发明实施例提供的iOS端路由通信改进装置的结构示意图。
具体实施方式
下面详细描述本发明的实施例,所述实施例的示例在附图中示出,其中自始至终相同或类似的标号表示相同或类似的元件或具有相同或类似功能的元件。下面通过参考附图描述的实施例是示例性的,仅用于解释本发明,而不能解释为对本发明的限制。
本技术领域技术人员可以理解,除非特意声明,这里使用的单数形式“一”、“一个”、“所述”和“该”也可包括复数形式。应该进一步理解的是,本发明的说明书中使用的措辞“包括”是指存在所述特征、整数、步骤、操作、元件和/或组件,但是并不排除存在或添加一个或多个其他特征、整数、步骤、操作、元件、组件和/或它们的组。这里使用的措辞“和/或”包括一个或更多个相关联的列出项的全部或任一单元和全部组合。
本技术领域技术人员可以理解,除非另外定义,这里使用的所有术语(包括技术术语和科学术语),具有与本发明所属领域中的普通技术人员的一般理解相同的意义。还应该理解的是,诸如通用字典中定义的那些术语,应该被理解为具有与现有技术的上下文中的意义一致的意义,并且除非像这里一样被特定定义,否则不会用理想化或过于正式的含义来解释。
本发明实施例提供了一种iOS端路由通信改进方法,基于路由调度的通信方案实现iOS端内的组件通信,如图1所示,该方法包括:
步骤S110:在工程源代码中的路由服务接口函数处添加自定义的注解宏代码;其中,所述注解宏代码传入对接路由服务接口的路由路径定义信息,所述注解宏代码段二次封装了使用编译器指令__attribute__((used,section))的通用逻辑代码。
对于本实施例,在编写工程源代码时,在需要定义为路由服务接口的函数上方添加自定义的注解宏代码,此注解宏代码段按约定传入对接路由服务接口的路由路径定义信息。
其中,所述路由路径定义信息为用于定义路由服务接口的相关联信息。
其中,__attribute__是编译属性,用于改变所声明或定义的函数或数据的特性,基于编译属性将数据写到可执行文件中,然后在使用的时候从可执行文件中读取出来。具体地,所述注解宏代码是在编译器指令__attribute__((used,section))的基础上进行的二次封装,以保证所述路由路径定义信息能在应用程序执行打包时存储到最终的二进制可执行文件mach-o文件中并能在应用程序运行时根据对应的编译器指令将这些路由路径定义信息重新读取出来。
编译器指令__attribute__((used,section))可以将此命令修饰的数据信息直接存储到应用程序最终的可执行二进制mach-o文件里指定的数据段区域中,不需要外部额外的配置文件,也可以在启动应用程序后通过相关的mach-o系列的api接口从当前运行的程序内存地址中指定的地址段区域将数据直接读取出来,相比常规的外部配置文件的读取,效率更高。
在一些实施例中,所述注解宏代码传入对接路由服务接口的路由路径定义信息包括对接路由服务接口的类名、方法名、路由路径串以及接口的描述简介。具体地,在工程源代码中的路由服务接口函数处添加自定义的注解宏代码RouterSelector(path,routerMethod,className,comment)。其中,path为路由路径串,routerMethod为方法名,className为类名,comment为接口的描述简介。
以下,示出一个实例进一步阐明所述步骤S110:
假定有某业务模块MoudleA,其对外接口类为ClassA,在类ClassA的工程源代码文件中,增加一个对外接口函数声明:+(void)routerMethodA:(HLLRouterInfo*)info;HLLRouterInfo是路由组件提供的一个通用数据协议类,方便二次扩展具体的业务参数传递。
然后,假设该接口需要支持路由调度,则在此函数声明的代码段上方添加自定义的注解宏代码HLLRouterSelector(path,routerMethod,className,comment);其中path可自行赋值一个随意串,在实际应用中,可按模块功能进行有意义的字符串拼接,如:ModuleA/PageA;routerMethod直接写下方的路由服务接口函数的函数名routerMethodA即可;className给成当前接口类的类名,即ClassA;comment为此路由服务接口的简单介绍描述字符串,通常会说明函数的功能及参数传递规范。
HLLRouterSelector的宏注解代码二次封装了使用编译器指令__attribute__((used,section))的通用逻辑代码,不需要其它处理,此处注解宏代码修饰后,会将path,routerMethod,className的具体字符串值用冒号:拼接形成一个新字符串,通过上述编译器指令可以保证此新字符串在工程编译打包后被自动存储到最终的可执行的二进制mach-o文件中。
步骤S120:配置自定义的python脚本,所述python脚本被配置为在主源代码被执行编译之前被执行,以使得基于所述编译器指令将所述路由路径定义信息经处理后自动存储至所述主源代码执行编译后生成的可执行文件中。
对于本实施例,在程序开发编辑器XCode中添加自定义的python脚本配置,调整python脚本的执行时机以保证python脚本在主源代码编译之前被执行。在工程源代码执行编译操作时,会触发python脚本执行,python脚本执行会自动扫描指定的项目工程文件目录,读取所有工程源代码文件并通过正则匹配查找到工程源代码中添加了自定义的宏注解代码段,基于编译器指令__attribute__的编译属性,按既定规则解析此代码段并动态组装路由路径定义信息,最后将路由路径定义信息经处理后统一覆盖写入python脚本指定的目标文件中,实现自动存储至所述主源代码执行编译后生成的可执行文件中,通过python脚本配置实现路由表文件的自动维护更新。在本实施例中,路由表文件的更新、维护通过集成python自动扫描脚本完成自动化管理,相关注解信息均在需要的路由服务接口处添加描述,不影响接口的原功能,且因注解宏代码段与对应接口函数离得更近,更方便后期的维护工作。
本发明提供的iOS端路由通信改进方法,通过在需要定义为路由服务接口的函数上方添加注解宏代码,传入路由路径定义信息并通过编译器指令优化路由路径定义信息的存储位置,不需要外部额外的配置文件,且注解宏代码距离对应的接口函数近,能够便于后期的维护工作,路由表文件的更新、维护能够通过集成python自动扫描脚本完成自动化管理,显著降低路由表文件的维护成本。
在一些实施例中,所述步骤S120中配置自定义的python脚本包括有在普通工程中配置和在组件化工程中配置两种情况。
当工程源代码为普通工程时,所述步骤S120中的所述配置自定义的python脚本,所述python脚本被配置为在主源代码被执行编译之前被执行,包括:在普通工程中配置时,在XCode开发工具中的编译源代码前添加执行python脚本的配置信息,以使所述python脚本在普通工程中的工程源代码被编译之前被执行。
具体地,普通工程的python脚本配置可以包括以下详细步骤:
i.在XCode开发工具的Targets选择中选中项目名相同的Target选择卡,在右侧内容面板中选中Build Phases选项卡,在对应面板左上角点击+号,在弹出的选择菜单中点击New Run Script Phase;
ii.在新增的Run Script内容区域中添加python脚本执行的命令,指定执行python脚本的配置信息;其中,所述执行python脚本的配置信息可以具体包括:python脚本文件的路径信息、待扫描工程源代码文件的根目录的路径信息和待自动存储路由路径定义信息的路由表文件的路径信息;
iii.鼠标长按住上述Run Script内容的非编辑区域,上下移动将此块区域将其调整到名为Compile Sources区域的上方位置即可,从而保证python脚本在普通工程中的工程源代码被编译前被执行。
当工程源代码为组件化工程时,所述步骤S120中的所述配置自定义的python脚本,所述python脚本被配置为在主源代码被执行编译之前被执行,包括:在组件化工程中配置时,确定编译顺序最靠前的子模块,在所述子模块的podspec描述文件中添加执行python脚本的配置信息,以使所述python脚本在组件化工程中的子模块源代码被编译之前被执行。
具体地,组件化工程的python脚本配置可以包括以下详细步骤:
i.预先确定编译顺序最靠前的子模块,确定方法可以为:先执行一次XCode编译操作,在相关compile的编译日志中可以找出最早执行编译的子业务模块,或者用其它技术手段找出模块依赖关系处于底层的子业务模块,比如Common子模块;
ii.在Common子模块对应的podspec描述文件中增加执行python脚本的配置信息,其中,所述执行python脚本的配置信息可以具体包括:python脚本文件的路径信息、待扫描工程源代码文件的根目录的路径信息和待自动存储路由路径定义信息的路由表文件的路径信息,具体地分别为python脚本文件相对此子模块在主工程目录下的相对路径、待扫描的所有工程源代码文件的根目录的相对路径和需要写入自动填充的路由表文件的相对路径。将调整python脚本执行时机的配置参数:execution_position=>:before_compile,从而保证python脚本在此子模块源码被真实编译前被执行。
在一些实施例中,所述步骤S120中的所述基于所述编译器指令将所述路由路径定义信息经处理后自动存储至所述主源代码执行编译后生成的可执行文件中,包括:基于所述编译器指令将路由路径定义信息拼接成字符串,并将所述字符串自动存储至所述主源代码执行编译后生成的二进制mach-o可执行文件中。
对于普通工程,执行XCode开发工具的编译操作以触发python脚本执行可以包括以下详细步骤:
i.根据XCode开发工具中python脚本的配置信息,先触发python脚本的执行;
ii.python脚本内部通过执行shell的grep命令配合正则参数快速递归检索工程源代码中的宏注解代码;
iii.对正则参数快速递归检索匹配的结果按宏注解代码的代码段组装规则解析出对应的路由路径串、接口的描述简介,并将路由路径串按/进行切分,增加通用前缀kRouterPath,并将原路由路径串先按符号/进行切分,再将切分后串按首字母大写的样式进行重新拼接,最终形成一定拼接规则的新的字符串;
iv.按objective-c语言的字符串定义的语法定义最终路由路径串,将描述简介提炼为对应注释代码放到路由路径串定义代码上方,将每条处理后的字符串信息逐个写入到指定的路由表文件中;
v.编译其它三方依赖库源码;
vi.编译主工程源代码;
vii.完成编译生成可执行二进制mach-o文件,对应注解宏代码修饰的信息已被编译器指令自动写入存储到mach-o文件中指定的区域。
对于组件化工程,执行XCode开发工具的编译操作以触发python脚本执行可以包括以下详细步骤:
i.根据三方依赖库及子业务模块的依赖顺序,依次编译对应的源码文件;
ii.若当前编译的源码库为common或其它配置了python脚本执行命令的模块源码,则先执行python脚本,完成指定的路由表文件内容的自动填充后,再执行当前模块源码的编译;
iii.编译排在后面的其它库的源码;
iv.最后编译主工程的少量源码;
v.完成编译生成可执行二进制mach-o文件,对应注解宏代码修饰的信息已被编译器指令自动写入存储到mach-o文件中指定的区域。
在一些实施例中,所述iOS端路由通信改进方法,还包括应用程序启动后路由服务的注册加载,其包括以下步骤:在应用程序运行时,基于所述编译器指令从所述可执行文件中读取经处理后的路由路径定义信息;根据经处理后的路由路径定义信息,对路由服务进行注册加载。
对于本实施例,所述经处理后的路由路径定义信息为由路由路径定义信息拼接成的字符串,所述字符串自动存储在主源代码执行编译后生成的二进制mach-o可执行文件中。在对路由服务进行注册加载时,需要获取对应的路由路径定义信息,则基于编译器指令直接从二进制mach-o可执行文件中读取注解宏代码修饰后的字符串,按规则对字符串进行解析,将解析后的数据对路由服务进行注册加载,完成路由服务注册。
在本实施例中,通过编译器指令优化了路由路径定义信息的读取加载方式,不影响应用程序的启动耗时,提高了路由服务注册加载的效率及性能。
在一些实施例中,所述根据经处理后的路由路径定义信息,对路由服务进行注册加载,包括:对经处理后的路由路径定义信息进行反向解析,得到传入对接路由服务接口的路由路径定义信息;于Objective-C语言的runtime特性,采用字符串动态映射的方式对路由服务进行注册加载。
相应地,路由服务的注册可以包括以下详细步骤:
i.在应用程序启动的统一回调函数实现中调用路由服务注册初始化的公共接口。
具体地,路由初始化调用[[HLLRouter shared]registPathAnnotationsWithHost:@"hllcdriver://com.huolala.cdriver"],指定路由服务的host信息,提高外部scheme方式通过openUrl公共接口调度路由功能的安全性,应用程序内部使用时使用二次封装的openPath系列方法可以保证本地调度时可以不用关注host的传值,让路由功能的服务调用能力更聚焦;
ii.使用编译器指令直接从程序二进制的内存地址中读取路由服务信息数据。
具体地,利用mach-o系统库提供的一系列的C函数API接口,具体通过C函数getsectiondata从程序的运行内存地址中读取工程源代码里以注解宏代码二次封装的编译器指令__attribute__((used,section))修饰过的数据,读取出来是内存地址指针的形式,通过类型转换处理可以将内存地址里的数据转换为代码中可直接使用的字符串;
iii.对路由服务信息数据进行解析。
具体地,按注解宏代码处理中约定的拼接规则,对读取的一系列的字符串进行反向解析,可以得到最初工程源代码中注解宏代码描述时传入的对接路由服务接口的类名、方法名、路由路径串以及接口的描述简介;
iv.将解析后的数据动态注册为真正的路由接口服务。
具体地,直接利用objective-c语言的runtime特性,将取到的类名、方法名等通过字符串动态映射的方式将对应的路由服务能力注册到当前路由管理类中缓存起来,便于后续执行路由服务的调度。直接通过字符串映射到具体类的处理,不需要再遍历匹配所有的类,也不依赖系统+load的回调,处理逻辑更集中,不堵塞应用程序启动流程,使得路由服务注册加载的整体效率和性能更高。
此外,本发明实施例提供了一种iOS端路由通信改进装置,如图2所示,所述装置包括:
注解宏设置模块21,用于在工程源代码中的路由服务接口函数处添加自定义的注解宏代码;其中,所述注解宏代码传入对接路由服务接口的路由路径定义信息,所述注解宏代码段二次封装了使用编译器指令__attribute__((used,section))的通用逻辑代码;
python脚本配置模块22,用于配置自定义的python脚本,所述python脚本被配置为在主源代码被执行编译之前被执行,以使得基于所述编译器指令将所述路由路径定义信息经处理后自动存储至执行编译后生成的可执行文件中。
在一些实施例中,所述路由路径定义信息包括路由路径串、方法名、类名和接口描述简介信息。
在一些实施例中,所述python脚本配置模块22在所述配置自定义的python脚本,所述python脚本被配置为在主源代码被执行编译之前被执行,具体用于:
在普通工程中配置时,在XCode开发工具中的编译源代码前添加执行python脚本的配置信息,以使所述python脚本在普通工程中的工程源代码被编译之前被执行;或,
在组件化工程中配置时,确定编译顺序最靠前的子模块,在所述子模块的podspec描述文件中添加执行python脚本的配置信息,以使所述python脚本在组件化工程中的子模块源代码被编译之前被执行。
在一些实施例中,所述执行python脚本的配置信息包括:python脚本文件的路径信息、待扫描工程源代码文件的根目录的路径信息和待自动存储路由路径定义信息的路由表文件的路径信息。
在一些实施例中,iOS端路由通信改进装置还包括编译模块,所述编译模块在基于所述编译器指令将所述路由路径定义信息经处理后自动存储至所述主源代码执行编译后生成的可执行文件中,具体用于:
基于所述编译器指令将路由路径定义信息拼接成字符串,并将所述字符串自动存储至所述主源代码执行编译后生成的二进制mach-o可执行文件中。
在一些实施例中,iOS端路由通信改进装置还包括路由服务注册加载模块,所述路由服务注册加载模块用于:
在应用程序运行时,基于所述编译器指令从所述可执行文件中读取经处理后的路由路径定义信息;
根据经处理后的路由路径定义信息,对路由服务进行注册加载。
在一些实施例中,所述路由服务注册加载模块在根据经处理后的路由路径定义信息,对路由服务进行注册加载,具体用于:
对经处理后的路由路径定义信息进行反向解析,得到传入对接路由服务接口的路由路径定义信息;
基于Objective-C语言的runtime特性,采用字符串动态映射的方式对路由服务进行注册加载。
本发明方法实施例的内容均适用于本装置实施例,本装置实施例所具体实现的功能与上述方法实施例相同,并且达到的有益效果与上述方法达到的有益效果也相同,具体请参见方法实施例中的说明,在此不再赘述。
此外,本发明实施例提供了一种计算机可读存储介质,计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现以上任一实施例所述的iOS端路由通信改进方法。其中,所述计算机可读存储介质包括但不限于任何类型的盘(包括软盘、硬盘、光盘、CD-ROM、和磁光盘)、ROM(Read-Only Memory,只读存储器)、RAM(Random AcceSSMemory,随即存储器)、EPROM(EraSable Programmable Read-Only Memory,可擦写可编程只读存储器)、EEPROM(Electrically EraSable Programmable Read-Only Memory,电可擦可编程只读存储器)、闪存、磁性卡片或光线卡片形式实现,也可以采用软件功能模块的形式实现。所述集成的模块如果以也就是,存储设备包括由设备(例如,计算机、手机)以能够读的形式存储或传输信息的任何介质,可以是只读存储器,磁盘或光盘等。
本发明方法实施例的内容均适用于本存储介质实施例,本存储介质实施例所具体实现的功能与上述方法实施例相同,并且达到的有益效果与上述方法达到的有益效果也相同,具体请参见方法实施例中的说明,在此不再赘述。
此外,本发明实施例还提供了一种计算机设备,本实施例所述的计算机设备可以是服务器、个人计算机以及网络设备等设备。所述计算机设备包括:一个或多个处理器,存储器,一个或多个计算机程序,其中所述一个或多个计算机程序被存储在存储器中并被配置为由所述一个或多个处理器执行,所述一个或多个计算机程序配置用于执行以上任一实施例所述的iOS端路由通信改进方法。
本发明方法实施例的内容均适用于本计算机设备实施例,本计算机设备实施例所具体实现的功能与上述方法实施例相同,并且达到的有益效果与上述方法达到的有益效果也相同,具体请参见方法实施例中的说明,在此不再赘述。
此外,在本发明各个实施例中的各功能单元可以集成在一个处理模块中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个模块中。上述集成的模块既可以采用硬件的软件功能模块的形式实现并作为独立的产品销售或使用时,也可以存储在一个计算机可读取存储介质中。
以上所述仅是本发明的部分实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。
Claims (10)
1.一种iOS端路由通信改进方法,其特征在于,包括如下步骤:
在工程源代码中的路由服务接口函数处添加自定义的注解宏代码;其中,所述注解宏代码传入对接路由服务接口的路由路径定义信息,所述注解宏代码段二次封装了使用编译器指令__attribute__((used,section))的通用逻辑代码;
配置自定义的python脚本,所述python脚本被配置为在主源代码被执行编译之前被执行,以使得基于所述编译器指令将所述路由路径定义信息经处理后自动存储至所述主源代码执行编译后生成的可执行文件中。
2.根据权利要求1所述的iOS端路由通信改进方法,其特征在于,所述路由路径定义信息包括路由路径串、方法名、类名和接口描述简介信息。
3.根据权利要求1所述的iOS端路由通信改进方法,其特征在于,所述配置自定义的python脚本,所述python脚本被配置为在主源代码被执行编译之前被执行,包括:
在普通工程中配置时,在XCode开发工具中的编译源代码前添加执行python脚本的配置信息,以使所述python脚本在普通工程中的工程源代码被编译之前被执行;或,
在组件化工程中配置时,确定编译顺序最靠前的子模块,在所述子模块的podspec描述文件中添加执行python脚本的配置信息,以使所述python脚本在组件化工程中的子模块源代码被编译之前被执行。
4.根据权利要求3所述的iOS端路由通信改进方法,其特征在于,所述执行python脚本的配置信息包括:python脚本文件的路径信息、待扫描工程源代码文件的根目录的路径信息和待自动存储路由路径定义信息的路由表文件的路径信息。
5.根据权利要求1所述的iOS端路由通信改进方法,其特征在于,所述基于所述编译器指令将所述路由路径定义信息经处理后自动存储至所述主源代码执行编译后生成的可执行文件中,包括:
基于所述编译器指令将路由路径定义信息拼接成字符串,并将所述字符串自动存储至所述主源代码执行编译后生成的二进制mach-o可执行文件中。
6.根据权利要求1所述的iOS端路由通信改进方法,其特征在于,还包括:
在应用程序运行时,基于所述编译器指令从所述可执行文件中读取经处理后的路由路径定义信息;
根据经处理后的路由路径定义信息,对路由服务进行注册加载。
7.根据权利要求6所述的iOS端路由通信改进方法,其特征在于,所述根据经处理后的路由路径定义信息,对路由服务进行注册加载,包括:
对经处理后的路由路径定义信息进行反向解析,得到传入对接路由服务接口的路由路径定义信息;
基于Objective-C语言的runtime特性,采用字符串动态映射的方式对路由服务进行注册加载。
8.一种iOS端路由通信改进装置,其特征在于,包括:
注解宏设置模块,用于在工程源代码中的路由服务接口函数处添加自定义的注解宏代码;其中,所述注解宏代码传入对接路由服务接口的路由路径定义信息,所述注解宏代码段二次封装了使用编译器指令__attribute__((used,section))的通用逻辑代码;
python脚本配置模块,用于配置自定义的python脚本,所述python脚本被配置为在主源代码被执行编译之前被执行,以使得基于所述编译器指令将所述路由路径定义信息经处理后自动存储至执行编译后生成的可执行文件中。
9.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现权利要求1至7任一项所述的iOS端路由通信改进方法。
10.一种计算机设备,其特征在于,其包括:
一个或多个处理器;
存储器;
一个或多个计算机程序,其中所述一个或多个计算机程序被存储在所述存储器中并被配置为由所述一个或多个处理器执行,所述一个或多个计算机程序配置用于:执行根据权利要求1至7任一项所述的iOS端路由通信改进方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210468000.9A CN114866451B (zh) | 2022-04-29 | 2022-04-29 | iOS端路由通信改进方法、装置、存储介质和设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210468000.9A CN114866451B (zh) | 2022-04-29 | 2022-04-29 | iOS端路由通信改进方法、装置、存储介质和设备 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN114866451A true CN114866451A (zh) | 2022-08-05 |
CN114866451B CN114866451B (zh) | 2023-10-03 |
Family
ID=82634657
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210468000.9A Active CN114866451B (zh) | 2022-04-29 | 2022-04-29 | iOS端路由通信改进方法、装置、存储介质和设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114866451B (zh) |
Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20050262041A1 (en) * | 2004-05-21 | 2005-11-24 | Bea Systems, Inc. | Systems and methods for plain old java object (POJO) persistence |
US20140157243A1 (en) * | 2002-11-20 | 2014-06-05 | Byron D. Vargas | System for Translating Diverse Programming Languages |
US20180081650A1 (en) * | 2016-09-22 | 2018-03-22 | Qualcomm Innovation Center, Inc. | Link time program optimization in presence of a linker script |
CN111459495A (zh) * | 2020-03-30 | 2020-07-28 | 招商局金融科技有限公司 | 单元测试代码文件生成方法、电子装置及存储介质 |
CN112181486A (zh) * | 2019-07-03 | 2021-01-05 | 北京京东尚科信息技术有限公司 | 一种数据处理的方法、装置和存储介质 |
CN112650529A (zh) * | 2020-12-31 | 2021-04-13 | 城云科技(中国)有限公司 | 可配置生成移动端app代码的系统及方法 |
CN114168111A (zh) * | 2021-12-07 | 2022-03-11 | 北京五八信息技术有限公司 | 组件化路由实现方法、设备、产品及存储介质 |
-
2022
- 2022-04-29 CN CN202210468000.9A patent/CN114866451B/zh active Active
Patent Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20140157243A1 (en) * | 2002-11-20 | 2014-06-05 | Byron D. Vargas | System for Translating Diverse Programming Languages |
US20050262041A1 (en) * | 2004-05-21 | 2005-11-24 | Bea Systems, Inc. | Systems and methods for plain old java object (POJO) persistence |
US20180081650A1 (en) * | 2016-09-22 | 2018-03-22 | Qualcomm Innovation Center, Inc. | Link time program optimization in presence of a linker script |
CN112181486A (zh) * | 2019-07-03 | 2021-01-05 | 北京京东尚科信息技术有限公司 | 一种数据处理的方法、装置和存储介质 |
CN111459495A (zh) * | 2020-03-30 | 2020-07-28 | 招商局金融科技有限公司 | 单元测试代码文件生成方法、电子装置及存储介质 |
CN112650529A (zh) * | 2020-12-31 | 2021-04-13 | 城云科技(中国)有限公司 | 可配置生成移动端app代码的系统及方法 |
CN114168111A (zh) * | 2021-12-07 | 2022-03-11 | 北京五八信息技术有限公司 | 组件化路由实现方法、设备、产品及存储介质 |
Non-Patent Citations (5)
Title |
---|
DBAPLUS社群: "适配混合云,货拉拉的数据库中间件建设之路", 知乎 * |
WENQUN XIU, ET.AL: "The Design of Cybercrime Spatial Analysis System", IEEE * |
刘晓杰: "编译时注解(三)Arouter源码讲解", 腾讯云开发者社区 * |
李剑慧;王昀;黄波;乐永年;刘江宁;叶锦云;: "注解信息制导的动态二进制翻译及优化", 小型微型计算机系统, no. 03 * |
陈虹;陶滔;常景超;: "路由器配置诊断及优化系统研究与设计", 计算机工程与设计, no. 23 * |
Also Published As
Publication number | Publication date |
---|---|
CN114866451B (zh) | 2023-10-03 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10146522B1 (en) | Live code updates | |
CN108920133B (zh) | 跨语言编程方法、装置、电子设备及存储介质 | |
CN1324467C (zh) | 基于标记的链接 | |
CN109614165B (zh) | 一种com组件的多版本并行运行方法和装置 | |
US10459708B2 (en) | Composing a module system and a non-module system | |
US8881123B2 (en) | Enabling symbol resolution of private symbols in legacy programs and optimizing access to the private symbols | |
CN102455931B (zh) | 一种Android平台工程的开发方法及系统 | |
CN111176717B (zh) | 生成安装包的方法、装置及电子设备 | |
CN114816417B (zh) | 一种交叉编译方法、装置、计算设备及存储介质 | |
US20070074185A1 (en) | Identifier expressions | |
US8479177B2 (en) | Attribute based method redirection | |
CN114138281A (zh) | 软件工程的编译方法、装置、设备及介质 | |
JP4806158B2 (ja) | マークアップ内でサブクラスを宣言的に定義し、使用するためのシステムおよび方法 | |
US11029934B2 (en) | Method and system for updating legacy software | |
US20090187897A1 (en) | Compiling method and compiling program | |
CN111552480B (zh) | 跨平台编译方法、装置、设备及可读存储介质 | |
US20180129490A1 (en) | Object ordering preservation during lto link stage | |
CN114866451A (zh) | iOS端路由通信改进方法、装置、存储介质和设备 | |
CN115658140A (zh) | 一种sdk的打包方法、装置、终端以及存储介质 | |
JP3266097B2 (ja) | 非リエントラントプログラムの自動リエントラント化方法及びシステム | |
EP1136910A2 (en) | A method of compiling code in an object oriented programming language | |
CN113641389A (zh) | 基于OpenCPU的软件升级方法、装置及设备 | |
CN111796832A (zh) | 热补丁文件生成方法、装置、设备及存储介质 | |
CN115167862A (zh) | 补丁方法及相关设备 | |
CN113778388A (zh) | 程序开发方法和装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |