掌桥专利:专业的专利平台
掌桥专利
首页

iOS应用程序构建方法及装置、电子设备及存储介质

文献发布时间:2023-06-19 11:11:32


iOS应用程序构建方法及装置、电子设备及存储介质

技术领域

本公开的实施例涉及一种iOS应用程序构建方法及装置、电子设备及存储介质。

背景技术

在应用程序的开发过程中,随着功能的增加,业务逻辑必然变得越来越复杂。当工程代码较多时,开发人员需要根据不同代码的业务功能进行归类,划分为不同的业务组件,该过程被称作组件化。采用组件化的方式进行开发时,可以把复杂系统拆分成多个组件,从而分离组件边界和责任,便于独立升级和维护,也避免了各个业务之间的相互影响,便于代码复用以及项目管理,由此提高团队的整体开发效率。

发明内容

本公开至少一个实施例提供一种iOS应用程序构建方法,包括:配置项目信息;基于所述项目信息和至少一个目标组件,利用编译管理服务并采用脚本对预设工程进行配置以得到目标工程;利用打包系统对所述目标工程打包,得到对应于所述目标工程的iOS应用程序。

例如,在本公开一实施例提供的方法中,基于所述项目信息和所述至少一个目标组件,利用所述编译管理服务并采用所述脚本对所述预设工程进行配置以得到所述目标工程,包括:利用所述编译管理服务将所述项目信息传递至操作系统,并基于所述项目信息生成所述脚本;执行所述脚本,以基于所述至少一个目标组件对所述预设工程进行配置,从而得到所述目标工程。

例如,在本公开一实施例提供的方法中,执行所述脚本,以基于所述至少一个目标组件对所述预设工程进行配置,从而得到所述目标工程,包括:执行所述脚本将模板工程复制到预设文件夹,得到所述预设工程;执行所述脚本修改所述预设工程的名称、所述预设文件夹的名称、应用程序识别号、应用程序版本号和应用程序名称;执行所述脚本注入入口配置代码,并将入口配置组件绑定到所述预设工程的生命周期管理模块;执行所述脚本将应用图标和启动页的图片资源导入所述预设工程;执行所述脚本配置依赖库管理项目;其中,所述目标工程为对所述预设工程进行配置后所得到的工程。

例如,在本公开一实施例提供的方法中,所述入口配置代码配置为在被编译后执行:利用所述编译管理服务将入口模板样式传递至所述入口配置组件;将所述至少一个目标组件依序导入所述入口配置组件,其中,所述目标组件包括业务组件或功能组件;利用所述入口配置组件引入入口组件并使所述入口组件返回子控制器,并且将所述子控制器导向主窗口的路由控制器。

例如,在本公开一实施例提供的方法中,利用所述入口配置组件引入所述入口组件并使所述入口组件返回所述子控制器,并且将所述子控制器导向所述主窗口的路由控制器,包括:利用所述入口配置组件将所述入口模板样式、所述目标组件的内容、所述目标组件的顺序、所述目标组件对应的图标和名称导入所述入口组件;使所述入口组件返回所述子控制器;利用所述入口配置组件将所述子控制器导向所述主窗口的路由控制器。

例如,在本公开一实施例提供的方法中,所述主窗口的路由控制器为TabBar类型。

例如,在本公开一实施例提供的方法中,所述入口配置组件还引入生命周期组件,所述生命周期组件包括模块数组,所述模块数组包含所述目标组件的类,所述生命周期组件配置为通过所述入口配置组件接收来自所述生命周期管理模块的生命周期管理消息,基于所述目标组件的类确定需要通知的目标组件,并将所述生命周期管理消息转发到需要通知的目标组件。

例如,在本公开一实施例提供的方法中,配置所述项目信息包括:利用开放平台提供的信息接收入口配置所述项目信息。

例如,在本公开一实施例提供的方法中,所述项目信息包括应用程序名称、应用程序识别号、应用程序版本号、应用图标的统一资源定位拼接、应用图标的资源名称拼接、启动页的统一资源定位拼接、启动页的资源名称拼接、工程名称、打包名称、公有库名称、公有库版本、私有库名称拼接、私有库地址拼接、私有库版本拼接至少之一。

例如,在本公开一实施例提供的方法中,利用所述开放平台提供的所述信息接收入口配置所述项目信息,包括:响应于接收到针对所述开放平台提供的应用管理图标的点击指令,跳转至应用管理界面;响应于接收到针对所述应用管理界面的创建应用标签页的保存图标的点击指令,采集在所述创建应用标签页的对话框中输入的所述项目信息,以实现所述项目信息的配置;其中,所述对话框为所述开放平台提供的所述信息接收入口。

例如,在本公开一实施例提供的方法中,利用所述打包系统对所述目标工程打包,得到对应于所述目标工程的所述iOS应用程序,包括:接入所述打包系统,执行所述脚本以修改打包主题及打包模式,对所述目标工程打包,得到所述iOS应用程序。

例如,本公开一实施例提供的方法还包括:将所述iOS应用程序上传至开放平台,并生成用于下载所述iOS应用程序的下载标识。

例如,在本公开一实施例提供的方法中,所述下载标识为二维码。

例如,本公开一实施例提供的方法还包括:基于依赖库管理项目组件模板,建立私有库。

例如,在本公开一实施例提供的方法中,所述私有库的代码存放在代码仓库中,所述私有库包括多个业务组件和多个功能组件。

例如,本公开一实施例提供的方法还包括:利用集成开发工具建立所述模板工程。

例如,在本公开一实施例提供的方法中,所述模板工程包括content.jason文件,所述conten.jason文件配置为插桩所述应用图标和所述启动页的图片资源。

本公开至少一个实施例还提供一种iOS应用程序构建装置,包括:信息处理单元,配置为配置项目信息;工程处理单元,配置为基于所述项目信息和至少一个目标组件,利用编译管理服务并采用脚本对预设工程进行配置以得到目标工程;打包单元,配置为利用打包系统对所述目标工程打包,得到对应于所述目标工程的iOS应用程序。

本公开至少一个实施例还提供一种电子设备,包括:处理器;存储器,包括一个或多个计算机程序模块;其中,所述一个或多个计算机程序模块被存储在所述存储器中并被配置为由所述处理器执行,所述一个或多个计算机程序模块包括用于实现本公开任一实施例提供的iOS应用程序构建方法的指令。

