如何使用不同的皮肤/品牌建立不同版本的应用程序?

Gru*_*kes 10 xcode ios

我正在创建一个通用应用程序,它将为不同的客户提供不同的构建.该应用程序对于每个客户是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自动构建系统).

Nat*_*Dev 8

您只需在项目中创建多个目标,并为每个目标(客户/品牌)拥有资源文件夹.以下是如何完成此任务:

  1. 创建两个新的资源文件夹a.Resources_Customer1 b.Resource_Customer2
  2. 将相应的资源复制到相应的文件夹中
  3. 选择项目 - >目标
  4. 复制目标
  5. 在[复制构建资源]中自定义资源名称,使其指向适当的
    客户/品牌
  6. 根据所选目标测试并验证相应的目标运行.

希望这可以帮助!

  • 我只是想指出,这是我现在的雇主采取的做法,结果证明这是一个噩梦.目标确实*不适合品牌推广.目标是针对*不同的*构建(例如,针对不同的设备,具有不同的功能集等)而设计的,而不是具有不同资源的相同构建.在您拥有多个品牌之后,您会发现目标很笨重.最大的缺点之一是你需要做多少工作来创建一个新品牌. (3认同)

Sed*_*ien 5

您计划支持多少种变体?如果您拥有超过一小部分,那么拥有目标/项目/等会变得笨拙.这大致就是我们所做的:

  • Jenkins监视源代码控制并构建它看到的任何新提交.
  • Jenkins将输出.app与一系列"皮肤"归档
  • 一个家庭酿造的网站挂钩到Jenkins API并列出(分支,皮肤)的所有排列.
  • "用户"选择(分支,皮肤),家庭酿造的站点调用一个脚本,将皮肤"应用"到.app包,签名并将其打包成.ipa然后安装到用户的设备.

皮肤"应用程序"过程基本上包括提供"皮肤"目录列表,这些目录是要复制到应用程序包中的文件.皮肤会覆盖任何重复的文件.应用程序的基础Info.plist与skin目录中指定的任何更改合并.

基本上,我们尝试尽可能地从代码本身中分离出皮肤.我们发现任何涉及Xcode本身的解决方案都涉及从开发人员的头皮中手动自我去除头发.