iOS定制应用开发及Apple Business Manager分发

应用开发

定制应用

为某个组织设计和开发的,你应用的自定义版本

举个栗子,以下场景均属于定制应用

  • 定制的UI,例如logo,品牌化等内容
  • 为其他组织特制的某些功能
  • 为合作伙伴、客户、经销商定制的特性
  • 为企业员工特制的特性

当你自己的应用做大做强,某些客户、组织可能希望你为他们做一个定制应用;比如中国移动让腾讯为他们定制一个带移动logo的微信App,腾讯的员工就使用定制的微信,大部分功能是和微信一样的只是logo、某些界面不一样;

要开发这样的定制应用,将原有的项目复制一份然后再将不同的地方改改,这样是极低级、极不合适的;
因为大部分代码都是一样的,为了方便开发、维护、扩展,最合适的方案是为每个定制应用创建不同的target

平常我们打包应用,其实就是打包了target对应的代码、配置;即相当于一个target就是一个App;所有target都能共用workspace里的代码,每个target的info.plist,源码引用,Build Settings...所有参数又都可以单独修改;这就很方便实现”求同存异“的定制需求;
关于project、target的关系,这里引用霜神的比喻:

Xcode Workspace就如同工厂,Xcode Project如同车间,每个车间可以独立于工厂来生产产品(project可独立于workspace存在),但是各个车间组合起来就需要工厂来组织(如果用了cocopods,就需要用workspace)。Xcode Target是一条条的流水线,一条流水线上面只生产一种产品。Build Settings是生产产品的秘方,如果是生产汽水,Build Settings就是其中各个原料的配方。Xcode Scheme是生产方案,包含了流水线生产,秘方,还包含生产完成之后的质检(test)。

创建Target

两种方式

  • 新建一个新的target
  • copy一个已有的target

因为每个target的info,Build Settings,Build Phases都差不多,使用第二种方式是最简单方便的;

target配置

由于每个target的info,Build Settings,Build Phases都是独立的,所有可以为每个不同的target配置不同的设置;

  • 应用名称(Display Name),Bundle Identifier,App Icon,App Launch Screen:
  • info.plist
    通过copy的target会在项目中自动生成对应的xxx copy-info.plist文件;
    为了方便管理,将这些文件以文件夹的方式分类并重命名;
    info.plist文件重命名及在项目的路径更改后,需同步设置Build Settings的info file设置
  • icon
    为每个target新建.xcassets文件,并分类好;在改文件添加target不同的icon;
    所有这些配置文件、资源文件、icon、类都使用同样的命名,这样在编码时就可以保持一致,在编译时就算是同名但是都能找到每个target引用的配置文件、资源文件、icon
  • Color
    为每个target新建一个color类,类名、color名均统一,颜色值设置不一样即可:
//
//  AppColors.swift
//  AppA
//
extension UIColor {
    static var mainColor: UIColor {
        return UIColor.blue
    }
    
    static var buttonColor: UIColor {
        return UIColor.lightGray
    }
    
    // ... other colors
}
//
//  AppColors.swift
//  AppB
//
extension UIColor {
    static var mainColor: UIColor {
        return UIColor.red
    }
    
    static var buttonColor: UIColor {
        return UIColor.yellow
    }
    
    // ... other colors
}

通过以上设置后,同一句代码就能实现不同的target显示不同的颜色和图片:

imageView.backgroundColor = .mainColor
imageView.image = UIImage(named: "logo")

区分target

当某个定制应用需要自己特有的功能,而其他应用是没有的时,同一份代码编码时就需要区分不同的target了;
区分target的一个方式是在每个target的Build Settings中设置特有的preprocessor MacrosActive Compilation Conditions(Swift);代码中就能通过预编译宏判断;

代码:

#if APPA
    print("只有AppA才有的功能")
#endif

应用分发

应用开发、测试完,怎么分发给定制的客户呢?
目前iOS应用分发渠道不外乎:App Store、TestFlight、企业级应用、超级签名、苹果商务(Apple Business Manager 简称ABM);它们特点鲜明:

对于这种大体功能一致,只是部分界面不一样的应用肯定是提交不到App Store的,
对于买不起企业证书的公司来说,Apple Business是最适合这种定制应用分发的;

Apple Business Manager

官方文档:https://support.apple.com/zh-cn/guide/apple-business-manager/welcome/web

从19年10月起,在中国大陆也开始支持通过ABM分发应用,特别适合发布企业内部应用、定制应用

申请ABM账号

官网:https://business.apple.com/#enrollment

申请者身份必须是组织,不接受独立个人身份申请。
申请者需要具有:邓白氏编码、AppleID、和公司相关的网站域名、和网站域名相同后缀的邮箱;
账号申请和使用均免费

创建管理式 AppleID

苹果商务应用上架

苹果商务应用批量购买

关于ABM,
iOS应用发布方式盘点+苹果商务详解这篇文章有详细教程;

商务应用批量购买后可以下载一个excel文件,该文件包括了申请的所有(最多25000个)兑换码,兑换码链接类似如下(前面都是固定的,就是code不一样):
https://buy.itunes.apple.com/WebObjects/MZFinance.woa/wa/freeProductCodeWizard?code=4F3CFEN69R897R
我们将这个链接发给客户,客户使用Safari打开会自动跳转至iTunes Store兑换应用并安装:

当客户很多时,不可能这样一个一个发送链接,其实可以自己搭建一个类似蒲公英的分发平台:平台根据不同的兑换码的链接生成二维码交由客户扫码兑换、安装;

关于兑换码:一个兑换码只能使用一次(不和设备、账号绑定),所以当客户卸载应用后,再使用同一个兑换码也是兑换不了的;但只要是兑换过应用,是可以通过App Store的已购项目进行重新下载更新

参考:
https://www.jianshu.com/p/83b6e781eb51
https://www.jianshu.com/p/c8361a83a338

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章