本公开至少一个实施例还提供一种存储介质,用于存储非暂时性计算机可读指令,当所述非暂时性计算机可读指令由计算机执行时可以实现本公开任一实施例提供的iOS应用程序构建方法。

附图说明

为了更清楚地说明本公开实施例的技术方案,下面将对实施例的附图作简单地介绍,显而易见地,下面描述中的附图仅仅涉及本公开的一些实施例,而非对本公开的限制。

图1A-1B为利用Xcode构建项目的界面示意图;

图2为本公开一些实施例提供的一种iOS应用程序构建方法的流程示意图;

图3为本公开一些实施例提供的iOS应用程序构建方法中自动构建更改项示意图;

图4为图2中步骤S10的流程示意图;

图5A-5B为本公开一些实施例提供的iOS应用程序构建方法中进行项目信息配置的界面示意图;

图5C为本公开一些实施例提供的iOS应用程序构建方法中选择组件的界面示意图;

图6为图2中步骤S20的流程示意图;

图7为图6中步骤S22的流程示意图;

图8为本公开一些实施例提供的iOS应用程序构建方法中入口配置代码被编译后可执行的操作流程图;

图9为图8中步骤S73的流程示意图;

图10为本公开一些实施例提供的iOS应用程序构建方法中自动扫描组件的流程示意图;

图11为本公开一些实施例提供的另一种iOS应用程序构建方法的流程示意图;

图12A为本公开一些实施例提供的iOS应用程序构建方法中创建组件的界面示意图;

图12B为本公开一些实施例提供的iOS应用程序构建方法中管理组件的界面示意图;

图13为本公开一些实施例提供的一种iOS应用程序构建方法的流程示意图;

图14为一种可用于实施本公开实施例提供的iOS应用程序构建方法的系统示意图;

图15为本公开一些实施例提供的一种iOS应用程序构建装置的示意框图;

图16为本公开一些实施例提供的一种电子设备的示意框图;

图17为本公开一些实施例提供的另一种电子设备的示意框图;以及

图18为本公开一些实施例提供的一种存储介质的示意图。

具体实施方式

为使本公开实施例的目的、技术方案和优点更加清楚,下面将结合本公开实施例的附图,对本公开实施例的技术方案进行清楚、完整地描述。显然,所描述的实施例是本公开的一部分实施例,而不是全部的实施例。基于所描述的本公开的实施例,本领域普通技术人员在无需创造性劳动的前提下所获得的所有其他实施例,都属于本公开保护的范围。

除非另外定义,本公开使用的技术术语或者科学术语应当为本公开所属领域内具有一般技能的人士所理解的通常意义。本公开中使用的“第一”、“第二”以及类似的词语并不表示任何顺序、数量或者重要性,而只是用来区分不同的组成部分。同样,“一个”、“一”或者“该”等类似词语也不表示数量限制,而是表示存在至少一个。“包括”或者“包含”等类似的词语意指出现该词前面的元件或者物件涵盖出现在该词后面列举的元件或者物件及其等同,而不排除其他元件或者物件。“连接”或者“相连”等类似的词语并非限定于物理的或者机械的连接,而是可以包括电性的连接,不管是直接的还是间接的。“上”、“下”、“左”、“右”等仅用于表示相对位置关系,当被描述对象的绝对位置改变后,则该相对位置关系也可能相应地改变。

随着开发需求量的增大,为了便于进行应用程序的开发,可以采用组件化平台。在采用组件化平台进行组件化构建时,需要通过现有业务抽出CocoaPods库,同时将业务代码与组件化库均导入项目中,业务组件通过路由(Router)进行关联。CocoaPods是iOS的包管理工具之一,广泛应用于iOS应用程序开发中,用于管理依赖库,例如管理第三方库。

然而,通常的组件化构建方式使得主工程与业务代码以及应用程序的生命周期有大量依赖。比如,根视图控制器(TabBarController)是依赖于主窗口(window)的路由控制器(routerController),针对TabBarController的开发只能在业务工程内部进行,导致每次新建项目,都会有大量重复的代码,增加了工作量。实际上,很多业务功能具有通用性,初始化的流程也可能大体上相同,但是由于数据的依赖性,导致重复开发。

通常,可以采用Xcode来构建工程,以开发iOS应用程序。Xcode是运行在操作系统macOS上的集成开发工具。利用Xcode,可以快捷地开发macOS和iOS应用程序。Xcode具有统一的用户界面设计,编码、测试、调试都在一个简单的窗口内完成。

图1A-1B为利用Xcode构建项目的界面示意图。如图1A-1B所示,在进行iOS应用程序开发时,需要利用Xcode来构建项目。例如,用户首先需要启动Xcode,新建一个工程。然后,在图1A所示的界面中手动配置CocoaPods库。接着,进行一系列手动配置,例如编写代码、导入组件等。然后,在图1B所示的界面中进行生命周期的配置,手动将各个组件的生命周期关联到工程里进行生命周期管理的类。接着,导入应用图标和启动页的图片资源。经过上述一系列手动配置后,对配置完成的工程进行打包和发布。例如,在打包和发布时还需要手动配置多个参数。完成打包和发布后,可以生成iOS应用程序。

每次开发iOS应用程序时,都需要重复上文描述的操作,这增加了很多重复的工作量。在需要升级并维护多个项目并且新项目越来越多的情况下,这种重复的工作会损失大量的开发时间,会给开发人员造成很大的工作压力,不利于提高开发效率。

本公开至少一个实施例提供一种iOS应用程序构建方法及装置、电子设备及存储介质。该iOS应用程序构建方法提供了自动化组件构建流程,可以解决主工程耦合的问题,使主工程模板化且无任何业务代码,可以实现无感打包,避免开发人员手动配置工程,减少组件化应用构建的工作量,提高开发效率。

下面,将参考附图详细地说明本公开的实施例。应当注意的是,不同的附图中相同的附图标记将用于指代已描述的相同的元件。

本公开至少一个实施例提供一种iOS应用程序构建方法。该iOS应用程序构建方法包括:配置项目信息;基于项目信息和至少一个目标组件,利用编译管理服务并采用脚本对预设工程进行配置以得到目标工程;利用打包系统对目标工程打包,得到对应于目标工程的iOS应用程序。

图2为本公开一些实施例提供的一种iOS应用程序构建方法的流程示意图。例如,如图2所示,在一些实施例中,该iOS应用程序构建方法包括如下操作。

