发明内容
本申请实施例提供了一种IOS编译方法及相关设备,用于加快IOS编译速度。
本申请实施例的第一方面提供了一种IOS编译方法,包括:通过git获取各组件的源代码;通过第三类库管理工具CocoaPods组件管理方式pod install构建整体工程,所述整体工程包括所述各组件;编译所述整体工程,得到所述整体工程中各组件对应的静态库,并将所述静态库存储至共享缓存目录中;所述将所述静态库存储至共享缓存目录中包括:将所述各组件对应的静态库以组件名称、组件版本和组件编译模式关联存储至所述共享缓存目录中,所述组件编译模式包括Debug模式或者Release模式;当所述整体工程中存在更新源代码的第一组件时,将所述第一组件编译成所述第一组件对应的静态库,以使得当所述整体工程需要所述第一组件时,将所述第一组件对应的静态库组合至所述整体工程中;将所述各组件的源代码以所述源代码的文件名和所述源代码的md5值关联存储至本地数据库。
在一种可能的实施例中,所述通过第三类库管理工具CocoaPods组件管理方式podinstall构建整体工程,所述整体工程包括所述各组件包括:判断当前组件是否已存在静态库;若存在,则通过所述CocoaPods将所述当前组件的静态库组合进所述整体工程中;若不存在,则通过所述CocoaPods将所述当前组件的源代码组合进所述整体工程中。
在一种可能的实施例中,所述判断当前组件是否已存在静态库包括:在执行所述podinstall时查找所述当前组件的二进制文件,并判断所述二进制文件是否以commit形式安装;若是,则根据所述当前组件的名称、所述当前组件的版本和所述当前组件的编译模式在所述共享缓存目录中确定是否存在所述当前组件对应的静态库。
在一种可能的实施例中,所述根据所述当前组件的名称、所述当前组件的版本和所述当前组件的编译模式在所述共享缓存目录中确定是否存在所述当前组件对应的静态库包括:按照文件目录路径所述在所述共享缓存目录中查找所述当前组件对应的静态库,所述文件目录路径包括当前组件的编译模式/库名称/所述当前组件的版本/lib库名称.a。
在一种可能的实施例中,所述编译所述整体工程包括:当编译所述整体工程中第二组件时,确定所述第二组件的源代码是否存在中间目标文件,所述第二组件为所述整体工程中的任一组件;若存在,则使用所述中间目标文件进行编译;若不存在,则使用所述第二组件的源代码进行编译。
在一种可能的实施例中,所述将所述各组件对应的静态库以组件名称、组件版本和组件编译模式关联存储至所述共享缓存目录中包括:读取所述pod install生成的配置文件,以获取全部静态库以及所述各静态库分别对应的版本;按照编译输出目录/所述各组件对应的静态库名称/lib库名称.a在所述配置文件中查找所述各组件对应的静态库;按照所述组件编译模式/库名称/版本/lib库名称.a的文件路径关联存储至所述共享缓存目录中。
在一种可能的实施例中,所述通过git获取各组件的源代码包括:基于超文本传输协议http,通过git clone命令获取各组件的源代码;或者,当系统中安装安全外壳协议SSH时,基于所述SSH,通过命令git pull ssh地址获取所述各组件的源代码。
本申请实施例的第二方面提供了一种编译设备,包括:获取单元,用于通过git获取各组件的源代码;构建单元,用于通过第三类库管理工具CocoaPods组件管理方式podinstall构建整体工程,所述整体工程包括所述各组件;所述将所述静态库存储至共享缓存目录中包括:将所述各组件对应的静态库以组件名称、组件版本和组件编译模式关联存储至所述共享缓存目录中,所述组件编译模式包括Debug模式或者Release模式;编译单元,用于编译所述整体工程,得到所述整体工程中各组件对应的静态库,并将所述静态库存储至共享缓存目录中;所述编译单元还用于当所述整体工程中存在更新源代码的第一组件时,将所述第一组件编译成所述第一组件对应的静态库,以使得当所述整体工程需要所述第一组件时,所述第一组件对应的静态库组合至所述整体工程中;存储单元,用于将所述各组件的源代码以所述源代码的文件名和所述源代码的md5值关联存储至本地数据库。
在一种可能的实施例中,所述构建单元具体用于:判断当前组件是否已存在静态库;若存在,则通过所述CocoaPods将所述当前组件的静态库组合进所述整体工程中;若不存在,则通过所述CocoaPods将所述当前组件的源代码组合进所述整体工程中。
在一种可能的实施例中,所述构建单元具体用于:在执行所述pod install时查找所述当前组件的二进制文件,并判断所述二进制文件是否以commit形式安装;若是,则根据所述当前组件的名称、所述当前组件的版本和所述当前组件的编译模式在所述共享缓存目录中确定是否存在所述当前组件对应的静态库。
在一种可能的实施例中,所述构建单元具体用于:按照文件目录路径所述在所述共享缓存目录中查找所述当前组件对应的静态库,所述文件目录路径包括当前组件的编译模式/库名称/所述当前组件的版本/lib库名称.a。
在一种可能的实施例中,所述编译单元具体用于:当编译所述整体工程中第二组件时,确定所述第二组件的源代码是否存在中间目标文件,所述第二组件为所述整体工程中的任一组件;若存在,则使用所述中间目标文件进行编译;若不存在,则使用所述第二组件的源代码进行编译。
在一种可能的实施例中,所述存储单元具体用于:读取所述pod install生成的配置文件,以获取全部静态库以及所述各静态库分别对应的版本;按照编译输出目录/所述各组件对应的静态库名称/lib库名称.a在所述配置文件中查找所述各组件对应的静态库;按照所述组件编译模式/库名称/版本/lib库名称.a的文件路径关联存储至所述共享缓存目录中。
在一种可能的实施例中,所述获取单元具体用于基于超文本传输协议http,通过git clone命令获取各组件的源代码;或者,当系统中安装安全外壳协议SSH时,基于所述SSH,通过命令git pull ssh地址获取所述各组件的源代码。
本申请第三方面提供了一种电子设备,包括存储器、处理器,其特征在于,所述处理器用于执行存储器中存储的计算机管理类程序时实现如上述第一方面任意一项所述的IOS编译方法的步骤。
本申请的第四方面提供了一种计算机可读存储介质,所述计算机可读存储介质中存储有指令,当其在计算机上运行时,使得计算机执行上述各方面所述的方法。
本申请的第五方面提供了一种包含指令的计算机程序产品,当其在计算机上运行时,使得计算机执行上述各方面所述的方法。
从以上技术方案可以看出,本申请实施例具有以下优点:通过git获取各组件的源代码;通过第三类库管理工具CocoaPods组件管理方式pod install构建整体工程,所述整体工程包括所述各组件;编译所述整体工程,得到所述整体工程中各组件对应的静态库,并将所述静态库存储至共享缓存目录中;所述将所述静态库存储至共享缓存目录中包括:将所述各组件对应的静态库以组件名称、组件版本和组件编译模式关联存储至所述共享缓存目录中,所述组件编译模式包括Debug模式或者Release模式;当所述整体工程中存在更新源代码的第一组件时,将所述第一组件编译成所述第一组件对应的静态库,以使得当所述整体工程需要所述第一组件时,将所述第一组件对应的静态库组合至所述整体工程中;将所述各组件的源代码以所述源代码的文件名和所述源代码的md5值关联存储至本地数据库。本实施例中,每个组件在编译后生成.a文件以供调用,但在一般情况下,在做整个项目的时候,每需要一个组件就要再编译一次,即使是以前编译过的组件也不能重复使用,这样就导致整个项目的整体编译过程过长,每当有新的组件代码变更时,就将该代码编译成“.a”文件,然后放入静态库保存,以后需要调用时不需要重新编译,直接从静态库取出使用即可;另外,并不是每个组件都可以单独生成静态库,但是这些组件都已经在整体工程中成功编译,故可以利用整体项目中生成的静态库保存组件,后续从静态库直接取出使用,提高了IOS的编译速度。
具体实施方式
本申请实施例提供了一种IOS编译方法及相关设备,用于提高IOS编译速度。
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
需要说明的是,IOS编译过程包括执行CocoaPods命令如pod install或者podupdate,将Podfile中指定的库按照指定版本下载到本地,并通过点击Xode编译按钮或者执行xcodebuild命令来执行编译,再经过编译预处理、词法解析、语法分析、静态分析、中间代码生成和优化、汇编和链接等步骤,随着Podfile中配置的库越多,需要执行编译预处理、词法解析、语法分析、静态分析、中间代码生成和优化、汇编的时间就会越多,同时所以使用的库的源代码文件越多时间也会越多,整体编译时间也会越长。因此,需要提供一种新的IOS编译方法,以提升编译时间,以尽快输出安装包。
请参阅图1,为本申请实施例提供的一种IOS编译方法的流程图,具体包括:
101、通过git获取各组件的源代码;
git是一个分布式版本控制软件,采用了分布式版本库的作法,不需要服务器端软件,就可以运作版本控制,使得源代码的发布和交流极其方便。通过git获取各组件的源代码的方式有多种,例如:
1、使用http获取git代码。通过git clone命令克隆git库中的项目,需要说明的是,通过git clone方式克隆的代码会在服务器上自动建一个与git库名相同的文件夹,克隆git库中的代码,后面的https地址换成自身的git库地址,例如,git clone https:gitee.com/yulongcode/TestGit.git,再通过语句git status查看本地修改的代码提交到暂存区,再通过语句git commit-m给将要提交的代码写注释,进而通过语句git pull拉去远端代码,通过语句git push推送该远端代码;
2、若安装了安全外壳协议(secture shell,SSH),可以通过SSH获取git代码,其中,通过SSH获取git代码的方式与使用http获取git代码的方式类似,需要注意的是,通过ssh的方式拉取和提交代码的时候需要在git pull和git push的后面加上ssh的地址。
因此,通过git获取各组件的源代码的方式有多种,具体此处不做限定。
本实施例中,在获取源代码后,可以将uandaima按照文件名、文件md5形式保存至本地数据库中。
102、通过第三类库管理工具CocoaPods组件管理方式pod install构建整体工程;
由于IOS工程采用组件化的形式,而组件管理主要是通过第三类库管理工具CocoaPods,因此在将各个组件代码组合在一起时,需要用到CocoaPods。CocoaPods为IOS开发、macOS开发中的包依赖管理工具,效果可类比于Java中的Maven、Grace、NodeJS中的npm。在通过git获取各组件的源代码后,通过第三类库管理工具CocoaPods组件管理方式podinstall构建整体工程,具体可以为,判断当前组件是否已存在静态库,需要说明的是,静态库是程序代码的合集,是共享程序代码的一种方式。在连接时,静态库会被完整地复制到可执行文件中;若当前组件中存在静态库,则通过所述CocoaPods将所述当前组件的静态库组合进所述整体工程中;若当前组件中不存在静态库,则通过所述CocoaPods将所述当前组件的源代码组合进所述整体工程中。其中,判断当前组件是否已存在静态库的方式包括:在执行所述pod install时查找所述当前组件的二进制文件,并判断所述二进制文件是否以commit形式安装;若是,则根据所述当前组件的名称、所述当前组件的版本和所述当前组件的编译模式在所述共享缓存目录中确定是否存在所述当前组件对应的静态库,具体地,按照编译编译模式(包括Debug、Release等)+库名称+版本+lib库名称.a的文件目录路径进行查找,例如:Debug/AFNetworking/3.5.0/libAFNetworking.a的形式。
需要说明的是,在CocoaPods执行pod install命令时,会先读取podfile中的信息,即CocoaPods工具管理库版本配置文件,按照podfile中执行的库以及版本去下载对应库版本的源代码文件到本地。
另外,通过CocoaPods将当前组件的静态库组合进整体工程中,具体地,重新改写当前组件spec信息,将头文件和源文件改为.h文件,同时添加静态库文件至整体工程中,其中,Spec信息决定了组件怎样组合到整体工程中,对于组件存在头文件(.h文件)、源文件(.m等),在存在静态库文件的组件中,就不需要源文件,直接使用静态库文件,静态库文件相当于当前组件所有源文件编译后的集合,而头文件主要是用来告诉外部(其他调用出)如何使用该组件,因此头文件是不可少的。在改头文件形式时,需判断源代码配置的格式,如果源代码包含hpp,则去掉其他文件配置,保留hpp文件;如果包含.h,则去掉其他文件配置,保留.h文件;如果为**/*,则改为*{.h|.hpp},去掉其他文件。
需要说明的是,实际应用中,构建整体工程的方式还可以为:对整体工程按照组件层次划分为业务组件、基础组件和路由中间件组件,对业务组件和基础组件按功能服务粒度划分为服务子组件,业务组件为与业务相关的上层功能服务组件;基础组件时为业务组件提供基本功能的底层支撑组件,基础组件可以包括如下一种或者多种:网络组件、缓存组件、资源组件、日志组件或配置组件。再构建路由中间件组件,路由中间件组件用于协调解耦服务子组件,并为服务子组件提供自动发现服务和组件通信服务,路由中间件组件中包含有服务子组件的方法接口,路由中间件组件对外提供服务发现接口,服务发现接口定义包括:模块名称、模块下的接口名称、提供给模块接口的参数名称以及是否为缓存模块。再根据路由中间件组件中的方法接口构建服务子组件,通过Cocoapods建立私有仓库,并将服务子组件和路由中间件提交到私有仓库,具体地,创建用来存储各服务子组件podspec文件的私有仓库,其中,podspec格式文件中包括以下的一种或者多种:组件名称、组件版本、组件功能描述以及组件依赖的三方库。然后再拉取私有仓到本地,创建组件podspec格式文件,在本地测试验证组件,通过验证后上传各服务子组件的podspec到私有仓库,提交到私有仓库后,再通过Cocoapods将私有仓库中的相应组件引入整体工程,具体地,组件构建完成并放到私有仓库后,主工程通过Podfile,引入相关组件,并通过Cocoapods组件管理方式pod install构建工程,组件更新后通过pod update更新到主工程,实现整体工程的构建。
103、编译整体工程,得到整体工程中各组件对应的静态库;
104、将静态库存储至共享缓存目录中;
在构建了整体工程后,编译该整体工程,以得到整体工程中各组件对应的静态库。具体地,当编译所述整体工程中第二组件时,确定所述第二组件的源代码是否存在中间目标文件,所述第二组件为所述整体工程中的任一组件,中间目标文件为源码代码(其格式可为.m)生成的中间文件,是静态库的组成部分,静态库文件是库中所有的源代码文件生成的中间文件的集合,中间目标文件可为.obj文件;若存在,则使用所述中间目标文件进行编译;若不存在,则使用所述第二组件的源代码进行编译。在本实施例中,可以使用XCODE集成开发环境对整体工程中各组件的源代码进行编译,生成项目自身的代码和依赖库组件的二进制文件,其中,XCODE是运行在操作系统Mac OS上的集成开发工具,生成的二进制文件可以包括以.a和.framework等为文件后缀名的静态库,和以.tbd和.framework等为文件后缀名的动态库。
本实施例中,可以通过makefile编译整体工程中的各组件以生成各组件对应的静态库,具体生成静态库文件的过程如下:
$(LIB_OBJECT):$(OBJECT)其中,LIB_OBJECT为目标文件,OBJECT为依赖文件;
$(AR)$(LIB_OBJECT)$(OBJECT)使用ar rc命令去编译生成静态库文件命令;
mv$(LIB_OBJECT):$(LIB_DIR)将生成的文件移动到对应的文件夹;
$(OBJECT):$(SRC_OBJECT)$(H_OBJECT)SRC_OBJECT为源文件变量,H_OBJECT为头文件变量;
$(CC)-c$(SRC_OBJECT)CC为编译变量;
通过上述命令,即可实现静态库文件的生成。
根据IOS编译原理,每个组件在编译后会生成.a文件以供其他地方使用。在默认情况下,整个工程的编译均会导致工作所有组件的重新编译,此时整体编译时间便会很长。因此,如何减少组件的重新编译,是降低整体工程编译时间的关键。本实施例中,由于组件化不充分导致不是所有组件都可以单独生成静态库,但是这些组件在整体工程中均已编译成功,因此可以利用在整体工程中生成的静态库,将其保存起来以便后续编译直接使用,从而缩短编译时间,即将静态库存储至共享缓存目录中可以为将所述各组件对应的静态库以组件名称、组件版本和组件编译模式关联存储至所述共享缓存目录中,所述组件编译模式包括Debug模式或者Release模式,具体地,通过传入编译输出目录,读取pod install生成的配置文件,获取所有的库以及版本进行循环,按照编译输出目录/库名称/lib库名称.a查找是否存在此文件,如果存在继续下一步,否则进行下一次循环,找到编译输出目录中的静态库文件后按照组件编译模式/库名称/版本/lib库名称.a拷贝到共享缓存目录中。
需要说明的是,对于组件静态库的缓存是较高粒度的处理,对于组件只是修改一两行代码而需要重新编译整个组件以便生成组件静态库,同样需要耗费不少时间,此处主要是对组件更细粒度的缓存:源代码文件缓存。在编译期间源代码文件会生成对应的中间目标文件,可以将该中间目标文件缓存起来,在源代码未发生变化的情况下使用缓存的目标文件,从而降低组件生成静态库的时间。
105、当整体工程中存在更新源代码的第一组件时,将第一组件编译成第一组件对应的静态库,以使得当整体工程需要第一组件时,将第一组件对应的静态库组合至整体工程中;
本实施例中,当整体工程中存在更新源代码的第一组件时,便将第一组件编译成.a文件即静态库存储起来,在整体工程需要使用到第一组件的代码时,不再是将第一组件的源代码组合到整体工程中,而是将第一组件的静态库文件组合到整体工程中,此时由于第一组件已经是静态库文件,不需要再次编译,因此编译时间将会降低。实际应用中,具体的编译方式可为:通过设置Xcode配置,添加CC和CXX编译参数,来设置自定义的编译前端命令,设置为编写的编译缓存命令,在执行编译时编译器会调用CC和CXX中设置命令,其中CC为Objective-C代码、CXX为Objective-C++代码,编译缓存器获取到编译参数后,分析编译参数,实际中通过按照官方编译文档确定具体参数用途,再获取当前进行编译的文件即第一组件,通过编写C md5函数读取第一组件的MD5值,按照共享缓存目录/Cache/md5/文件名称.o查找,如果找到对应目标文件(.o文件),将此文件按照编译参数中获取的编译输出目标文件路径拷贝,完成编译当前编译工程;如果没有找到目标文件,则继续调用原生的clang编译指令进行编译,Clang编译指令编译完成后,将编译生成的目标文件按照上述md5值/文件名.o拷贝到共享缓存目录中,以后下次编译继续使用以及其他编译任务使用。
106、输出IPA文件。
在缓存了各组件的静态库之后,可以生成苹果安装包IPA文件,来上传到一些第三方网站以方便测试人员测试,或者用户安装。其中,生成IPA文件为较成熟的现有技术,具体本实施例不再赘述。
本实施例中,每个组件在编译后生成.a文件以供调用,但在一般情况下,在做整个项目的时候,每需要一个组件就要再编译一次,即使是以前编译过的组件也不能重复使用,这样就导致整个项目的整体编译过程过长,每当有新的组件代码变更时,就将该代码编译成“.a”文件,然后放入静态库保存,以后需要调用时不需要重新编译,直接从静态库取出使用即可;另外,并不是每个组件都可以单独生成静态库,但是这些组件都已经在整体工程中成功编译,故可以利用整体项目中生成的静态库保存组件,后续从静态库直接取出使用。因此,通过本申请提供的IOS编译方法,在IOS工程中使用CocoaPods进行库管理时,从编译预处理、词法解析、语法分析、静态分析、中间代码生成和优化、汇编这些阶段所消耗的时间,使Cocoapods中的库编译时由上述过程直接到链接,从而提升编译时间,以尽快输出安装包。
上面从IOS编译方法的角度对本申请实施例进行了描述,下面从编译设备的角度对本申请实施例进行描述。
请参阅图2,图2为本申请实施例提供的一种可能的编译设备的实施例示意图,其中,该编译设备具体包括:
获取单元201,用于通过git获取各组件的源代码;
构建单元202,用于通过第三类库管理工具CocoaPods组件管理方式pod install构建整体工程,所述整体工程包括所述各组件;所述将所述静态库存储至共享缓存目录中包括:将所述各组件对应的静态库以组件名称、组件版本和组件编译模式关联存储至所述共享缓存目录中,所述组件编译模式包括Debug模式或者Release模式;
编译单元203,用于编译所述整体工程,得到所述整体工程中各组件对应的静态库,并将所述静态库存储至共享缓存目录中;
所述编译单元203还用于当所述整体工程中存在更新源代码的第一组件时,将所述第一组件编译成所述第一组件对应的静态库,以使得当所述整体工程需要所述第一组件时,将所述第一组件对应的静态库组合至所述整体工程中;
存储单元204,用于将所述各组件的源代码以所述源代码的文件名和所述源代码的md5值关联存储至本地数据库。
在一种可能的实施例中,所述构建单元202具体用于:判断当前组件是否已存在静态库;若存在,则通过所述CocoaPods将所述当前组件的静态库组合进所述整体工程中;若不存在,则通过所述CocoaPods将所述当前组件的源代码组合进所述整体工程中。
在一种可能的实施例中,所述构建单元202具体用于:在执行所述pod install时查找所述当前组件的二进制文件,并判断所述二进制文件是否以commit形式安装;若是,则根据所述当前组件的名称、所述当前组件的版本和所述当前组件的编译模式在所述共享缓存目录中确定是否存在所述当前组件对应的静态库。
在一种可能的实施例中,所述构建单元202具体用于:按照文件目录路径所述在所述共享缓存目录中查找所述当前组件对应的静态库,所述文件目录路径包括当前组件的编译模式/库名称/所述当前组件的版本/lib库名称.a。
在一种可能的实施例中,所述编译单元203具体用于:当编译所述整体工程中第二组件时,确定所述第二组件的源代码是否存在中间目标文件,所述第二组件为所述整体工程中的任一组件;若存在,则使用所述中间目标文件进行编译;若不存在,则使用所述第二组件的源代码进行编译。
在一种可能的实施例中,所述存储单元204具体用于:读取所述pod install生成的配置文件,以获取全部静态库以及所述各静态库分别对应的版本;按照编译输出目录/所述各组件对应的静态库名称/lib库名称.a在所述配置文件中查找所述各组件对应的静态库;按照所述组件编译模式/库名称/版本/lib库名称.a的文件路径关联存储至所述共享缓存目录中。
在一种可能的实施例中,所述获取单元201具体用于基于超文本传输协议http,通过git clone命令获取各组件的源代码;或者,当系统中安装安全外壳协议SSH时,基于所述SSH,通过命令git pull ssh地址获取所述各组件的源代码。
请参阅图3,图3为本申请实施例提供的电子设备的实施例示意图。
如图3所示,本申请实施例提供了一种电子设备,包括存储器310、处理器320及存储在存储器320上并可在处理器320上运行的计算机程序311,处理器320执行计算机程序311时实现以下步骤:通过git获取各组件的源代码;通过第三类库管理工具CocoaPods组件管理方式pod install构建整体工程,所述整体工程包括所述各组件;编译所述整体工程,得到所述整体工程中各组件对应的静态库,并将所述静态库存储至共享缓存目录中;所述将所述静态库存储至共享缓存目录中包括:将所述各组件对应的静态库以组件名称、组件版本和组件编译模式关联存储至所述共享缓存目录中,所述组件编译模式包括Debug模式或者Release模式;当所述整体工程中存在更新源代码的第一组件时,将所述第一组件编译成所述第一组件对应的静态库,以使得当所述整体工程需要所述第一组件时,将所述第一组件对应的静态库组合至所述整体工程中;将所述各组件的源代码以所述源代码的文件名和所述源代码的md5值关联存储至本地数据库。
在一种可能的实施例中,处理器320执行计算机程序311时具体用于实现以下步骤:判断当前组件是否已存在静态库;若存在,则通过所述CocoaPods将所述当前组件的静态库组合进所述整体工程中;若不存在,则通过所述CocoaPods将所述当前组件的源代码组合进所述整体工程中。
在一种可能的实施例中,处理器320执行计算机程序311时具体用于实现以下步骤:在执行所述pod install时查找所述当前组件的二进制文件,并判断所述二进制文件是否以commit形式安装;若是,则根据所述当前组件的名称、所述当前组件的版本和所述当前组件的编译模式在所述共享缓存目录中确定是否存在所述当前组件对应的静态库。
在一种可能的实施例中,处理器320执行计算机程序311时具体用于实现以下步骤:按照文件目录路径所述在所述共享缓存目录中查找所述当前组件对应的静态库,所述文件目录路径包括当前组件的编译模式/库名称/所述当前组件的版本/lib库名称.a。
在一种可能的实施例中,处理器320执行计算机程序311时具体用于实现以下步骤:当编译所述整体工程中第二组件时,确定所述第二组件的源代码是否存在中间目标文件,所述第二组件为所述整体工程中的任一组件;若存在,则使用所述中间目标文件进行编译;若不存在,则使用所述第二组件的源代码进行编译。
在一种可能的实施例中,处理器320执行计算机程序311时具体用于实现以下步骤:读取所述pod install生成的配置文件,以获取全部静态库以及所述各静态库分别对应的版本;按照编译输出目录/所述各组件对应的静态库名称/lib库名称.a在所述配置文件中查找所述各组件对应的静态库;按照所述组件编译模式/库名称/版本/lib库名称.a的文件路径关联存储至所述共享缓存目录中。
在一种可能的实施例中,处理器320执行计算机程序311时具体用于实现以下步骤:基于超文本传输协议http,通过git clone命令获取各组件的源代码;或者,当系统中安装安全外壳协议SSH时,基于所述SSH,通过命令git pull ssh地址获取所述各组件的源代码。
由于本实施例所介绍的电子设备为实施本申请实施例中一种编译设备所采用的设备,故而基于本申请实施例中所介绍的方法,本领域所属技术人员能够了解本实施例的电子设备的具体实施方式以及其各种变化形式,所以在此对于该电子设备如何实现本申请实施例中的方法不再详细介绍,只要本领域所属技术人员实施本申请实施例中的方法所采用的设备,都属于本申请所欲保护的范围。
请参阅图4,图4为本申请实施例提供的一种计算机可读存储介质的实施例示意图。
如图4所示,本实施例提供了一种计算机可读存储介质400,其上存储有计算机程序411,该计算机程序411被处理器执行时实现如下步骤:通过git获取各组件的源代码;通过第三类库管理工具CocoaPods组件管理方式pod install构建整体工程,所述整体工程包括所述各组件;编译所述整体工程,得到所述整体工程中各组件对应的静态库,并将所述静态库存储至共享缓存目录中;所述将所述静态库存储至共享缓存目录中包括:将所述各组件对应的静态库以组件名称、组件版本和组件编译模式关联存储至所述共享缓存目录中,所述组件编译模式包括Debug模式或者Release模式;当所述整体工程中存在更新源代码的第一组件时,将所述第一组件编译成所述第一组件对应的静态库,以使得当所述整体工程需要所述第一组件时,将所述第一组件对应的静态库组合至所述整体工程中;将所述各组件的源代码以所述源代码的文件名和所述源代码的md5值关联存储至本地数据库。
在一种可能的实施例中,该计算机程序411被处理器执行时具体用于实现如下步骤:判断当前组件是否已存在静态库;若存在,则通过所述CocoaPods将所述当前组件的静态库组合进所述整体工程中;若不存在,则通过所述CocoaPods将所述当前组件的源代码组合进所述整体工程中。
在一种可能的实施例中,该计算机程序411被处理器执行时具体用于实现如下步骤:在执行所述pod install时查找所述当前组件的二进制文件,并判断所述二进制文件是否以commit形式安装;若是,则根据所述当前组件的名称、所述当前组件的版本和所述当前组件的编译模式在所述共享缓存目录中确定是否存在所述当前组件对应的静态库。
在一种可能的实施例中,该计算机程序411被处理器执行时具体用于实现如下步骤:按照文件目录路径所述在所述共享缓存目录中查找所述当前组件对应的静态库,所述文件目录路径包括当前组件的编译模式/库名称/所述当前组件的版本/lib库名称.a。
在一种可能的实施例中,该计算机程序411被处理器执行时具体用于实现如下步骤:当编译所述整体工程中第二组件时,确定所述第二组件的源代码是否存在中间目标文件,所述第二组件为所述整体工程中的任一组件;若存在,则使用所述中间目标文件进行编译;若不存在,则使用所述第二组件的源代码进行编译。
在一种可能的实施例中,该计算机程序411被处理器执行时具体用于实现如下步骤:读取所述pod install生成的配置文件,以获取全部静态库以及所述各静态库分别对应的版本;按照编译输出目录/所述各组件对应的静态库名称/lib库名称.a在所述配置文件中查找所述各组件对应的静态库;按照所述组件编译模式/库名称/版本/lib库名称.a的文件路径关联存储至所述共享缓存目录中。
在一种可能的实施例中,该计算机程序411被处理器执行时具体用于实现如下步骤:基于超文本传输协议http,通过git clone命令获取各组件的源代码;或者,当系统中安装安全外壳协议SSH时,基于所述SSH,通过命令git pull ssh地址获取所述各组件的源代码。
本领域内的技术人员应明白,本申请的实施例可提供为方法、系统、或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本申请是参照根据本申请实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式计算机或者其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
尽管已描述了本申请的优选实施例,但本领域内的技术人员一旦得知了基本创造概念,则可对这些实施例作出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本申请范围的所有变更和修改。
显然,本领域的技术人员可以对本申请进行各种改动和变型而不脱离本申请的精神和范围。这样,倘若本申请的这些修改和变型属于本申请权利要求及其等同技术的范围之内,则本申请也意图包括这些改动和变型在内。