管理一系列相关 iOS 应用程序的最佳实践

     2023-03-13     226

关键词:

【中文标题】管理一系列相关 iOS 应用程序的最佳实践【英文标题】:Best practice for managing a family of related iOS apps 【发布时间】:2011-04-04 19:00:46 【问题描述】:

我目前正在将现有的 iOS 应用程序改编成一系列非常相似的应用程序(每个应用程序实例可能会映射到不同的国家/地区)。

我计划为每个实例设置不同的构建目标,它们之间的唯一区别应该是:

图像(可能只是启动画面和图标) 本地化 字符串变量:远程服务的基本 URL、应用程序 ID、支持电子邮件等(可能有六个这样的变量)

代码本身在所有应用上都应该相同。

我想知道您认为管理此类应用程序家族的最佳做法。

关于图像和本地化(或一般的资源),应该只是从目标中添加/删除适当的文件(我想我什至可以在不同的目录中为图像使用相同的名称)。

我不确定的主要是其他配置变量。

我听说过/想到了几个选项:

使用预处理器宏和具有不同 URL、ID 等的主配置头文件 每当应用程序启动时从 plist(或类似的配置文件)加载它们,并且每个目标都有一个这样的文件 创建一个空的 .sqlite 文件(此应用已使用 Core Data)并使用默认配置变量填充它,并且每个目标都有一个这样的文件

我认为,一旦我有几个这个应用程序的实例,第一个选项是最快的,而且我每次更改这些设置时都必须重新编译。

我也不确定第三个选项,因为我将向我的数据库中添加不属于那里的实体,而且对于可能是 5-10 的设置来说,这有点矫枉过正.我也不确定如何在更新中添加新设置。

所以我更倾向于第二种选择。

想法?这些有什么替代品吗?

更新 #1:

关于第二个选项,还有一个缺点是这些字符串(id、URL 等)会比源代码中的字符串(即,如果有人打开应用程序并查看 plist)稍微暴露一些。代码。并不是说这是一个大问题,而是需要考虑的问题。

更新 #2:

直接使用应用程序的 info.plist 并将其存储在那里怎么样? (因此每个目标配置都有一个 info.plist)即使最初我想有一个单独的 plist,并且有一个“配置单例”可以在启动时从那里加载所有内容,但我认为简单地拥有它可能更简单在 info.plist 中,然后通过 [[[NSBundle mainBundle] infoDictionary] objectForKey:@"com.example.mykey1"] 阅读。

【问题讨论】:

【参考方案1】:

我会选择预处理器。您可以将所有预处理器放在一个文件/方法中,它不会太乱。就像 oefe 所说,更改 .sqlite 是矫枉过正。使用多个 plist,您会发现自己拖着东西到处走,并且做很多容易出错的操作。

然而,我不会制作很多应用程序。我只会制作一个应用程序,让用户在启动时选择他的城市。您还可以添加应用内购买,让用户在需要时添加更多城市。

您的应用将更易于维护:您想在每次更新时上传、更改 10 多个应用的​​描述和屏幕截图吗?我发现这与 1 个应用程序有关... 您不会向 AppStore 发送垃圾邮件:在 AppStore 中还有 10 多个具有完全相同目的的应用程序是荒谬的......这正是 Apple 进行应用程序内购买的原因,以避免这种情况。 您必须为每个城市找到不同的图标:在 AppStore 上销售您的应用时,您的图标是最重要的方面之一。您希望它尽可能抛光。 Apple 不会允许多个应用程序拥有相同的图标并通过在其上添加标签来区分图标不是一个好的选择。

【讨论】:

虽然我理解您关于不要制作大量应用程序的观点,但它们的内容(从远程服务器访问)使它们与众不同,甚至可能我们只发布每个应用程序App Store 中在其自己的国家/地区发布版本,而不是在其他国家/地区发布。我们更感兴趣的是让每个应用程序在自己的国家/地区具有吸引力,而不是制作一个可能对任何人都没有吸引力的通用应用程序。应用内购买也不适用于此处 - 这些都是免费应用。 预处理器也是我的第一选择,它很可能是最快的实现,我只是担心在 5-6 个不同的构建之后可能会出现混乱...... 如果你只有 1 或 2 个地方做条件句,那就没那么乱了。我发现有6个同名文件比较乱...!【参考方案2】:

我最终选择了 plist,但我没有创建一个新的 plist,而是使用了 info.plist 文件,因此每个目标不需要额外的文件,因为我已经需要为每个目标有一个单独的 info.plist一。我只是直接从包中加载它们:

[[[NSBundle mainBundle] infoDictionary] objectForKey:@"com.example.mykey1"]

我还使用了预处理器(在目标设置上设置了标志),但这主要是为了当我想完全禁用/删除应用程序的某些部分时(例如,以确保我得到了我评论的所有内容出枚举值,甚至包括在几个地方)。

我认为它相对干净,我可以轻松地将其复制到未来的构建中,而不会造成太多混乱。

【讨论】:

【参考方案3】:

鉴于每个国家/地区的变化,并且这些变量是字符串,您为什么不简单地将它们视为可本地化的字符串,从而将问题简化为已经解决的问题?

否则,我会选择 plist。 Sqlite 似乎有点过头了,而且对源代码控制不友好。而且条件编译会很快变得混乱。

【讨论】:

没想到这一点,确实它会让事情变得简单......但我不确定我是否想将每个构建绑定到一个特定的(一组)语言( s)。另外,关于 sqlite 源代码控制问题,我没有考虑过这一点。

ios/iphone sdk 表单管理最佳实践