步骤S10:配置项目信息;

步骤S20:基于项目信息和至少一个目标组件,利用编译管理服务并采用脚本对预设工程进行配置以得到目标工程;

步骤S30:利用打包系统对目标工程打包,得到对应于目标工程的iOS应用程序。

例如,在步骤S10中,针对需要开发的iOS应用程序,需要配置相应的项目信息。例如,如图3所示,项目信息可以包括应用程序名称、应用程序识别号(Bundle ID)、应用程序版本号(Build号)、应用图标(Icon)的统一资源定位拼接(资源URL拼接)、应用图标的资源名称拼接、启动页(LaunchImage)的统一资源定位拼接、启动页的资源名称拼接、工程名称、打包名称、公有库名称、公有库版本、私有库名称拼接、私有库地址拼接、私有库版本拼接至少之一。

例如,可以采用Cocoapods来管理依赖库,CocoaPods源包括公有源和私有源。公有源包括公有库,公有库可以为任意的开源的第三方库。私有源包括私有库,私有库可以为用户在本地或服务器端建立的仅供特定用户使用的第三方库。例如,私有库的代码可以存放在git仓库中,因此需要配置私有库git地址拼接。当私有库的代码存放在其他代码仓库中时,相应地,私有库地址拼接也进行适应性调整。

例如,为了提供灵活性,还可以配置私有库预置字段拼接,该预置字段可以由用户设置,以满足用户多样化的开发需求。例如,图3中示出的“新工程名称”即为配置的项目信息中的工程名称,图3中示出的“原工程名称”为模板工程的名称,该名称是固定的,关于模板工程将在后文详细说明,此处不再赘述。打包名称(也即图3中示出的“包名”)可以分为两类来分别设置,例如为Release版本和Debug版本分别设置包名。

需要说明的是,本公开的实施例中,项目信息不限于上文列举的信息,还可以包括其他类型的信息,这可以根据实际需求而定,本公开的实施例对此不做限制。

上述项目信息也可以称为自动构建更改项,也即是,每次执行本公开实施例提供的iOS应用程序构建方法时,需要针对所要开发的iOS应用程序更改和配置这些信息。

例如,在一些示例中,配置项目信息可以包括:利用开放平台提供的信息接收入口配置项目信息。例如,开放平台为用于进行组件化开发的平台,开放平台可以为B/S架构或C/S架构。当开放平台为B/S架构时,开发人员可以用浏览器登录开放平台的网页,并在网页中填写项目信息,开放平台接收项目信息以完成项目信息的配置,此时开放平台提供的信息接收入口可以为网页中用于填写项目信息的对话框。当开放平台为C/S架构时,开发人员可以启动客户端,并在客户端的界面中填写项目信息,开放平台接收项目信息以完成项目信息的配置,此时开放平台提供的信息接收入口可以为客户端界面中用于填写项目信息的对话框。

例如,开放平台提供开发人员和非开发人员维护的思路。一方面,以开发人员视角进行组件的维护以及自动化构建的逻辑;另一方面,为非开发人员提供自动打包和查询现有技术的功能。由此,可以节省开发人员查询现有技术能够提供能力的查询时间,并且提供可视化的维护方法,同时为非开发人员提供可视化的功能预知。

例如,在一些示例中,如图4所示,利用开放平台提供的信息接收入口配置项目信息可以包括如下操作。

步骤S11:响应于接收到针对开放平台提供的应用管理图标的点击指令,跳转至应用管理界面;

步骤S12:响应于接收到针对应用管理界面的创建应用标签页的保存图标的点击指令,采集在创建应用标签页的对话框中输入的项目信息,以实现项目信息的配置。

例如,以开放平台为B/S架构为例,下面结合图5A-5B所示的界面示意图对上述步骤S11-S12进行说明。

例如,在步骤S11中,开发人员在登录开放平台的网页后,点击开放平台提供的应用管理图标,提供该网页的服务器在接收到针对应用管理图标的点击指令后,跳转至如图5A所示的应用管理界面。

例如,在步骤S12中,开发人员在应用管理界面的创建应用标签页的对话框中输入项目信息。此时,该对话框为开放平台提供的信息接收入口。例如,如图5A所示,创建应用标签页提供了多个对话框,以供开发人员输入各类项目信息,例如“应用名称”、“应用类型”、“系统类型”以及其他信息。滑动该页面中的垂直滚动条,如图5B所示,多个对话框还可以供开发人员配置应用图标和启动页等。当各类项目信息输入完毕后,如图5B所示,开发人员点击保存图标。服务器接收到针对保存图标的点击指令后,采集在各个对话框中输入的项目信息,从而实现项目信息的配置。

需要说明的是,图5A-5B所示出的界面和界面中的内容仅为示意性的,而非限制性的,根据实际需求,可以利用其他类型的界面来实现项目信息的配置,本公开的实施例对此不做限制。

例如,在配置项目信息时,还可以选择需要使用的组件,组件例如为提前抽离出来的可复用的代码库。例如,可以选择需要使用的业务组件和/或功能组件。业务组件可以提供界面,并具有某种或某些功能,可以单独作为拼接成应用程序的标准模块。功能组件可以为原生应用程序提供某种或某些功能,比如上传、下载、电量控制、蓝牙等功能。例如,如图5C所示,在配置项目信息时,可以进入选择组件的界面,并勾选需要使用的组件,确认后即完成了组件的选择。需要说明的是,在本公开的实施例中,需要使用的组件也可以称为目标组件。

例如,如图2所示,在步骤S20中,基于项目信息和至少一个目标组件,利用编译管理服务并采用脚本对预设工程进行配置以得到目标工程。

例如,在一些示例中,如图6所示,上述步骤S20可以包括如下操作。

步骤S21:利用编译管理服务将项目信息传递至操作系统,并基于项目信息生成脚本;

步骤S22:执行脚本,以基于至少一个目标组件对预设工程进行配置,从而得到目标工程。

例如,在步骤S21中,编译管理服务可以为Jenkins。当利用开放平台的界面完成项目信息的配置后,开放平台可以通过Jenkins访问资源服务器,并将项目信息传递至资源服务器的操作系统。例如,资源服务器运行macOS系统。例如,Jenkins可以部署在该资源服务器上,也可以部署在其他服务器上,这可以根据实际需求而定,本公开的实施例对此不做限制。接收到项目信息后,资源服务器基于项目信息生成脚本。该脚本为可以被资源服务器的操作系统执行的可执行文件,该脚本中包括了可执行命令和需要使用的项目信息。

