過(guò)完年回來(lái)app上架到App Store,雖然之前上架過(guò),還是遇到不少坑,特別是配置證書(shū)的時(shí)候,還好是上架是一次性通過(guò),整理一份詳細(xì)圖文詳解。項(xiàng)目是flutter項(xiàng)目上架到App Store,與原始的iOS上架還是有些差別。
macOS 10.15.7
Flutter 2.0.6
Xcode Version 12.4
vscode
d eveloper.apple.com 點(diǎn)擊“Account”欄目
如果該App需要多人協(xié)作開(kāi)發(fā),請(qǐng)進(jìn)入People進(jìn)入人員編輯。注意負(fù)責(zé)上架AppStore的人員需要有管理級(jí)別的權(quán)限
然后點(diǎn)擊 Certificates, Identifiers & Profiles 圖標(biāo)
Certificates作用是為Mac電腦提供開(kāi)發(fā)能力,具有Certificates的Mac電腦能夠真機(jī)調(diào)試、打包、上架APP到app store。
Certificates有兩種環(huán)境:開(kāi)發(fā)( Development )環(huán)境和生產(chǎn)( Distribution )環(huán)境。Certificates還有兩種類型:Software 和 Services。
簡(jiǎn)單理解:
(1).開(kāi)發(fā)環(huán)境(Development):直接用Xcode調(diào)試debug就屬于開(kāi)發(fā)環(huán)境,在模擬器上debug是不需要Certificates的。但是在真機(jī)上調(diào)試運(yùn)行就需要Certificates開(kāi)發(fā)證書(shū),發(fā)布到APP Store 需要 Certificates 生產(chǎn)證書(shū)。
(2).生產(chǎn)環(huán)境(Distribution):上架app store,打包生成ipa包等都屬于生產(chǎn)環(huán)境。只要是通過(guò)Archive生成都都是屬于生產(chǎn)環(huán)境。
(3). Software: 使mac具有相應(yīng)的開(kāi)發(fā)和發(fā)布能力,一臺(tái)Mac只需要建立一套即可。
(4). Services: Apple提供的額外服務(wù),最常見(jiàn)的就是消息推送服務(wù),會(huì)針對(duì)不同的App建立不同的Services Certificates,畢竟每個(gè)app需要的Services不同。
針對(duì)Software部分需要注意:
Certificates是對(duì)Mac電腦有效的,是根據(jù)Mac的CSR請(qǐng)求證書(shū)創(chuàng)建的,而不是對(duì)app,所以Certificates的開(kāi)發(fā)(Development)證書(shū)和發(fā)布(Distribution)證書(shū)是有數(shù)量限制的。超過(guò)數(shù)量就不能再創(chuàng)建了,除非刪除已有的證書(shū)。
只要你這個(gè)Mac電腦擁有了Certificates證書(shū),就能用申請(qǐng)Certificates的賬號(hào)在這個(gè)Mac上開(kāi)發(fā)多個(gè)app而不需要再重新申請(qǐng)Certificates。所以正確操作是,對(duì)一個(gè)Mac電腦,只需要申請(qǐng)一套Certificates就好了,在創(chuàng)建第二個(gè)第三app時(shí)不需要再去創(chuàng)建一套Certificates。
Services的證書(shū)是需要另外創(chuàng)建的,而且沒(méi)有數(shù)量限制,但是還是建議只用一臺(tái)Mac創(chuàng)建就好,他人合作導(dǎo)出 p12文件給對(duì)方Mac安裝即可。
Software和Services都是和Mac綁定的:
Certificates是和Mac綁定的,不能直接copy給其他Mac使用,但是Certificates可以導(dǎo)出 p12給其他Mac電腦用的,導(dǎo)出的 p12同樣具有測(cè)試打包和發(fā)布的能力。如果多人協(xié)同開(kāi)發(fā),第二個(gè)Mac也是不需要再去申請(qǐng)一套Certificates的。用他人Mac電腦上Certificates導(dǎo)出的 p12文件安裝上即可。
Certificates:證書(shū)
(1) 通過(guò)Mac鑰匙串管理工具生成CSR請(qǐng)求文件,用于申請(qǐng)Certificates,與Certificates綁定
這里需要注意,不要選中證書(shū)列表中的某個(gè)證書(shū),否則菜單就不是這個(gè)。
郵箱地址填一個(gè),選擇存儲(chǔ)到磁盤,會(huì)正常一個(gè) certSigningRequest文件,重命名一下,便于識(shí)別。
(2) 申請(qǐng)開(kāi)發(fā)Development證書(shū) 先創(chuàng)建software部分,再創(chuàng)建推送證書(shū)部分。
選擇iOS Development ,創(chuàng)建iOS Development 開(kāi)發(fā)證書(shū)。Xcode11以上可以創(chuàng)建Apple Development 證書(shū).
continue 下一步
選擇剛剛的證書(shū)文件,
下載下來(lái),名稱是 development.cer, 如果是選擇了iOS App Development 證書(shū)則名稱是 ios development.cer,最好改一下名稱,方便識(shí)別。
然后雙擊按鈕,打開(kāi)鑰匙串管理工具,在我的證書(shū) 就能看到安裝了,需要注意的是現(xiàn)實(shí)的名稱 不是文件名,是你開(kāi)發(fā)者賬號(hào)的個(gè)人team名稱,里面的秘鑰名稱就是你剛剛填寫的名稱
(3) 申請(qǐng)iOS Distribution (App Store and Ad Hoc)生產(chǎn)證書(shū)
方法與上面一樣,只是選擇的時(shí)候選iOS Distribution (App Store and Ad Hoc)類型
然后上傳CSR文件,Register,Download, 該名稱。
(4) 推送證書(shū)申請(qǐng)
推送證書(shū)的申請(qǐng)與第二部分是一樣的,只是中間會(huì)讓選擇證書(shū)綁定的App id。(這里需要先創(chuàng)建Identifiers,查看步驟2.Identifiers:App 身份證) 同樣,需要申請(qǐng)Development和Distribution兩種環(huán)境。
選擇Mac鑰匙串工具導(dǎo)出的 certSigningRequest文件,與這臺(tái)Mac綁定。
iOS每個(gè)APP都有自己唯一的身份證(Identifiers)。app的身份證就在這里申請(qǐng),也就是app的唯一標(biāo)識(shí)。
填寫app描述,和Bundle ID
關(guān)于Bundle ID:十分重要的東西,可以理解為app的身份證號(hào)碼。所有app都是唯一的。為了避免重復(fù)和辨識(shí),一般都采用反域名的格式+app名稱。
如圖所示。這里一經(jīng)申請(qǐng)變無(wú)法更改,在每個(gè)項(xiàng)目建立時(shí)就應(yīng)該事先定義好app的Bundle ID。Bundle ID除了這里申請(qǐng)app需要用到以外,在申請(qǐng)第三方服務(wù):如微信登陸、友盟推送、google服務(wù)等等都需要使用到Bundle ID與你的app綁定。所以,Bundle ID非常重要。
一般,我們會(huì)采用Explicit(明確的)Bundle ID標(biāo)識(shí),而不會(huì)采用Wildcard(通配符)來(lái)定義Bundle ID。如果采用了,會(huì)導(dǎo)致推送這部分是沒(méi)用的。
然后Register,回到 identifiers列表頁(yè)可以看到剛剛創(chuàng)建的。
app的每個(gè)設(shè)備都有唯一的udid。將udid加入到Devices列表后,這些設(shè)備具有debug測(cè)試和ad hoc安裝能力。
反正,需要測(cè)試的iPhone,iPad都需要加入到這個(gè)列表里面。
Devices設(shè)備列表是針對(duì)開(kāi)發(fā)者賬號(hào),所以也只需要添加一次。
如何查看設(shè)備的udid。有很多方法,
1.Xcode查看(開(kāi)發(fā)者查看自己的)
2.用蒲公英 www.pgyer.com / tools / udid
描述文件Profiles將team、Identifiers、Certificates、Devices等信息聯(lián)系起來(lái)。
Profiles同樣分為兩種環(huán)境:開(kāi)發(fā)(Development)環(huán)境和發(fā)布(Distribution)環(huán)境,不同的環(huán)境需建立不同的描述文件Profiles。
描述文件是這對(duì)app綁定的,所以每個(gè)APP都會(huì)建立相應(yīng)的一套描述文件。但是描述文件可copy給其他Mac使用,但是對(duì)于的Mac需要安裝相應(yīng)的Certificates導(dǎo)出的 p12文件。
將上面創(chuàng)建的所有信息聯(lián)系起來(lái),供xcode使用。同樣分別創(chuàng)建Development和Distribution兩種環(huán)境的描述文件
選擇App ID
選擇對(duì)應(yīng)的 certificates證書(shū),開(kāi)發(fā)對(duì)應(yīng)開(kāi)發(fā),生產(chǎn)對(duì)應(yīng)生產(chǎn),注意是當(dāng)前項(xiàng)目的證書(shū),不要選擇其他項(xiàng)目的證書(shū)。
開(kāi)發(fā)環(huán)境和Ad Hoc需要選擇需要測(cè)試的Devices設(shè)備,選中的Devices才具有測(cè)試和安裝能力。全選即可。
然后下載,重命名。描述文件不需要安裝
至此所有準(zhǔn)備的證書(shū)和描述文件都創(chuàng)建完畢。
(1)登錄Xcode開(kāi)發(fā)者賬號(hào),這一步容易忘記,特別是新的蘋果賬號(hào),當(dāng)然也可以到里面選擇證書(shū)再配置
(2) 配置證書(shū)及簽名 首先需要取消Automatically manage signing。否則是XCode自動(dòng)管理證書(shū),會(huì)自動(dòng)創(chuàng)建證書(shū)和bundle id等。這樣會(huì)不利于證書(shū)管理。我這里就采坑了,導(dǎo)致自動(dòng)安裝了其他的證書(shū),導(dǎo)致生產(chǎn)證書(shū) Xcode Signing certificate is invalid when build on ext device 只好到鑰匙串中刪除,剛剛自動(dòng)按鈕的證書(shū),退出Xcode,重新打開(kāi)就可以了。配置profile描述文件,需要為debug和release兩種環(huán)境分別配置描述文件。選擇3.6章節(jié)里創(chuàng)建的對(duì)應(yīng)的描述文件,debug對(duì)應(yīng)development, release對(duì)應(yīng)Distribution。
provisonint Profile 文件選擇,開(kāi)發(fā)對(duì)應(yīng)著開(kāi)發(fā),生產(chǎn)對(duì)應(yīng)著生產(chǎn)。
此處可能會(huì)有個(gè)小坑,與鑰匙串安裝的cer 不對(duì)應(yīng),Buuld Settings 重新選擇一下就可以了
套裝ID 就是申請(qǐng)的indentifiers,選擇
填寫App資料,需要注意幾點(diǎn):
APP圖標(biāo)時(shí),圖標(biāo)中不能包含alpha通道或者透明度;LanchImage的圖片格式只能是png格式,jpg格式Xcode無(wú)法加載成功;填寫聯(lián)系人的時(shí)候,需要加區(qū)號(hào),比如中國(guó) 需要+86;App預(yù)覽與截屏圖片,需要6.5英寸和5.5英寸就行,UI設(shè)計(jì)圖的時(shí)候:5.5英寸 1242?×?2208 ;6.5英寸 1242?×?2688
(1)多臺(tái)Mac運(yùn)行相同iOS項(xiàng)目。
是與生成csr的mac電腦綁定的,其他的Mac 電腦無(wú)法安裝,這樣其他的Mac電腦就無(wú)法真機(jī)測(cè)試打包這個(gè)iOS項(xiàng)目了。但是,我們可以在鑰匙串中導(dǎo)出 p12文件給其他的Mac安裝,安裝后這臺(tái)Mac也具有同樣打包測(cè)試發(fā)布能了。開(kāi)發(fā)需要導(dǎo)入developer證書(shū),發(fā)布需要導(dǎo)出Distribution證書(shū)。選擇對(duì)應(yīng)的證書(shū),導(dǎo)出
最好重新命名方便識(shí)別。 p12文件其實(shí)就加密的 cer證書(shū)??梢詂opy給其他Mac安裝。
第二臺(tái)Mac安裝 p12后,進(jìn)行第四章的XCode配置后即可具有開(kāi)發(fā)、測(cè)試、發(fā)布iOS的能力
(2)多人多臺(tái)Mac開(kāi)發(fā)相同ios項(xiàng)目 如果不方便把開(kāi)發(fā)者賬號(hào)和密碼給其他人用,需要把對(duì)應(yīng)開(kāi)發(fā)人員加入到 開(kāi)發(fā)者成員中。
隨后新用戶會(huì)收到一封邀請(qǐng)郵件,同意后即會(huì)加入開(kāi)發(fā)者計(jì)劃中。新用戶登陸蘋果開(kāi)發(fā)者中心,會(huì)看到自己加入的team
新用戶用剛剛導(dǎo)出 p12文件在Xcode上配置就可以協(xié)同開(kāi)發(fā)ios項(xiàng)目。
(1)打包并上傳IPA包 首先確保證書(shū)正確、profile描述文件正確。
需要注意的是build構(gòu)建號(hào) 每次都是唯一的,version為版本號(hào),多個(gè)版本號(hào)可以屬于同一個(gè)version,
flutter項(xiàng)目也可以直接 改pubspec.yaml文件 version字段 如:1.0.0+1
設(shè)備選擇:
flutter項(xiàng)目需要注意:需要執(zhí)行 flutter build ios -- release -- no - codesign,需要注意的是是在flutter外層目錄路徑下執(zhí)行,而不是ios目錄路徑,(我習(xí)慣在vscode中跑命令)
Product > Archive:
直接Distribute App (如果不放心可以先Validate App)
進(jìn)入Select a method of distribution(打包方式選擇)界面:
App Store:App Store上架包用
Ad hoc:發(fā)布測(cè)試包用,如蒲公英發(fā)布
Enterprise:企業(yè)包用
Development:開(kāi)發(fā)包用
根據(jù)自己的證書(shū)和描述文件選擇,在這里選擇App Store,點(diǎn)擊Next
Select a destination : 選擇是直接上傳還是導(dǎo)出,直接上傳就可以
Select certificate and iOS App Store profile: 之前創(chuàng)建的描述文件
然后等待上傳
上傳成功之后,需要進(jìn)入 App Store Connect, 看到
看到剛剛提交的版本,然后點(diǎn)擊App Store ,如果第一次發(fā)版,直接在 “構(gòu)建版本” 選擇對(duì)應(yīng)的版本文件,如果是已經(jīng)上架成功,需要更新版本
填寫完整的信息,提交審核。
上架之后App Store還搜索不到APP如何下載體驗(yàn)
如果已經(jīng)上架,但是App Store還搜索不到APP,剛剛通過(guò)的需要等24小時(shí),可以去「七麥數(shù)據(jù)」查看