本发明涉及一种统一加载文件应用程序生成方法、加载方法及存储介质,尤其涉及一种ios 统一加载动态库或静态库中文件应用程序生成方法、加载方法及存储介质,属于ios文件加载。
背景技术:
1、当ios app工程使用cocoapods进行模块化之后,一个模块就对应一个pod库,每个pod库会使用bundle文件来存放资源文件(所述bundle文件通过手动新建或者通过cocoapods组件的podspec写好参数在编译时生成),那么,对于放在pod库bundle中的图片、文件如何去获取正确的加载,缺少一个统一的方法。
2、当app工程使用cocoapods方式进行模块化之后,没有统一的加载模块资源文件的方式,对我们造成以下几个问题:
3、(1)不同模块是由不同的开发人员或者不同部门来完成,如果没有统一通用的加载方式,需要各自实现一次,影响开发效率,也增加了模块使用方和提供方沟通成本。
4、(2)有的模块中抽取了通用的加载方式,但是内部实现是使用了两个for循环去遍历查找(遍历app中mainbundle和遍历frameworks中所有动态库中的bundle),效率不高,造成了一些线上卡顿。
5、(3)当跨模块加载资源文件时,比如模块a中用到模块b中一个资源文件,需要模块a对模块b添加依赖,然后再根据模块b的一个类和资源bundle的相对路径来查找该文件,添加模块依赖会使得模块耦合,并且加载的方式也不易用。
6、目前,ios系统fundation库中提供的加载或查找资源文件的方法并不适用,具体为以下两种:
7、(1)不带bundle参数的,适用于加载工程mainbundle中文件,当进行了模块化之后,各个模块的资源文件放在各自的bundle中,不在mainbundle中,所以不适用。
8、(2)带bundle参数的,适用于加载指定bundle中的文件,如果是加载自己pod库内bundle中文件,那么可以根据类所在的bundle,再根据相对路径初始化资源文件bundle;但是如果要加载的是其他pod库中bundle文件时,因为其他pod库可能不是自己pod库依赖的库,这样就没办法根据其他pod库中的类所在bundle去初始化资源文件bundle。
9、现有技术,发明名称“一种加载资源文件的方法和装置”,提到了适用于基于reactnative框架开发的应用程序,其做法是一种预先将资源分为通用文件和业务文件,在应用程序启动时将它们读取为通用文件流和业务文件流,合并为资源文件流读取到内存中,然后传递至执行器完成加载。本发明适用于所有ios app,不局限于需要基于react native框架开发;其次,并未使用流的相关方式。
技术实现思路
1、针对现有技术存在的问题,本发明的目的是提供一种统一加载文件应用程序生成方法、加载方法及存储介质。
2、本发明提供一种统一加载文件应用程序生成方法,所述方法包括:
3、创建目标应用程序对应的工程,所述工程中包含类型为应用程序的第一编译目标;
4、在所述工程中创建类型为类的第二编译目标;
5、对所述工程进行编译和打包,生成所述目标应用程序的安装包,所述安装包中包括与所述第一编译目标对应的应用程序集以及所述第二编译目标对应的类;其中,
6、所述第一编译目标包括应用程序的主程序目标内容;
7、所述第二编译目标的类中封装查找资源路径、加载图片两个对外方法,找到资源文件所在的bundle,bundle文件最终在安装包ipa中的路径是可以确定的,如果是静态库,bundle路径是mainbundle路径追加"/bundlename.bundle";如果是动态库,其bundle路径是mainbundle路径追加"/frameworks/pod库名.framework/bundle名.bundle";根据返回的bundle来获取对应的资源文件路径或图片返回给调用方。
8、所述主程序目标内容包括代码文件;所述的第一编译目标内容包括所述的代码文件,或,所述的第一编译目标内容包括所述的代码文件和库文件,或,所述的第一编译目标内容包括所述的代码文件和库文件和资源文件。
9、该方法还可以预先进行处理(预处理):将各个模块的资源文件放置于自己的bundle文件中或者使用cocoapods来生成bundle。
10、所述找到资源文件所在的bundle采取根据pod库和自定义bundle名查找对应bundle的方法;不传默认会使用pod名作为bundle名去查找的方法。
11、本发明还提供一种统一加载文件的加载方法,包括如下步骤:
12、新建一个类,类中封装查找资源路径、加载图片两个对外方法;
13、找到资源文件所在的bundle,
14、bundle文件最终在安装包ipa中的路径是可以确定的,如果是静态库,bundle路径是mainbundle路径追加"/bundlename.bundle";如果是动态库,其bundle路径是mainbundle路径追加"/frameworks/pod库名.framework/bundle名.bundle";
15、根据返回的bundle来获取对应的资源文件路径或图片返回给调用方;
16、调用方加载文件。
17、该方法还包括各个模块的资源文件预先放置于自己的bundle文件中或者使用cocoapods来生成bundle的步骤
18、所述找到资源文件所在的bundle采取根据pod库和自定义bundle名查找对应bundle的方法;不传默认使用pod名作为bundle名去查找。
19、本发明还提供一种计算机可读存储介质,所述存储介质中存储有至少一条指令、至少一段程序、代码集或指令集,所述至少一条指令、所述至少一段程序、所述代码集或指令集由处理器加载并执行以实现以上所述的方法。
20、本发明是基于动态库\静态库在打包时的bundle路径特点来确定路径,进而完成加载;本发明的有益效果是:本发明提供一个统一且相对高效的方式加载各个模块内资源文件,使得模块化开发、沟通更高效,并且解决线上关于加载资源文件造成的部分卡顿问题。
1.统一加载文件应用程序生成方法,其特征在于,所述方法包括:
2.如权利要求1所述的统一加载文件应用程序生成方法,其特征在于,所述主程序目标内容包括代码文件;所述的第一编译目标内容包括所述的代码文件或所述的代码文件和库文件或所述的代码文件和库文件和资源文件。
3.如权利要求1所述的统一加载文件应用程序生成方法,其特征在于,该方法还包括,预处理:将各个模块的资源文件放置于自己的bundle文件中或者使用cocoapods来生成bundle。
4.如权利要求1所述的统一加载文件应用程序生成方法,其特征在于,所述找到资源文件所在的bundle采取根据pod库和自定义bundle名查找对应bundle的方法。
5.如权利要求4所述的统一加载文件应用程序生成方法,其特征在于,不传默认使用pod名作为bundle名去查找。
6.一种统一加载文件的加载方法,其特征在于,包括如下步骤:
7.如权利要求6所述的一种统一加载文件的加载方法,其特征在于,该方法还包括以下步骤,各个模块的资源文件预先放置于自己的bundle文件中或者使用cocoapods来生成bundle。
8.如权利要求6所述的一种统一加载文件的加载方法,其特征在于,所述找到资源文件所在的bundle采取根据pod库和自定义bundle名查找对应bundle的方法;不传默认使用pod名作为bundle名去查找。
9.一种计算机可读存储介质,其特征在于,所述存储介质中存储有至少一条指令、至少一段程序、代码集或指令集,所述至少一条指令、所述至少一段程序、所述代码集或指令集由处理器加载并执行以实现如权利要求1至8任一项所述的方法。