應用開發(fā)
定制應用
為某個組織設計和開發(fā)的,你應用的自定義版本
舉個栗子,以下場景均屬于定制應用
- 定制的UI,例如logo,品牌化等內容
- 為其他組織特制的某些功能
- 為合作伙伴、客戶、經(jīng)銷商定制的特性
- 為企業(yè)員工特制的特性
當你自己的應用做大做強,某些客戶、組織可能希望你為他們做一個定制應用;比如中國移動讓騰訊為他們定制一個帶移動logo的微信App,騰訊的員工就使用定制的微信,大部分功能是和微信一樣的只是logo、某些界面不一樣;
要開發(fā)這樣的定制應用,將原有的項目復制一份然后再將不同的地方改改,這樣是極低級、極不合適的;
因為大部分代碼都是一樣的,為了方便開發(fā)、維護、擴展,最合適的方案是為每個定制應用創(chuàng)建不同的target
平常我們打包應用,其實就是打包了target對應的代碼、配置;即相當于一個target就是一個App;所有target都能共用workspace里的代碼,每個target的info.plist,源碼引用,Build Settings...所有參數(shù)又都可以單獨修改;這就很方便實現(xiàn)”求同存異“的定制需求;
關于project、target的關系,這里引用霜神的比喻:
Xcode Workspace就如同工廠,Xcode Project如同車間,每個車間可以獨立于工廠來生產(chǎn)產(chǎn)品(project可獨立于workspace存在),但是各個車間組合起來就需要工廠來組織(如果用了cocopods,就需要用workspace)。Xcode Target是一條條的流水線,一條流水線上面只生產(chǎn)一種產(chǎn)品。Build Settings是生產(chǎn)產(chǎn)品的秘方,如果是生產(chǎn)汽水,Build Settings就是其中各個原料的配方。Xcode Scheme是生產(chǎn)方案,包含了流水線生產(chǎn),秘方,還包含生產(chǎn)完成之后的質檢(test)。
創(chuàng)建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名均統(tǒng)一,顏色值設置不一樣即可:
//
// 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
}
通過以上設置后,同一句代碼就能實現(xiàn)不同的target顯示不同的顏色和圖片:
imageView.backgroundColor = .mainColor
imageView.image = UIImage(named: "logo")
區(qū)分target
當某個定制應用需要自己特有的功能,而其他應用是沒有的時,同一份代碼編碼時就需要區(qū)分不同的target了;
區(qū)分target的一個方式是在每個target的Build Settings中設置特有的preprocessor Macros
或Active Compilation Conditions
(Swift);代碼中就能通過預編譯宏判斷;
代碼:
#if APPA
print("只有AppA才有的功能")
#endif
應用分發(fā)
應用開發(fā)、測試完,怎么分發(fā)給定制的客戶呢?
目前iOS應用分發(fā)渠道不外乎:App Store、TestFlight、企業(yè)級應用、超級簽名、蘋果商務(Apple Business Manager 簡稱ABM);它們特點鮮明:
對于這種大體功能一致,只是部分界面不一樣的應用肯定是提交不到App Store的,
對于買不起企業(yè)證書的公司來說,Apple Business是最適合這種定制應用分發(fā)的;
Apple Business Manager
官方文檔:https://support.apple.com/zh-cn/guide/apple-business-manager/welcome/web
從19年10月起,在中國大陸也開始支持通過ABM分發(fā)應用,特別適合發(fā)布企業(yè)內部應用、定制應用
申請ABM賬號
官網(wǎng):https://business.apple.com/#enrollment
申請者身份必須是組織,不接受獨立個人身份申請。
申請者需要具有:鄧白氏編碼、AppleID、和公司相關的網(wǎng)站域名、和網(wǎng)站域名相同后綴的郵箱;
賬號申請和使用均免費。
創(chuàng)建管理式 AppleID
蘋果商務應用上架
蘋果商務應用批量購買
關于ABM,
iOS應用發(fā)布方式盤點+蘋果商務詳解這篇文章有詳細教程;
商務應用批量購買后可以下載一個excel文件,該文件包括了申請的所有(最多25000個)兌換碼,兌換碼鏈接類似如下(前面都是固定的,就是code不一樣):
https://buy.itunes.apple.com/WebObjects/MZFinance.woa/wa/freeProductCodeWizard?code=4F3CFEN69R897R
我們將這個鏈接發(fā)給客戶,客戶使用Safari打開會自動跳轉至iTunes Store兌換應用并安裝:
當客戶很多時,不可能這樣一個一個發(fā)送鏈接,其實可以自己搭建一個類似蒲公英的分發(fā)平臺:平臺根據(jù)不同的兌換碼的鏈接生成二維碼交由客戶掃碼兌換、安裝;
關于兌換碼:一個兌換碼只能使用一次(不和設備、賬號綁定),所以當客戶卸載應用后,再使用同一個兌換碼也是兌換不了的;但只要是兌換過應用,是可以通過App Store的已購項目
進行重新下載
、更新
參考:
http://www.lxweimin.com/p/83b6e781eb51
http://www.lxweimin.com/p/c8361a83a338