例如,在一些示例中,开发人员所使用的计算机仅能连接内部局域网,无法连接互联网。因此,可以独立申请权限固定ip地址,从而取得连接外网(互联网)的权限,为后续操作提供便利的网络依赖。通过内网(内部局域网)固定ip地址,建立运行macOS的服务器(也即前述的资源服务器),并在该服务器上部署Jenkins。由此,开放平台能够直接访问Jenkins,并且向Jenkins传递参数。

例如,在步骤S22中,资源服务器的操作系统执行该脚本,通过执行脚本来实现对预设工程的配置,从而得到目标工程。在执行脚本的过程中,不需要开发人员或其他用户进行手动操作,通过执行脚本,可以自动进行工程配置。例如,预设工程为需要修改和配置的工程,该预设工程为复制模板工程后所得到的工程。通过执行脚本对预设工程进行配置,完成配置后即可得到目标工程,也即是,目标工程为对预设工程进行配置后所得到的工程。

例如,在一些示例中,如图7所示,上述步骤S22可以包括如下操作。也即是,执行脚本来配置预设工程的具体流程如下。

步骤S221:执行脚本将模板工程复制到预设文件夹,得到预设工程;

步骤S222:执行脚本修改预设工程的名称、预设文件夹的名称、应用程序识别号、应用程序版本号和应用程序名称;

步骤S223:执行脚本注入入口配置代码,并将入口配置组件绑定到预设工程的生命周期管理模块;

步骤S224:执行脚本将应用图标和启动页的图片资源导入预设工程;

步骤S225:执行脚本配置依赖库管理项目。

需要说明的是,上述步骤S221-S225均是通过执行脚本来实现的,不需要开发人员或其他用户进行手动操作。脚本中包含可执行命令和需要使用的项目信息,因此通过执行脚本可以实现上述步骤S221-S225的操作。

例如,在步骤S221中,执行脚本将模板工程复制到预设文件夹,得到预设工程。例如,模板工程为预先建立的工程,每次执行该iOS应用程序构建方法时,将模板工程复制到预设文件夹,复制得到的工程即为预设工程,以便于后续对该预设工程进行配置。例如,在一些示例中,模板工程可以采用Xcode建立。例如,预设文件夹可以为任意路径的文件夹,例如可以为存储新开发的工程的文件夹,本公开的实施例对此不做限制。通过复制模板工程并对复制后的工程进行配置,可以避免更改模板工程而影响下一次构建应用程序。

例如,在步骤S222中,执行脚本修改预设工程的名称、预设文件夹的名称、应用程序识别号、应用程序版本号和应用程序名称。例如,执行脚本将预设工程的名称修改为前述的新工程名称,将应用程序识别号修改为前述的Bundle ID,将应用程序版本号修改为前述的Build号,依据前述的应用程序名称修改应用程序的名称,并修改预设文件夹的名称。例如,这些信息在步骤S10中已经获取,并被写入生成的脚本中。例如,在修改上述信息时,可以采用xcargs指令和rename指令进行修改。

例如,在步骤S223中,执行脚本注入入口配置代码,并将入口配置组件绑定到预设工程的生命周期管理模块。需要注意的是,由于此时未进行编译,注入的入口配置代码目前只是伪代码,还没有实际调用。

例如,入口配置代码可以包括对应于入口配置组件的代码和对应于开发人员选择的组件(也即目标组件)的代码,还可以包括实现整体逻辑和流程的代码或其他所需要的代码等。

例如,入口配置组件(可称为ConfigEntry组件)主要用于将配置入口与业务组件和/或功能组件进行关联,从而满足Xcode入口配置的绑定限制,将主窗口(window)的routerController绑定上业务组件和/或功能组件。例如,入口配置组件可以是针对本次要开发的iOS应用程序而针对性设计的,从而可以根据本次开发的业务需求,提供相适应的绑定方法。

例如,入口配置组件相当于模板配置组件,可以提供自动扫描的逻辑。例如,在一些示例中,该入口配置组件与TabBar相匹配,从而适用于经典的标签式版式,以提供更广的适用性和兼容性。当然,本公开的实施例不限于此,入口配置组件也可以与其他类型的应用程序版式相匹配,例如与列表式、矩阵式等经典版式相匹配,这可以根据实际需求而定,本公开的实施例对此不做限制。

例如,如图8所示,入口配置代码配置为在被编译后执行如下操作。

步骤S71:利用编译管理服务将入口模板样式传递至入口配置组件;

步骤S72:将至少一个目标组件依序导入入口配置组件;

步骤S73:利用入口配置组件引入入口组件并使入口组件返回子控制器,并且将子控制器导向主窗口的路由控制器。

例如,在步骤S71中,编译管理服务可以为Jenkins,在该步骤中,将入口模板样式传入到Jenkins,然后通过Jenkins传递至入口配置组件。例如,入口模板样式可以是开发人员预先选择和确定的模板样式。例如,入口配置组件提供一个入口接收该入口模板样式。

例如,在步骤S72中,将至少一个目标组件依序导入入口配置组件。目标组件可以包括业务组件或功能组件,目标组件的数量可以为一个或多个。由于在配置项目信息时开发人员选择了要使用的组件,这些被选择的组件即为目标组件,因此此时可以把之前选择的至少一个目标组件依序导入入口配置组件。例如,入口配置组件提供一个入口接收目标组件,然后会根据顺序将目标组件导入到相应的模板。

例如,在步骤S73中,利用入口配置组件引入入口组件并使入口组件返回子控制器,并且将子控制器导向主窗口的路由控制器。例如,入口配置组件会引入一个入口组件,该入口组件为固定的功能组件,该入口组件不同于入口配置组件。

例如,在一些示例中,如图9所示,上述步骤S73可以包括如下操作。

步骤S731:利用入口配置组件将入口模板样式、目标组件的内容、目标组件的顺序、目标组件对应的图标和名称导入入口组件;

步骤S732:使入口组件返回子控制器;

步骤S733:利用入口配置组件将子控制器导向主窗口的路由控制器。

