談一談 IPA 上傳到 App Store Connect 的幾種方法

1席爽、前言

關(guān)于上傳 ipa 包到 App Store Connect 的方法稿壁,相信有 iOS 開(kāi)發(fā)經(jīng)驗(yàn)的同學(xué)佑女,一定知道完成 App 開(kāi)發(fā)后卵惦,一般都是用 Xcode 的 Archive 打包后上傳到蘋果后臺(tái)。所以瓦戚,這個(gè)就是今天要寫的水文沮尿?顯示不是吧!答案肯定不是啊较解,本文將給大家一個(gè)相對(duì)全面介紹畜疾。蘋果開(kāi)發(fā)的知識(shí)點(diǎn)非常多,官方文檔也很多印衔,能夠?qū)W好學(xué)完啡捶,不一定人人能夠做到。在我的理解奸焙,iOS進(jìn)階瞎暑,不是說(shuō)你必須掌握很高深的技術(shù),而是了解全面的知識(shí)与帆,能夠做出不一樣的產(chǎn)品了赌、體驗(yàn),這個(gè)才是優(yōu)秀的開(kāi)發(fā)者玄糟!

2勿她、Xcode

利用 Xcode 的 Archive 生成 app 包后,選擇 Distribute App 阵翎,將 App 通過(guò) Xcode 上傳到 App Store Connect 后臺(tái)逢并,這個(gè)就不多說(shuō)的之剧,iOS 開(kāi)發(fā)都需要經(jīng)歷一下。

3砍聊、Application Loader

當(dāng)然背稼,Xcode 這種方式,是需要有源代碼情況下辩恼,才能上傳雇庙。所以,就會(huì)有沒(méi)有源代碼的情況灶伊,怎么上傳的情況啦疆前!

Application Loader 就是這樣一種方式:

Application Loader 是一款 Apple 工具能夠幫助您將 App 的二進(jìn)制文件上傳至 App Store。

Application Loader 上傳速度快聘萨、連接穩(wěn)定并且具備早期驗(yàn)證警告功能竹椒。

登陸界面:

主界面:

其實(shí),如果了解 Xcode 歷史的同學(xué)米辐,會(huì)知道現(xiàn)在的 Application Loader App 的功能已經(jīng)被蘋果弱化了胸完,以前還能夠批量創(chuàng)建提交內(nèi)購(gòu)品項(xiàng)等,現(xiàn)在新版本已經(jīng)去掉了翘贮。另外赊窥,以前在蘋果開(kāi)發(fā)者官網(wǎng),有單獨(dú)的頁(yè)面狸页,可以下載獨(dú)立版本的 Application Loader 軟件锨能,現(xiàn)在也已經(jīng)去掉了。

可能的原因芍耘,在我看來(lái)有幾點(diǎn)址遇。第1點(diǎn)是,單獨(dú)維護(hù)這樣一個(gè)軟件斋竞,需要人力倔约,因?yàn)椋绻灰蕾囉?Xcode坝初,在一臺(tái)電腦只安裝了 Application Loader浸剩,那個(gè)肯定需要安裝 Command Line Tools 這個(gè)命令行工具,如果是安裝 Xcode 默認(rèn)也帶上鳄袍,如果更新了 Xcode 版乒省,也會(huì)跟隨升級(jí),所以畦木,維護(hù) Application Loader 軟件袖扛,不只是單獨(dú)的一個(gè)應(yīng)用入口,當(dāng)然,也是因?yàn)檫@個(gè) Application Loader 做了一些早期驗(yàn)證警告:

上傳 ipa 包時(shí)蛆封,工具會(huì)檢查一些要求和內(nèi)容格式等唇礁,如果不符合,就會(huì)報(bào)錯(cuò)惨篱,所以盏筐,這些初步的檢查報(bào)錯(cuò),也是 Application Loader 需要維護(hù)的砸讳。

