为现有 iOS 应用程序添加白标的最佳方式
Best way to Whitelabel an existing iOS App
我开始在一家开发移动支付应用程序的公司工作。有一个 "Terminal"-App,它接收客户的付款,然后有一个 "Wallet"-App,用户可以下载并使用它来支付(在那些终端)。
该项目由 2 个目标组成 - 一个用于钱包,一个用于终端。该应用程序仅在 2 个国家/地区使用。这一切都非常复杂,并且拥有庞大的代码库。
现在我需要为客户对整个产品进行白标,他想使用我们的应用程序(两个目标)和他自己的品牌(可能还有一些附加功能或没有某些特定功能),我不确定是什么最好的方法就是实现这一目标。
目前我看到 3 个选项:
- 复制整个项目
将整个项目复制到一个新文件夹并在该新文件夹中进行更改可能是最 "dirty" 的方法。在某些时候,我的第一个代码库可能与重复的代码库差异太大。此外,如果出现任何与安全相关的问题,我将不得不在两个项目中修复它。
- 再创建 2 个目标
我实际上认为这是最好的方法。为钱包和终端创建一个新目标,然后检查源代码中的当前目标以决定应该启用或禁用哪些功能,一开始对我来说听起来不错。但是后来我创建了新目标并注意到我必须为该新目标在每个 class 上设置复选标记。除此之外,我不确定这是否真的是最好的方式。
- 使用 If 条件
第三个选项是用 if 循环包装每个函数,这些函数将只在一个应用程序中可用。我将此视为 "cheapest" 选项,因为它易于设置,而且我仍然可以很好地维护我的代码库。
我还有其他选择吗?你会走哪条路?
基本应用程序和白标应用程序之间最显着的区别是它的语言。白标版本将从右到左,但 iOS 在这方面做得很好,不需要我做所有镜像。
您肯定想要额外的目标。拥有新目标意味着可以轻松使用单独的包标识符、签名设置等。必须在一堆方框上打勾才能将文件添加到新目标似乎很痛苦(使用 Xcode 中目标的 Build Phase|Compile Sources 列表可能更快),但创建一个真正的目标是值得的应用程序之间的分离。
与其使用大量源代码检查来确定您使用的是哪个白标应用,不如考虑让您的应用更加数据驱动。 plist 文件可用于确定您的应用程序具有哪些功能,并且可以为每个目标使用不同的 plist 文件。
例如,它可能包含一个名为 features
的顶级字典,其中包含一堆特征名称的 true
/false
值。您有一个读取文件的 FeatureManager
,它是所有想知道某些内容是否可用的应用程序组件的唯一真实来源。
我开始在一家开发移动支付应用程序的公司工作。有一个 "Terminal"-App,它接收客户的付款,然后有一个 "Wallet"-App,用户可以下载并使用它来支付(在那些终端)。
该项目由 2 个目标组成 - 一个用于钱包,一个用于终端。该应用程序仅在 2 个国家/地区使用。这一切都非常复杂,并且拥有庞大的代码库。
现在我需要为客户对整个产品进行白标,他想使用我们的应用程序(两个目标)和他自己的品牌(可能还有一些附加功能或没有某些特定功能),我不确定是什么最好的方法就是实现这一目标。
目前我看到 3 个选项:
- 复制整个项目
将整个项目复制到一个新文件夹并在该新文件夹中进行更改可能是最 "dirty" 的方法。在某些时候,我的第一个代码库可能与重复的代码库差异太大。此外,如果出现任何与安全相关的问题,我将不得不在两个项目中修复它。
- 再创建 2 个目标
我实际上认为这是最好的方法。为钱包和终端创建一个新目标,然后检查源代码中的当前目标以决定应该启用或禁用哪些功能,一开始对我来说听起来不错。但是后来我创建了新目标并注意到我必须为该新目标在每个 class 上设置复选标记。除此之外,我不确定这是否真的是最好的方式。
- 使用 If 条件
第三个选项是用 if 循环包装每个函数,这些函数将只在一个应用程序中可用。我将此视为 "cheapest" 选项,因为它易于设置,而且我仍然可以很好地维护我的代码库。
我还有其他选择吗?你会走哪条路?
基本应用程序和白标应用程序之间最显着的区别是它的语言。白标版本将从右到左,但 iOS 在这方面做得很好,不需要我做所有镜像。
您肯定想要额外的目标。拥有新目标意味着可以轻松使用单独的包标识符、签名设置等。必须在一堆方框上打勾才能将文件添加到新目标似乎很痛苦(使用 Xcode 中目标的 Build Phase|Compile Sources 列表可能更快),但创建一个真正的目标是值得的应用程序之间的分离。
与其使用大量源代码检查来确定您使用的是哪个白标应用,不如考虑让您的应用更加数据驱动。 plist 文件可用于确定您的应用程序具有哪些功能,并且可以为每个目标使用不同的 plist 文件。
例如,它可能包含一个名为 features
的顶级字典,其中包含一堆特征名称的 true
/false
值。您有一个读取文件的 FeatureManager
,它是所有想知道某些内容是否可用的应用程序组件的唯一真实来源。