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);代碼中就能通過預編譯宏判斷;

代碼:

#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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章