我正在创建一个通用应用程序,它将为不同的客户提供不同的构建.该应用程序对于每个客户是99.5%相同,每个客户的差异都标有客户自己的特定图像和文本和应用程序图标等.
显然,这可以使用以下标志来完成:
#if defined (CUSTOMER_A)
NSString* text = @"Text for customer A";
UIImage *image = [UIImage imageNamed:@"customerAImage"];
#elseif defined (CUSTOMER_B)
NSString* text = @"Text for customer B";
UIImage *image = [UIImage imageNamed:@"customerBImage"];
Run Code Online (Sandbox Code Playgroud)
但显然我想避免这种情况,只需:
NSString* text = @"Text";
UIImage *image = [UIImage imageNamed:@"image"];
Run Code Online (Sandbox Code Playgroud)
(该文本可以本地化,因此它将在最终版本中使用NSLocalizedString).
我想知道一种可能的方法是将项目放入工作空间以及一些静态库,每个静态库包含每个客户的特定文本和图像,然后使用不同的方案来创建不同的构建.因此,方案A将创建一个使用主项目和静态库A构建的目标.
我从一个小概念证明开始,但在走得太远之前,我首先要检查这是一种可行且合理的方法,或者是否有更好的选择.如果可行,那么我会想到几个问题:
如何从主项目中的代码访问静态库中的图像?是否必须创建一个包来访问库的内容,这是如何完成的?
是否可以根据使用的方案更改应用程序桌面和市场图标?
是否可以为每个方案指定一组不同的分发证书等?
静态库是否真的不能包含本地化变体?
这适用于iOS,因此无法使用此框架.
感谢您的任何反馈.
(PS使用Jenkins自动构建系统).
您只需在项目中创建多个目标,并为每个目标(客户/品牌)拥有资源文件夹.以下是如何完成此任务:
希望这可以帮助!
您计划支持多少种变体?如果您拥有超过一小部分,那么拥有目标/项目/等会变得笨拙.这大致就是我们所做的:
皮肤"应用程序"过程基本上包括提供"皮肤"目录列表,这些目录是要复制到应用程序包中的文件.皮肤会覆盖任何重复的文件.应用程序的基础Info.plist与skin目录中指定的任何更改合并.
基本上,我们尝试尽可能地从代码本身中分离出皮肤.我们发现任何涉及Xcode本身的解决方案都涉及从开发人员的头皮中手动自我去除头发.