例如,在步骤S731中,由于入口配置组件引入了入口组件,因此可以利用入口配置组件将入口模板样式、目标组件的内容、目标组件的顺序、目标组件对应的图标和名称导入入口组件。在步骤S732中,使入口组件返回子控制器,也即,入口组件给入口配置组件返回一个入口的Controller。在步骤S733中,利用入口配置组件将子控制器导向主窗口的路由控制器,也即是,返回给入口配置组件的Controller通过入口配置组件导向主窗口的routerController。通过上述方式,可以使各个业务组件或功能组件与routerController关联,从而能进行主界面的显示。

例如,在一些示例中,主窗口的路由控制器为TabBar类型,此时,入口配置组件与TabBar相匹配。当然,本公开的实施例不限于此,主窗口的路由控制器也可以为其他任意类型,这可以根据实际需求而定。

通过上述方式,可以实现自动扫描组件,并将组件与路由控制器关联,将业务需求下发到各个组件内部,从而实现业务界面的自动配置,实现组件化的项目开发,无需在主工程内进行开发,主工程内无实质代码。

图10为本公开一些实施例提供的iOS应用程序构建方法中自动扫描组件的流程示意图。如图10所示,在一些示例中,首先选择入口模板样式并通过Jenkins传入入口模板样式。接着,各个组件根据路由显示顺序导入。然后,下载入口图标与名称。接着,根据路由读取Controller并匹配到相应模板。最后,进行页面展示。该流程与上述步骤S71-S73基本相同,此处不再赘述。

例如,如图7所示,在步骤S223中,注入入口配置代码后,将入口配置组件绑定到预设工程的生命周期管理模块。例如,可以查找到主工程的AppDelegate、SceneDelegate,AppDelegate和SceneDelegate即为上述生命周期管理模块。AppDelegate用于管理应用程序生命周期(App生命周期),SceneDelegate用于管理用户交互生命周期(UI生命周期)。然后利用sed绑定入口配置组件相关的关于UI生命周期、App生命周期的逻辑。

例如,在一些示例中,入口配置组件引入生命周期组件。该生命周期组件为用于转发和传递生命周期管理消息的组件,该生命周期组件不仅与Xcode中的生命周期管理模块对接,还与各个业务组件或功能组件对接,从而实现生命周期的下发。例如,生命周期组件包括模块数组,该模块数组包含目标组件的类。生命周期组件配置为通过入口配置组件接收来自生命周期管理模块的生命周期管理消息,基于目标组件的类确定需要通知的目标组件,并将生命周期管理消息转发到需要通知的目标组件。

例如,模块数组是所有注册到主工程中的AppModulesRegister.plist的文件,模块数组包括需要执行生命周期的业务组件或功能组件的类。在应用程序运行时,当主工程收到系统发来的生命周期变化的通知时,生命周期管理模块(也即AppDelegate和SceneDelegate)会接收该通知,然后将相应的生命周期管理消息发送给入口配置组件,入口配置组件再将生命周期管理消息发送给生命周期组件。然后,生命周期组件根据接收到的生命周期管理消息查询AppModulesRegister.plist里注册的类。通过查询,可以得知需要下发的类,也即,确定需要通知的目标组件。然后,需要下发的类会执行相应的代理,通过macOS的消息转发机制实现消息下发。每个业务组件或功能组件也会引入生命周期组件。由此,可以接收生命周期管理消息。

通过上述方式,每次生命周期改变时,入口配置组件通知生命周期组件,生命周期组件代理通知目标组件,目标组件接收消息,从而进行进一步的操作。各个业务组件和功能组件各自维护生命周期,与主工程无耦合逻辑,便于维护和管理。

例如,如图7所示,在步骤S224中,执行脚本将应用图标和启动页的图片资源导入预设工程,由此,可以实现应用图标和启动页的图片资源的插桩。

例如,如图7所示,在步骤S225中,执行脚本配置依赖库管理项目。例如,依赖库管理项目可以为CocoaPods库。在配置CocoaPods库时,进行pod init以生成pod配置文件,通过脚本将source打入Podfile,并提供公有库、私有库的源地址,同时将公有库的名称以及版本预置到项目中。由于主工程中没有业务代码,私有库会自动下载私有库所依赖的公有库,所以在不需要额外添加公有库的情形下,可以不进行公有库的配置。私有库可以包括业务组件库、基础功能依赖库和存储于git中的Flutter库这三者至少之一,还可以包括其他类型的库,本公开的实施例对此不做限制。将私有库和/或公有库打包成pods库,直接通过Cocoapods引入。例如,该CocoaPods库同时支持分支(branch)、标签(tag)、提交(commit)的拉取,可以根据不同的场景注入不同的库节点。由于开发人员在配置项目信息时选择了需要使用的组件,通过配置CocoaPods库,可以将拉取所需要的组件。

在执行图2中的步骤S10和S20之后,也即,经过项目信息配置并执行脚本配置预设工程之后,可以得到目标工程,该目标工程对应于需要开发的iOS应用程序。接下来对目标工程进行打包即可得到iOS应用程序。

例如,如图2所示,在步骤S30中,利用打包系统对目标工程打包,得到对应于目标工程的iOS应用程序。例如,步骤S30可以进一步包括:接入打包系统,执行脚本以修改打包主题及打包模式,对目标工程打包,得到iOS应用程序。例如,可以接入fastlane打包系统,然后通过执行脚本来修改打包主题(也即修改scheme)和打包模式,从而可以对目标工程打包,得到对应的iOS应用程序。例如,该iOS应用程序例如为ipa格式的文件,可以安装在运行iOS系统的终端设备中。需要说明的是,打包系统不限于fastlane,也可以为任意适用的打包系统,这可以根据实际需求而定,本公开的实施例不限于此。例如,还可以执行脚本配置一些打包所需要的参数,例如配置通过Safari浏览器下载的Manifest配置参数等。

在本公开实施例提供的iOS应用程序构建方法中,通过配置项目信息、执行脚本来配置预设工程以得到目标工程、对目标工程进行打包等操作,可以完成组件化的iOS应用程序的构建,得到需要开发的iOS应用程序。在整个操作过程中,仅配置项目信息需要开发人员进行操作,而配置预设工程、对目标工程进行打包等操作不需要开发人员参与,均通过执行脚本来实现,可以避免开发人员手动配置工程,避免开发人员每次新建工程时罗列重复代码,可以省略开发人员手动关联CocoaPods库、修改项目工程、导入组件库的过程,从而减少应用构建的工作量,提高开发效率。而且,配置项目信息的操作也仅需要开发人员填写相关的项目信息即可,不需要进行代码和逻辑的开发,可以减少开发人员的工作量,提高开发效率。该iOS应用程序构建方法提供了自动化组件构建流程,可以自动导入业务组件和/或功能组件,并将各个组件与路由控制器关联,将生命周期下发到各个组件中,从而解决了主工程耦合的问题,使主工程模板化且无任何业务代码。并且,打包过程无需开发人员手动操作,可以实现无感打包。

