iOS定制應(yīng)用開發(fā)及Apple Business Manager分發(fā)

應(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 MacrosActive Compilation Conditions(Swift)邢滑;代碼中就能通過預(yù)編譯宏判斷腐螟;

oc
swift

代碼:

#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

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末荆虱,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子朽们,更是在濱河造成了極大的恐慌怀读,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,277評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件骑脱,死亡現(xiàn)場(chǎng)離奇詭異菜枷,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)叁丧,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,689評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門啤誊,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人拥娄,你說我怎么就攤上這事蚊锹。” “怎么了稚瘾?”我有些...
    開封第一講書人閱讀 163,624評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵牡昆,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我摊欠,道長(zhǎng)丢烘,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,356評(píng)論 1 293
  • 正文 為了忘掉前任些椒,我火速辦了婚禮播瞳,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘免糕。我一直安慰自己赢乓,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,402評(píng)論 6 392
  • 文/花漫 我一把揭開白布说墨。 她就那樣靜靜地躺著骏全,像睡著了一般。 火紅的嫁衣襯著肌膚如雪尼斧。 梳的紋絲不亂的頭發(fā)上姜贡,一...
    開封第一講書人閱讀 51,292評(píng)論 1 301
  • 那天,我揣著相機(jī)與錄音棺棵,去河邊找鬼楼咳。 笑死熄捍,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的母怜。 我是一名探鬼主播余耽,決...
    沈念sama閱讀 40,135評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼苹熏!你這毒婦竟也來了碟贾?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,992評(píng)論 0 275
  • 序言:老撾萬榮一對(duì)情侶失蹤轨域,失蹤者是張志新(化名)和其女友劉穎袱耽,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體干发,經(jīng)...
    沈念sama閱讀 45,429評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡朱巨,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,636評(píng)論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了枉长。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片冀续。...
    茶點(diǎn)故事閱讀 39,785評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖必峰,靈堂內(nèi)的尸體忽然破棺而出洪唐,到底是詐尸還是另有隱情,我是刑警寧澤自点,帶...
    沈念sama閱讀 35,492評(píng)論 5 345
  • 正文 年R本政府宣布桐罕,位于F島的核電站,受9級(jí)特大地震影響桂敛,放射性物質(zhì)發(fā)生泄漏功炮。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,092評(píng)論 3 328
  • 文/蒙蒙 一术唬、第九天 我趴在偏房一處隱蔽的房頂上張望薪伏。 院中可真熱鬧,春花似錦粗仓、人聲如沸嫁怀。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,723評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)塘淑。三九已至,卻和暖如春蚂斤,著一層夾襖步出監(jiān)牢的瞬間存捺,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,858評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留捌治,地道東北人岗钩。 一個(gè)月前我還...
    沈念sama閱讀 47,891評(píng)論 2 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像肖油,于是被迫代替她去往敵國(guó)和親兼吓。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,713評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容