應(yīng)用開發(fā)
定制應(yīng)用
為某個(gè)組織設(shè)計(jì)和開發(fā)的爵政,你應(yīng)用的自定義版本
舉個(gè)栗子钾挟,以下場(chǎng)景均屬于定制應(yīng)用
- 定制的UI饱岸,例如logo,品牌化等內(nèi)容
- 為其他組織特制的某些功能
- 為合作伙伴苫费、客戶、經(jīng)銷商定制的特性
- 為企業(yè)員工特制的特性
當(dāng)你自己的應(yīng)用做大做強(qiáng)泥畅,某些客戶、組織可能希望你為他們做一個(gè)定制應(yīng)用方椎;比如中國(guó)移動(dòng)讓騰訊為他們定制一個(gè)帶移動(dòng)logo的微信App钧嘶,騰訊的員工就使用定制的微信,大部分功能是和微信一樣的只是logo闸拿、某些界面不一樣新荤;
要開發(fā)這樣的定制應(yīng)用苛骨,將原有的項(xiàng)目復(fù)制一份然后再將不同的地方改改,這樣是極低級(jí)俐筋、極不合適的澄者;
因?yàn)榇蟛糠执a都是一樣的请琳,為了方便開發(fā)单起、維護(hù)嘀倒、擴(kuò)展,最合適的方案是為每個(gè)定制應(yīng)用創(chuàng)建不同的target
平常我們打包應(yīng)用,其實(shí)就是打包了target對(duì)應(yīng)的代碼碳胳、配置挨约;即相當(dāng)于一個(gè)target就是一個(gè)App诫惭;所有target都能共用workspace里的代碼,每個(gè)target的info.plist馆衔,源碼引用角溃,Build Settings...所有參數(shù)又都可以單獨(dú)修改;這就很方便實(shí)現(xiàn)”求同存異“的定制需求匆瓜;
關(guān)于project陕壹、target的關(guān)系糠馆,這里引用霜神的比喻:
Xcode Workspace就如同工廠怎憋,Xcode Project如同車間绊袋,每個(gè)車間可以獨(dú)立于工廠來生產(chǎn)產(chǎn)品(project可獨(dú)立于workspace存在)癌别,但是各個(gè)車間組合起來就需要工廠來組織(如果用了cocopods,就需要用workspace)躁垛。Xcode Target是一條條的流水線教馆,一條流水線上面只生產(chǎn)一種產(chǎn)品擂达。Build Settings是生產(chǎn)產(chǎn)品的秘方板鬓,如果是生產(chǎn)汽水穗熬,Build Settings就是其中各個(gè)原料的配方。Xcode Scheme是生產(chǎn)方案,包含了流水線生產(chǎn)妓柜,秘方棍掐,還包含生產(chǎn)完成之后的質(zhì)檢(test)。
創(chuàng)建Target
兩種方式
- 新建一個(gè)新的target
- copy一個(gè)已有的target
因?yàn)槊總€(gè)target的info,Build Settings,Build Phases都差不多,使用第二種方式是最簡(jiǎn)單方便的奏寨;
target配置
由于每個(gè)target的info,Build Settings,Build Phases都是獨(dú)立的病瞳,所有可以為每個(gè)不同的target配置不同的設(shè)置套菜;
- 應(yīng)用名稱(Display Name)升略,Bundle Identifier术幔,App Icon诚啃,App Launch Screen:
- info.plist
通過copy的target會(huì)在項(xiàng)目中自動(dòng)生成對(duì)應(yīng)的xxx copy-info.plist文件君纫;
為了方便管理泵额,將這些文件以文件夾的方式分類并重命名迫悠;
info.plist文件重命名及在項(xiàng)目的路徑更改后挟冠,需同步設(shè)置Build Settings的info file設(shè)置
- icon
為每個(gè)target新建.xcassets文件于购,并分類好;在改文件添加target不同的icon知染;
所有這些配置文件、資源文件控淡、icon嫌吠、類都使用同樣的命名,這樣在編碼時(shí)就可以保持一致掺炭,在編譯時(shí)就算是同名但是都能找到每個(gè)target引用的配置文件辫诅、資源文件、icon
- Color
為每個(gè)target新建一個(gè)color類涧狮,類名炕矮、color名均統(tǒng)一么夫,顏色值設(shè)置不一樣即可:
//
// 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
}
通過以上設(shè)置后,同一句代碼就能實(shí)現(xiàn)不同的target顯示不同的顏色和圖片:
imageView.backgroundColor = .mainColor
imageView.image = UIImage(named: "logo")
區(qū)分target
當(dāng)某個(gè)定制應(yīng)用需要自己特有的功能肤视,而其他應(yīng)用是沒有的時(shí)档痪,同一份代碼編碼時(shí)就需要區(qū)分不同的target了;
區(qū)分target的一個(gè)方式是在每個(gè)target的Build Settings中設(shè)置特有的preprocessor Macros
或Active Compilation Conditions
(Swift)邢滑;代碼中就能通過預(yù)編譯宏判斷腐螟;
代碼:
#if APPA
print("只有AppA才有的功能")
#endif
應(yīng)用分發(fā)
應(yīng)用開發(fā)、測(cè)試完困后,怎么分發(fā)給定制的客戶呢乐纸?
目前iOS應(yīng)用分發(fā)渠道不外乎:App Store、TestFlight摇予、企業(yè)級(jí)應(yīng)用汽绢、超級(jí)簽名、蘋果商務(wù)(Apple Business Manager 簡(jiǎn)稱ABM)趾盐;它們特點(diǎn)鮮明:
對(duì)于這種大體功能一致庶喜,只是部分界面不一樣的應(yīng)用肯定是提交不到App Store的,
對(duì)于買不起企業(yè)證書的公司來說救鲤,Apple Business是最適合這種定制應(yīng)用分發(fā)的久窟;
Apple Business Manager
官方文檔:https://support.apple.com/zh-cn/guide/apple-business-manager/welcome/web
從19年10月起,在中國(guó)大陸也開始支持通過ABM分發(fā)應(yīng)用本缠,特別適合發(fā)布企業(yè)內(nèi)部應(yīng)用斥扛、定制應(yīng)用
申請(qǐng)ABM賬號(hào)
官網(wǎng):https://business.apple.com/#enrollment
申請(qǐng)者身份必須是組織,不接受獨(dú)立個(gè)人身份申請(qǐng)丹锹。
申請(qǐng)者需要具有:鄧白氏編碼稀颁、AppleID、和公司相關(guān)的網(wǎng)站域名楣黍、和網(wǎng)站域名相同后綴的郵箱;
賬號(hào)申請(qǐng)和使用均免費(fèi)。
創(chuàng)建管理式 AppleID
蘋果商務(wù)應(yīng)用上架
蘋果商務(wù)應(yīng)用批量購(gòu)買
關(guān)于ABM租漂,
iOS應(yīng)用發(fā)布方式盤點(diǎn)+蘋果商務(wù)詳解這篇文章有詳細(xì)教程阶女;
商務(wù)應(yīng)用批量購(gòu)買后可以下載一個(gè)excel文件,該文件包括了申請(qǐng)的所有(最多25000個(gè))兌換碼哩治,兌換碼鏈接類似如下(前面都是固定的秃踩,就是code不一樣):
https://buy.itunes.apple.com/WebObjects/MZFinance.woa/wa/freeProductCodeWizard?code=4F3CFEN69R897R
我們將這個(gè)鏈接發(fā)給客戶,客戶使用Safari打開會(huì)自動(dòng)跳轉(zhuǎn)至iTunes Store兌換應(yīng)用并安裝:
當(dāng)客戶很多時(shí)业筏,不可能這樣一個(gè)一個(gè)發(fā)送鏈接憔杨,其實(shí)可以自己搭建一個(gè)類似蒲公英的分發(fā)平臺(tái):平臺(tái)根據(jù)不同的兌換碼的鏈接生成二維碼交由客戶掃碼兌換、安裝蒜胖;
關(guān)于兌換碼:一個(gè)兌換碼只能使用一次(不和設(shè)備消别、賬號(hào)綁定)抛蚤,所以當(dāng)客戶卸載應(yīng)用后,再使用同一個(gè)兌換碼也是兌換不了的妖啥;但只要是兌換過應(yīng)用霉颠,是可以通過App Store的已購(gòu)項(xiàng)目
進(jìn)行重新下載
对碌、更新
參考:
http://www.reibang.com/p/83b6e781eb51
http://www.reibang.com/p/c8361a83a338