第2點(diǎn)琢融,Application Loader 需要的人并不多,站在開(kāi)發(fā)者環(huán)境簿寂,大多數(shù)開(kāi)發(fā)者負(fù)責(zé)上傳 ipa 包漾抬,另外,批量上傳內(nèi)購(gòu)品項(xiàng)常遂,一定很多人不知道纳令,所以,蘋果也去掉了克胳。開(kāi)發(fā)者后臺(tái)也去掉了平绩,所以,Application Loader 現(xiàn)在是集成在 Xcode 中漠另,說(shuō)不定捏雌,那天就直接去掉。

第3點(diǎn)笆搓,越來(lái)越多的聲音性湿,希望蘋果能通過(guò) App Store Connect 后臺(tái)能直接上傳 ipa 包、批量創(chuàng)建內(nèi)購(gòu)品項(xiàng)等功能砚作。但根據(jù)我觀察這幾年的 WWDC,蘋果對(duì) App Store Connect 后臺(tái)進(jìn)行了比較大的改變嘹锁,2022年08月23日就是對(duì) App Store Connect 和 Apple Developer 后臺(tái)葫录,2個(gè)賬號(hào)體系合并,主線上领猾,還是整個(gè)系統(tǒng)性上米同,對(duì)于功能和UI界面上,不知道有沒(méi)有相關(guān)計(jì)劃摔竿。我的猜測(cè)面粮,還是有希望的。因?yàn)榻陙?lái)继低,跨平臺(tái)開(kāi)發(fā)熬苍, React Native/ Weex / Flutter,其實(shí),可以不需要依賴 Xcode柴底、macOS 進(jìn)行開(kāi)發(fā)婿脸,打包上傳 ipa 卻需要一臺(tái) macOS 和 Xcode,有一點(diǎn)不可理解柄驻?(當(dāng)然狐树,也不排除蘋果希望大家因此,能多賣出幾臺(tái) Mac 電腦鸿脓,也許我的猜測(cè)是錯(cuò)的吧抑钟,但愿~)

具體關(guān)于 Application Loader 使用方法,大家可以看看官方使用文檔野哭,已經(jīng)非常詳細(xì)在塔,而且這幾年,蘋果很多文檔都已經(jīng)有翻譯中文版本啦虐拓!Application Loader 介紹(中文):https://help.apple.com/itc/apploader/

4心俗、altool

您可以使用 Application Loader 的命令行工具 altool,驗(yàn)證 App 二進(jìn)制文件并將其上傳至 App Store蓉驹。

所以城榛,Application Loader 應(yīng)用界面下,也是基于 altool 命令來(lái)處理 ipa 文件态兴。明白了這點(diǎn)狠持,對(duì)于命令行就沒(méi)有什么問(wèn)題啦。

若要在上傳之前驗(yàn)證構(gòu)建版本或?qū)⒂行?gòu)建版本自動(dòng)上傳至 App Store瞻润,您可在您的持續(xù)集成系統(tǒng)中包含 altool喘垂。altool 位于以下文件夾中: Application Loader.app/Contents/Frameworks/ITunesSoftwareService.framework/Versions/A/Support/

對(duì)于這點(diǎn),如果有做過(guò)自動(dòng)化打包绍撞、上傳發(fā)布或 shell 腳本命令的同學(xué)正勒,應(yīng)該就知道,我們很多時(shí)候傻铣,希望自動(dòng)上傳章贞,而不是人工操作UI,一步一傻瓜的操作非洲,這不是程序員的工作方式鸭限!所以,用命令行的目的就在這里两踏。需要說(shuō)明一下败京,剛才也提到 Application Loader 是有早期驗(yàn)證警告功能,也就是說(shuō)梦染,可以檢查這個(gè) ipa 包的內(nèi)容或格式赡麦,是不是符合蘋果的規(guī)定和要求。

所以,若要運(yùn)行 altool隧甚,請(qǐng)?jiān)诿钚兄付ㄒ韵乱豁?xiàng)操作车荔,可以是檢查(--validate-app),或者上傳(--upload-app)操作:

altool --validate-app -f file -u username [-p password] [--output-format xml] altool --upload-app -f file -u username [-p password] [--output-format xml]