...:57:28【问题描述】:我正在开发一个涉及大量表单的iPhone应用程序。目前,我为每个设置页面都有一个ViewController类,它有一个加载了可能设置的UITableView。当有人点击一个设置时,他们会被带到一个新视图以输入表单值,或者... 查看详情

在 Angular 2/4/6 应用程序中管理状态的最佳实践

】在Angular2/4/6应用程序中管理状态的最佳实践【英文标题】:BestpracticetomanagestateinAngular2/4/6application【发布时间】:2019-02-0322:06:17【问题描述】:我是Angular的新手,但一个项目已分配给我,所以我已经开始工作,但我面临与状态... 查看详情

转web程序优化的最佳实践:javascript和css篇

...rmance团队为改善Web性能带来最佳实践。他们为此进行了一系列的实验、开发了各种工具、写了大量的文章和博客并在各种会议上参与探讨。最佳实践的核心就是旨在提高网站性能。ExcetionalPerformance团队总结出了一系列可以提高网... 查看详情

最佳管理实践msp

MSP是最佳实践系列刊物中项目组合的一部分(统称为最佳管理实践或BMP)旨在帮助组织或个人管理项目、项目群和服务的一致性及有效性(图1.5)。MSP可以在很好的融入其他BMP产品,不论是国际标准还是组织内部标准。在适当情... 查看详情

国际化 Web 应用程序的最佳实践?

】国际化Web应用程序的最佳实践?【英文标题】:Bestpracticesforinternationalizingwebapplications?【发布时间】:2010-09-1410:02:55【问题描述】:国际化网络应用程序似乎总是一件苦差事。无论您为可插入语言提前计划了多少,总是会遇到... 查看详情

信创办公--基于wps的word最佳实践系列(汇总目录)

信创办公–基于WPS的Word最佳实践系列(汇总目录)本系列基于WPS的Word进行最佳实践讲解,欢迎大家学习查看哦~信创办公–基于WPS的Word最佳实践系列(目录的插入及更新)信创办公–基于WPS的Word最佳实践系列... 查看详情

IOS 最佳 Web 视频编码实践 (FFMpeg)

...ube。我的客户端通过我创建的管理器界面上传视频,我的应用程序使用服务器上的FFm 查看详情

IOS SDK - xcode interface builder - 管理许多对象的最佳实践是啥?

】IOSSDK-xcodeinterfacebuilder-管理许多对象的最佳实践是啥?【英文标题】:IOSSDK-xcodeinterfacebuilder-whatisthebestpracticeinmanagingmanyobjects?IOSSDK-xcodeinterfacebuilder-管理许多对象的最佳实践是什么?【发布时间】:2013-08-0617:24:48【问题描述】... 查看详情

信创办公--基于wps的word最佳实践系列(图片背景的删除)

信创办公–基于WPS的Word最佳实践系列(图片背景的删除)一、删除类型(1)类型一:图片本身的背景颜色模块比较多,背景比较复杂(2)类型二:图片的背景颜色是非常单一的,比方说都... 查看详情

在 ASP.NET WebApi 中路由相关实体的最佳实践是啥

...1-2113:43:13【问题描述】:我正在使用具有链接实体的WebApi应用程序中的实体。例如:EntityStreet有以下相关资源:City实体City具有:Re 查看详情

在 Typescript 应用程序中管理生成的 graphql 模式的最佳实践

】在Typescript应用程序中管理生成的graphql模式的最佳实践【英文标题】:BestpracticesonmanagingageneratedgraphqlschemainTypescriptapplications【发布时间】:2021-10-1218:57:24【问题描述】:我在制定管理生成的graphql文件的最佳策略时遇到了一些... 查看详情

迁移你的单体系统:最佳实践和关注领域

...从最佳实践以及需要关注的领域两个方面,帮助你将单体应用程序演进为面向微服务的应用程序。概述毋庸置疑,完全从头做起的、从基于容器的云服务开始入手的“绿地开发模式(Greenfi 查看详情

关于 JSON 转换和相关对象的最佳实践 Backand

...00【问题描述】:我目前正试图弄清楚如何设置我的Backand应用程序及其RESTAPI。这个问题与问题有关:Backanddeepquerying。但是,我希望我能获得一些关于如何执行服务器端代码以执 查看详情

web前端开发最佳实践系列javascript篇

一、养成良好的编码习惯,提高可维护性1、避免定义全局变量和函数,解决全局变量而导致的代码“污染”最简单的额方法就是把变量和方法封装在一个变量对象上,使其变成对象的属性:1varmyCurrentAction={2length:0,3init:function(){},... 查看详情

在 Qt/C++ 应用程序中管理测量单位转换的最佳实践

】在Qt/C++应用程序中管理测量单位转换的最佳实践【英文标题】:BestpracticetomanageunitsofmeasurementconversioninaQt/C++application【发布时间】:2022-01-1005:14:57【问题描述】:在使用Qt/QML和C++编写的应用程序中增加用户选择首选度量单位的... 查看详情

在实际生产项目中部署(管理依赖)django 可重用应用程序的最佳实践是啥?

】在实际生产项目中部署(管理依赖)django可重用应用程序的最佳实践是啥?【英文标题】:What\'sthebestpracticetodeploy(managedependency)thedjangoreusableappsinarealproductionproject?在实际生产项目中部署(管理依赖)django可重用应用程序的最... 查看详情

云原生安全系列4:6个kubernetes安全最佳实践

...全所有权仍然落在我们最终用户身上。云供应商通常负责管理和保护Kubernetes集群的控制平面(API服务器、调 查看详情

阿里云cdnhttps最佳实践系列——动态证书

...的域名开通HTTPS后,Tengine静态配置文件会越来越大,难以管理, 查看详情