应用开发
定制应用
为某个组织设计和开发的,你应用的自定义版本
举个栗子,以下场景均属于定制应用
- 定制的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 Macros
或Active 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