图11为本公开一些实施例提供的另一种iOS应用程序构建方法的流程示意图。如图11所示,在一些实施例中,该iOS应用程序构建方法可以包括如下操作。

步骤S40:基于依赖库管理项目组件模板,建立私有库;

步骤S50:利用集成开发工具建立模板工程;

步骤S10:配置项目信息;

步骤S20:基于项目信息和至少一个目标组件,利用编译管理服务并采用脚本对预设工程进行配置以得到目标工程;

步骤S30:利用打包系统对目标工程打包,得到对应于目标工程的iOS应用程序;

步骤S60:将iOS应用程序上传至开放平台,并生成用于下载iOS应用程序的下载标识。

例如,上述步骤S10-S30与图2所示的iOS应用程序构建方法中的步骤S10-S30基本相同,此处不再赘述。

例如,在步骤S40中,依赖库管理项目组件模板例如为CocoaPods组件模板,可以基于CocoaPods组件模板建立私有库。例如,首先新建CocoaPods组件模板,将可抽离成库的代码导入库中,通过CocoaPods提供的入口将代码存放在Class文件夹,通过修改.podspec索引,将库文件存放在代码仓库(例如git仓库)中,在配置好标签(tag)与分支(branch)后,将索引通过pod lib lint进行验证,之后,再pod trunck到库索引git中。由此,完成私有库的建立。在使用私有库时,通过引入pod的git地址、分支即可将库拉取到需要的工程中。需要说明的是,建立私有库的方式和流程不限于上文描述的方式和流程,可以采用任意适用的方式和流程建立私有库,这可以根据实际需求而定,本公开的实施例对此不做限制。

例如,私有库的代码存放在代码仓库中,代码仓库可以为git仓库。私有库可以包括多个业务组件和多个功能组件。例如,完成私有库的建立之后,通过绑定组件的pods索引库、组件的git地址、git版本,以及选择是否为入口配置组件,可以利用开放平台的组件管理系统将私有库中的各个组件(例如业务组件和功能组件)拉取到开放平台的系统中。开发人员在构建iOS应用程序时,可以在开放平台提供的界面中选择需要使用的业务组件和功能组件。

图12A为本公开一些实施例提供的iOS应用程序构建方法中创建组件的界面示意图。例如,可以点击开放平台提供的组件管理图标,跳转至如图12A所示的组件管理界面。然后在组件管理界面的创建组件标签页中,填写组件的相关信息,点击“提交”图标之后,即可以在开放平台中创建组件,也即是,将私有库中对应的组件拉取到开放平台的系统中。

图12B为本公开一些实施例提供的iOS应用程序构建方法中管理组件的界面示意图。如图12B所示,在组件管理界面中,还可以对拉取到系统中的组件进行管理,例如查看组件的信息,对组件进行编辑或删除,申请上架或下架等。例如,可以提供组件的描述详情页面,以方便开发人员查询组件。由此,可以便于开发人员对组件进行管理,且使得组件可视化。

通过上述方式,可以便于用户(例如产品经理、项目经理、测试人员等)查看现有业务逻辑,避免重复设计相同业务的冗余工作量,使得组件管理可视化。

例如,如图11所示,在步骤S50中,利用集成开发工具建立模板工程。集成开发工具可以为Xcode,也可以为其他任意适用的开发工具,本公开的实施例对此不做限制。模板工程用于后续复制生成预设工程,以便于执行脚本来配置预设工程。

例如,当采用Xcode时,新建一个固定名称的项目,该固定名称可以根据用户需求设置,该固定名称即为前述的“原工程名称”。为了提供更大的兼容性和灵活性,以适用于多种模板的预置,比如接入Flutter、接入RN等,可以预留原始模板的脚本更改入口。给该项目设置固定名称、最低的版本支持、fastlane的配置、Build号的预置。需要注意的是,Build号如果不提前预置,则后续用PlistBuddy修改时,因为查询不到CURRENT_PROJECT_VERSION字段,会导致更新失败。同时,由于修改时不能低于原有版本,因此将Build号的值预置为0。

在该项目的主工程中设置Icon与LaunchImage,在Assets.xcassets下生成了AppIcon.appiconset以及LaunchImage.launchimage这两个资源文件包,这两个资源文件包同时根据不同的硬件设备匹配出content.json文件,可以自动扫描Icon与LaunchImage。为了解决脚本自动覆盖图片的问题,将这两个资源文件包内的content.json文件复制出来,并删除为了生成上述资源文件包所使用的原始图片资源,然后再将复制出的content.json文件放入上述资源文件包中。在后续执行脚本配置预设工程时,可以将图片一一插桩进去,即可自动配置出关于应用图标和启动页的配置。

经过上述操作,即可建立模板工程,模板工程存放在预设存储路径。例如,模板工程包括content.jason文件,conten.jason文件配置为插桩应用图标和启动页的图片资源。

当需要执行脚本配置预设工程时,可以复制模板工程,并将复制得到的模板工程作为预设工程进行配置。由此不会更改原始的模板工程,使得每次构建iOS应用程序时都可以使用该原始的模板工程。

例如,如图11所示,在步骤S60中,将iOS应用程序上传至开放平台,并生成用于下载iOS应用程序的下载标识。例如,该下载标识可以为二维码。例如,该二维码可以在开放平台提供的可安装入口中展示给用户。当然,本公开的实施例不限于此,下载标识可以为任意类型的标识,只要可用于下载该iOS应用程序即可。例如,资源服务器生成iOS应用程序后将iOS应用程序发送到开放平台并上传至开放平台,当开发人员或其他用户需要下载该iOS应用程序时,可以通过扫描该下载标识从开放平台下载该iOS应用程序,并将该iOS应用程序安装在移动终端(例如手机)中,方便快捷。

