應用開發
定製應用
爲某個組織設計和開發的,你應用的自定義版本
舉個栗子,以下場景均屬於定製應用
- 定製的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