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);代码中就能通过预编译宏判断;

oc
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

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,015评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,262评论 1 292
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,727评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,986评论 0 205
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,363评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,610评论 1 219
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,871评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,582评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,297评论 1 242
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,551评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,053评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,385评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,035评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,079评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,841评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,648评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,550评论 2 270

推荐阅读更多精彩内容