图13为本公开一些实施例提供的一种iOS应用程序构建方法的流程示意图。在一些示例中,如图13所示,首先执行脚本复制模板工程到固定文件夹(例如预设文件夹),得到预设工程。然后执行脚本更改和配置预设工程。例如,可以更改工程名称,查找项目中的project.pbxproj文件。该project.pbxproj文件保存了树形结构,维护了Xcode项目的类与工程的关系以及一些配置的关联。利用正则匹配所有的Release和Debug字段,将轮询到的ID插入uuid数组。然后查询INPOPLIST_FILE所在字段的uuid,找到所有Targets相应的INFO.PLIST的绝对文件夹路径。解析INFO.PLIST,查找PRODUCT_NAME(AppName,即工程名称)、PRODUCT_BUNDLE_IDENTIFIER(Bundle ID)和CURRENT_PROJECT_VERSION(Build号),然后修改工程名称、Bundle ID和Build号。接着执行脚本注入主工程入口配置代码,将入口配置组件(ConfigEntry)绑定到预设工程的生命周期管理模块(AppDelegate和SceneDelegate)。然后将应用图标(Icon)和启动页(LaunchImage)下载到Assets.xcassets。接着执行Pod库插接逻辑。然后修改fastlane打包主题(scheme),进行打包,生成ipa格式的文件并上传至开放平台。

由此,完成了iOS应用程序的构建,用户可以扫描开放平台提供的二维码来下载相应的iOS应用程序。图13中所示的各个操作均为执行脚本实现的,无需开发人员手动配置和操作,减少了开发人员的工作量,提高了开发效率。

通过上述方式,可以实现iOS应用程序的自动化构建,将组件、工程配置、图标等信息根据开发人员在开放平台的界面中的配置自动下发到项目工程中,并且完成一键打包,同时向用户提供下载安装的二维码,通过扫描二维码即可安装对应的iOS应用程序。

图14为一种可用于实施本公开实施例提供的iOS应用程序构建方法的系统示意图。如图14所示,该系统100可以包括用户终端110、网络120、服务器130以及数据库140。例如,该系统100可以用于实施本公开任一实施例提供的iOS应用程序构建方法。

用户终端110例如为电脑110-1。可以理解的是,用户终端110可以是能够执行数据处理的任何其他类型的电子设备,其可以包括但不限于台式电脑、笔记本电脑、平板电脑、工作站等。用户终端110也可以是设置有电子设备的任何装备。本公开的实施例对于用户终端的硬件配置或软件配置等不作限制。

用户可以利用用户终端110的浏览器登录开放平台的网页,或者进入用户终端110的原生应用程序的界面,并在相应的网页或界面中配置项目信息。然后,项目信息通过网络120传输至服务器130。服务器130上部署有Jenkins,并且服务器130运行macOS操作系统。服务器130基于接收到的项目信息执行脚本,以基于至少一个目标组件对预设工程进行配置,配置完成后得到目标工程,并对目标工程进行打包,将打包生成的iOS应用程序的ipa格式文件上传至开放平台。用户终端110还可以包括手机110-2。用户利用手机110-2扫描开放平台提供的二维码,从而可以下载对应的iOS应用程序。由此,可以执行本公开实施例提供的iOS应用程序构建方法,从而可以实现iOS应用程序的快速构建。

网络120可以是单个网络,或至少两个不同网络的组合。例如,网络120可以包括但不限于局域网、广域网、公用网络、专用网络等中的一种或几种的组合。

服务器130可以是一个单独的服务器,或一个服务器群组,群组内的各个服务器通过有线的或无线的网络进行连接。一个服务器群组可以是集中式的,例如数据中心,也可以是分布式的。服务器130可以是本地的或远程的。

数据库140可以泛指具有存储功能的设备。数据库140主要用于存储用户终端110和服务器130在工作中所利用、产生和输出的各种数据。数据库140可以是本地的或远程的。数据库140可以包括各种存储器、例如随机存取存储器(Random Access Memory,RAM)、只读存储器(Read Only Memory,ROM)等。以上提及的存储设备只是列举了一些例子,该系统100可以使用的存储设备并不局限于此。

数据库140可以经由网络120与服务器130或其一部分相互连接或通信,或直接与服务器130相互连接或通信,或是上述两种方式的结合。

在一些示例中,数据库140可以是独立的设备。在另一些示例中,数据库140也可以集成在用户终端110和服务器130中的至少一个中。例如,数据库140可以设置在用户终端110上,也可以设置在服务器130上。又例如,数据库140也可以是分布式的,其一部分设置在用户终端110上,另一部分设置在服务器130上。本公开的实施例对于数据库的类型不做限制,例如可以为关系型数据库或非关系型数据库等。

本公开至少一个实施例还提供一种iOS应用程序构建装置。该iOS应用程序构建装置提供了自动化组件构建流程,可以解决主工程耦合的问题,使主工程模板化且无任何业务代码,可以实现无感打包,避免开发人员手动配置工程,减少组件化应用构建的工作量,提高开发效率。

图15为本公开一些实施例提供的一种iOS应用程序构建装置的示意框图。如图15所示,该iOS应用程序构建装置20包括信息处理单元21、工程处理单元22和打包单元23。例如,该iOS应用程序构建装置20可以应用于用户终端中,也可以应用于任意的需要构建iOS应用程序的设备或系统中,本公开的实施例对此不作限制。

信息处理单元21配置为配置项目信息。例如,信息处理单元21可以执行如图2所示的iOS应用程序构建方法的步骤S10。工程处理单元22配置为基于项目信息和至少一个目标组件,利用编译管理服务并采用脚本对预设工程进行配置以得到目标工程。例如,工程处理单元22可以执行如图2所示的iOS应用程序构建方法的步骤S20。打包单元23配置为利用打包系统对目标工程打包,得到对应于目标工程的iOS应用程序。例如,打包单元23可以执行如图2所示的iOS应用程序构建方法的步骤S30。

例如,信息处理单元21、工程处理单元22和打包单元23可以为硬件、软件、固件以及它们的任意可行的组合。例如,信息处理单元21、工程处理单元22和打包单元23可以为专用或通用的电路、芯片或装置等,也可以为处理器和存储器的结合。关于信息处理单元21、工程处理单元22和打包单元23的具体实现形式,本公开的实施例对此不作限制。