您想讓 Application Loader 以結(jié)構(gòu)化的 XML 格式還是非結(jié)構(gòu)化的文本格式返回輸出信息戚扳。默認(rèn)情況下忧便,Application Loader 以文本格式返回輸出信息。
5帽借、Transporter

也許珠增,對(duì)于一般的開(kāi)發(fā)者來(lái)說(shuō),altool 已經(jīng)能滿足基本的上傳 ipa 文件的需求砍艾。但是蒂教,正好前面說(shuō)的,如果你需要進(jìn)行批量創(chuàng)建內(nèi)購(gòu)品項(xiàng)脆荷,還有其它操作凝垛,可能大多數(shù)開(kāi)發(fā)者不知道,蘋果除了 iOS蜓谋,還有非常多的服務(wù)梦皮, iTunes Connect 帳戶(圖書發(fā)行商或音樂(lè)提供商)、 iTunes Store桃焕、Apple Books剑肯,盡管我們中國(guó)地區(qū)有些服務(wù)或者非常少用。

所以观堂,蘋果提供 Transporter 來(lái)處理大量和差異化數(shù)據(jù)的操作的工具(可以在 macOS让网、Windows 和 Linux 操作系統(tǒng)上安裝和運(yùn)行 Transporter。):

Transporter 是 Apple 基于 Java 的命令行工具师痕,用于進(jìn)行大量目錄交付溃睹。您可以使用 Transporter 將預(yù)生成的內(nèi)容以 Store 數(shù)據(jù)包的形式交付至 iTunes Store、Apple Books 和 App Store胰坟。

不論您使用 iTunes Connect 帳戶(圖書發(fā)行商或音樂(lè)提供商)因篇、App Store Connect 帳戶(App 開(kāi)發(fā)者)或是編碼工作室?guī)魜?lái)交付圖書、視頻腕铸、音樂(lè)或 App 內(nèi)容惜犀,您都可以使用 Transporter 以確保您的元數(shù)據(jù)和素材(例如音頻铛碑、視頻狠裹、圖書和 App 文件)適當(dāng)?shù)亟桓吨?iTunes Store、Apple Books 或 App Store汽烦,并根據(jù) Apple 的規(guī)范驗(yàn)證 Store 數(shù)據(jù)包涛菠。

這里,只會(huì)介紹用 Transporter 命令來(lái)上傳 ipa 文件,更多的功能和說(shuō)明俗冻,大家可以查看官方文檔(中文):https://help.apple.com/itc/transporteruserguide/

注意: 下面命令中的 iTMSTransporter 是一個(gè)變量名礁叔,【重要事項(xiàng)】 作為一名 App 開(kāi)發(fā)者,您可以在已安裝 Xcode 或 Application Loader 的情況下使用 Transporter迄薄,或者您也可以手動(dòng)下載 Transporter琅关。有關(guān)如何為 App 開(kāi)發(fā)者安裝 Transporter 的信息,請(qǐng)參見(jiàn) App 開(kāi)發(fā)者的安裝說(shuō)明讥蔽。

因?yàn)槲覀兡J(rèn)都安裝了 Xcode涣易,所以 Transporter 命令,我們引用 Xcode 中的 Application Loader 里的 iTMSTransporter, 在

.bash_profile 添加了一個(gè)別名冶伞,這樣可以在任何目錄路徑調(diào)用 iTMSTransporter 命令:

alias iTMSTransporter='xcode-select --print-path/../Applications/Application

Loader.app/Contents/MacOS/itms/bin/iTMSTransporter'

注:

1新症、其中 xcode-select --print-path: print the path of the active developer directory(打印當(dāng)前使用的Xcode版本軟件的開(kāi)發(fā)人員

目錄的路徑),然后在當(dāng)前使用的 Xcode 版本對(duì)應(yīng)的 Application Loader 下的 iTMSTransporter响禽。

2徒爹、當(dāng)然,也可能通過(guò)設(shè)置全局環(huán)境變量來(lái)直接使用命令芋类,添加 TRANSPORTER_HOME 環(huán)境變量隆嗅。要添加