需要说明的是,本公开的实施例中,iOS应用程序构建装置20的各个单元与前述的iOS应用程序构建方法的各个步骤对应,关于该iOS应用程序构建装置20的具体功能可以参考上文中iOS应用程序构建方法的相关描述,此处不再赘述。图15所示的iOS应用程序构建装置20的组件和结构只是示例性的,而非限制性的,根据需要,该iOS应用程序构建装置20还可以包括其他组件和结构。

本公开至少一个实施例还提供一种电子设备,该电子设备包括处理器和存储器,一个或多个计算机程序模块被存储在该存储器中并被配置为由该处理器执行,一个或多个计算机程序模块包括用于实现本公开任一实施例提供的iOS应用程序构建方法的指令。该电子设备提供了自动化组件构建流程,可以解决主工程耦合的问题,使主工程模板化且无任何业务代码,可以实现无感打包,避免开发人员手动配置工程,减少组件化应用构建的工作量,提高开发效率。

图16为本公开一些实施例提供的一种电子设备的示意框图。如图16所示,该电子设备30包括处理器31和存储器32。存储器32用于存储非暂时性计算机可读指令(例如一个或多个计算机程序模块)。处理器31用于运行非暂时性计算机可读指令,非暂时性计算机可读指令被处理器31运行时可以执行上文所述的iOS应用程序构建方法中的一个或多个步骤。存储器32和处理器31可以通过总线系统和/或其它形式的连接机构(未示出)互连。例如,根据本公开实施例的iOS应用程序构建方法通过运行于该电子设备30的操作系统中的应用程序实现,或者通过安装在该操作系统中的浏览器访问云端服务器提供的网站而实现。

例如,处理器31可以是中央处理单元(CPU)、图形处理单元(GPU)、数字信号处理器(DSP)或者具有数据处理能力和/或程序执行能力的其它形式的处理单元,例如现场可编程门阵列(FPGA)等;例如,中央处理单元(CPU)可以为X86或ARM架构等。处理器31可以为通用处理器或专用处理器,可以控制电子设备30中的其它组件以执行期望的功能。

例如,存储器32可以包括一个或多个计算机程序产品的任意组合,计算机程序产品可以包括各种形式的计算机可读存储介质,例如易失性存储器和/或非易失性存储器。易失性存储器例如可以包括随机存取存储器(RAM)和/或高速缓冲存储器(cache)等。非易失性存储器例如可以包括只读存储器(ROM)、硬盘、可擦除可编程只读存储器(EPROM)、便携式紧致盘只读存储器(CD-ROM)、USB存储器、闪存等。在计算机可读存储介质上可以存储一个或多个计算机程序模块,处理器31可以运行一个或多个计算机程序模块,以实现电子设备30的各种功能。在计算机可读存储介质中还可以存储各种应用程序和各种数据以及应用程序使用和/或产生的各种数据等。

需要说明的是,本公开的实施例中,电子设备30的具体功能和技术效果可以参考上文中关于iOS应用程序构建方法的描述,此处不再赘述。

图17为本公开一些实施例提供的另一种电子设备的示意框图。该电子设备40例如适于用来实施本公开实施例提供的iOS应用程序构建方法。电子设备40可以是终端设备或服务器等。需要注意的是,图17示出的电子设备40仅仅是一个示例,其不会对本公开实施例的功能和使用范围带来任何限制。

如图17所示,电子设备40可以包括处理装置(例如中央处理器、图形处理器等)41,其可以根据存储在只读存储器(ROM)42中的程序或者从存储装置48加载到随机访问存储器(RAM)43中的程序而执行各种适当的动作和处理。在RAM 43中,还存储有电子设备40操作所需的各种程序和数据。处理装置41、ROM 42以及RAM 43通过总线44彼此相连。输入/输出(I/O)接口45也连接至总线44。

通常,以下装置可以连接至I/O接口45:包括例如触摸屏、触摸板、键盘、鼠标、摄像头、麦克风、加速度计、陀螺仪等的输入装置46;包括例如液晶显示器(LCD)、扬声器、振动器等的输出装置47;包括例如磁带、硬盘等的存储装置48;以及通信装置49。通信装置49可以允许电子设备40与其他电子设备进行无线或有线通信以交换数据。虽然图17示出了具有各种装置的电子设备40,但应理解的是,并不要求实施或具备所有示出的装置,电子设备40可以替代地实施或具备更多或更少的装置。

例如,根据本公开的实施例,图2所示的iOS应用程序构建方法可以被实现为计算机软件程序。例如,本公开的实施例包括一种计算机程序产品,其包括承载在非暂态计算机可读介质上的计算机程序,该计算机程序包括用于执行上述iOS应用程序构建方法的程序代码。在这样的实施例中,该计算机程序可以通过通信装置49从网络上被下载和安装,或者从存储装置48安装,或者从ROM 42安装。在该计算机程序被处理装置41执行时,可以实现本公开实施例提供的iOS应用程序构建方法中限定的功能。

本公开至少一个实施例还提供一种存储介质,用于存储非暂时性计算机可读指令,当该非暂时性计算机可读指令由计算机执行时可以实现本公开任一实施例所述的iOS应用程序构建方法。利用该存储介质,可以提供自动化组件构建流程,解决主工程耦合的问题,使主工程模板化且无任何业务代码,可以实现无感打包,避免开发人员手动配置工程,减少组件化应用构建的工作量,提高开发效率。

图18为本公开一些实施例提供的一种存储介质的示意图。如图18所示,存储介质50用于存储非暂时性计算机可读指令51。例如,当非暂时性计算机可读指令51由计算机执行时可以执行根据上文所述的iOS应用程序构建方法中的一个或多个步骤。

例如,该存储介质50可以应用于上述电子设备中。例如,存储介质50可以为图16所示的电子设备30中的存储器32。例如,关于存储介质50的相关说明可以参考图16所示的电子设备30中的存储器32的相应描述,此处不再赘述。

有以下几点需要说明:

(1)本公开实施例附图只涉及到本公开实施例涉及到的结构,其他结构可参考通常设计。

(2)在不冲突的情况下,本公开的实施例及实施例中的特征可以相互组合以得到新的实施例。

以上所述,仅为本公开的具体实施方式,但本公开的保护范围并不局限于此,本公开的保护范围应以所述权利要求的保护范围为准。

相关技术
  • iOS应用程序构建方法及装置、电子设备及存储介质
  • iOS应用程序的生成方法、装置、设备及存储介质
技术分类

06120112837543