TRANSPORTER_HOME 環(huán)境變量,請(qǐng)?jiān)谀?.bash_profile 中添加以下行:export TRANSPORTER_HOME=梗肝。例如榛瓮,如果您安

裝了 Xcode,則該行應(yīng)如下所示:

export TRANSPORTER_HOME=xcode-select --print-path/../Applications/Application Loader.app/Contents/MacOS/itms/bin

其中巫击,我們除了剛才說(shuō)的檢查和上傳模式外禀晓,可能會(huì)用于這個(gè)命令的幾種模式,

Lookup Metadata 模式

檢索您之前上傳的某個(gè) App 當(dāng)前的元數(shù)據(jù)坝锰。如果您之前上傳的是 .itmsp 數(shù)據(jù)包且 Apple 在您初次上傳后修改了元數(shù)據(jù)粹懒,您需要先檢索修改后的元數(shù)據(jù),再重新發(fā)送元數(shù)據(jù)更新的數(shù)據(jù)包顷级。

iTMSTransporter -m lookupMetadata -u [user] -p [password] -apple_id(-apple_ids) -destination [output_path]

Provider 模式

確定您有權(quán)限為哪些帳戶交付內(nèi)容凫乖。

iTMSTransporter -m provider -u [user] -p [password]

Verify 模式

驗(yàn)證您的 .itmsp 數(shù)據(jù)包,并在交付前確保元數(shù)據(jù)和素材符合技術(shù)要求弓颈,以保證上傳數(shù)據(jù)包前解決任何潛在的問(wèn)題帽芽。

iTMSTransporter -m verify -u [user] -p [password] -f [itmsp_path] [-vp <text | json>]

Upload 模式

檢查您的素材和 .itmsp 數(shù)據(jù)包,驗(yàn)證它們是否準(zhǔn)備就緒以供交付翔冀,然后向 App Store 上傳內(nèi)容和元數(shù)據(jù)导街。

iTMSTransporter -m upload -u [user] -p [password] -f [itmsp_path]

關(guān)于這些模式的參數(shù),蘋果文檔有非常詳細(xì)的說(shuō)明纤子,雖然需要花一點(diǎn)的腦子去理解(文檔真的很~)搬瑰,好了款票。下面簡(jiǎn)單說(shuō)明一下,上傳命令怎么使用吧

上傳 ipa 示例:

iTMSTransporter -m upload -u xxx@xxx.com -p xxx -f /Users/HTC/Desktop/Upload.itmsp

xxx@xxx.com :App Store Connect 賬號(hào) xxx :App Store Connect 賬號(hào)的密碼 /Users/HTC/Desktop/Upload.itmsp :這個(gè)一個(gè)目錄泽论,Upload.itmsp 是一個(gè)文件夾名字艾少,不是文件,里面包含2個(gè)文件翼悴,一個(gè)就是要上傳的 ipa 文件缚够,另一個(gè)是一個(gè) xml ,描述這個(gè) ipa 文件的信息鹦赎。

ipa_metadata.xml:

<?xml version="1.0" encoding="UTF-8"?><package version="software5.10" xmlns="http://apple.com/itunes/importer"> <software_assets apple_id="{apple_id}" app_platform="{app_platform}"> <asset type="{archive_type}"> <data_file> <size>{file_size}</size> <file_name>{file_name}</file_name> <checksum type="md5">{file_md5}</checksum> </data_file> </asset> </software_assets></package>

需要修改 xml 中的一些參數(shù):

{apple_id} :這個(gè) ipa 文件對(duì)應(yīng)的app的 apple id {app_platform} : app的平臺(tái)潮瓶,填寫ios {archive_type} :歸檔類型,填寫bundle {file_size} :ipa 文件的大小 {file_name} :ipa 文件的名字 {file_md5}: ipa 文件的md5值
總結(jié)

最后,這就是幾種上傳ipa包的方法,當(dāng)然菇篡,如果經(jīng)驗(yàn)豐富的開(kāi)發(fā)者,可能使用過(guò) fastlane 思恐、shenzhen 這樣的自動(dòng)化工具命令,也是可以上傳 ipa 文件膊毁,如果你研究過(guò)它們的源代碼胀莹,你就會(huì)發(fā)現(xiàn),他們使用的命令就是 iTMSTransporter婚温,這也正是描焰,我想寫這篇文章的原因。現(xiàn)在大家在開(kāi)發(fā)過(guò)程中栅螟,一直想提升自己荆秦,想進(jìn)階,想成為高手力图,然而找不到途徑步绸?我希望,大家不要忽視開(kāi)發(fā)過(guò)程的每一個(gè)重要的環(huán)節(jié)吃媒,這就是進(jìn)階的途徑瓤介!愿大家都能感悟達(dá)到~

最后的最后,想說(shuō)一下最近不怎么更新博客的原因赘那?除了比較忙外(什么時(shí)候閑P躺!),寫好一篇文章募舟,需要去考查相關(guān)的資料和知識(shí)祠斧,對(duì)每一行文字,都要精斟細(xì)酌胃珍,因?yàn)楫?dāng)我看到博客的訪問(wèn)量越來(lái)越多人時(shí)梁肿,為了不誤導(dǎo)大家,所以需要承擔(dān)的責(zé)任感覺(jué)也大了觅彰。這也是寫文章的好處吧吩蔑,除了整理思維,體系構(gòu)建填抬,表達(dá)自己烛芬,還有分享,責(zé)任飒责,擔(dān)當(dāng)中國(guó)IT技術(shù)傳承的一份子赘娄,安樂(lè)~

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市宏蛉,隨后出現(xiàn)的幾起案子遣臼,更是在濱河造成了極大的恐慌,老刑警劉巖拾并,帶你破解...
    沈念sama閱讀 218,682評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件揍堰,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡嗅义,警方通過(guò)查閱死者的電腦和手機(jī)屏歹,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,277評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)之碗,“玉大人蝙眶,你說(shuō)我怎么就攤上這事⊥誓牵” “怎么了幽纷?”我有些...
    開(kāi)封第一講書人閱讀 165,083評(píng)論 0 355
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)博敬。 經(jīng)常有香客問(wèn)我霹崎,道長(zhǎng),這世上最難降的妖魔是什么冶忱? 我笑而不...
    開(kāi)封第一講書人閱讀 58,763評(píng)論 1 295
  • 正文 為了忘掉前任尾菇,我火速辦了婚禮,結(jié)果婚禮上囚枪,老公的妹妹穿的比我還像新娘派诬。我一直安慰自己,他們只是感情好链沼,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,785評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布默赂。 她就那樣靜靜地躺著,像睡著了一般括勺。 火紅的嫁衣襯著肌膚如雪缆八。 梳的紋絲不亂的頭發(fā)上曲掰,一...
    開(kāi)封第一講書人閱讀 51,624評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音奈辰,去河邊找鬼栏妖。 笑死,一個(gè)胖子當(dāng)著我的面吹牛奖恰,可吹牛的內(nèi)容都是我干的吊趾。 我是一名探鬼主播,決...
    沈念sama閱讀 40,358評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼瑟啃,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼论泛!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起蛹屿,我...
    開(kāi)封第一講書人閱讀 39,261評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤屁奏,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后错负,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體了袁,經(jīng)...
    沈念sama閱讀 45,722評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,900評(píng)論 3 336
  • 正文 我和宋清朗相戀三年湿颅,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了载绿。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,030評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡油航,死狀恐怖崭庸,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情谊囚,我是刑警寧澤怕享,帶...
    沈念sama閱讀 35,737評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站镰踏,受9級(jí)特大地震影響函筋,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜奠伪,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,360評(píng)論 3 330
  • 文/蒙蒙 一跌帐、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧绊率,春花似錦谨敛、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 31,941評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至藐俺,卻和暖如春炊甲,著一層夾襖步出監(jiān)牢的瞬間泥彤,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 33,057評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工卿啡, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留吟吝,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,237評(píng)論 3 371
  • 正文 我出身青樓牵囤,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親滞伟。 傳聞我的和親對(duì)象是個(gè)殘疾皇子揭鳞,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,976評(píng)論 2 355

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