iOS App研發(fā)的最后沖刺:內(nèi)測(cè)與部署

當(dāng)開(kāi)發(fā)者歷經(jīng)磨難、披荊斬棘,完成了一個(gè)iOS項(xiàng)目后,最后的臨門(mén)一腳就是應(yīng)用的內(nèi)測(cè)、部署。那么,在這最后的射門(mén)動(dòng)作中,都有哪些地方需要開(kāi)發(fā)者注意?有哪些方式能夠更好地幫助我們進(jìn)行iOS應(yīng)用的發(fā)布部署?

本文針對(duì)iOS App開(kāi)發(fā)的最后階段來(lái)詳解如何在真機(jī)上進(jìn)行調(diào)試,將App發(fā)送給其他測(cè)試人員進(jìn)行內(nèi)測(cè),以及內(nèi)測(cè)完成后如何將App上傳至App Store進(jìn)行應(yīng)用審核,針對(duì)蘋(píng)果賬號(hào)的類(lèi)型、真機(jī)調(diào)試、打包與崩潰收集進(jìn)行深度剖析。

蘋(píng)果賬號(hào)的類(lèi)型

蘋(píng)果開(kāi)發(fā)者計(jì)劃分為個(gè)人、公司、企業(yè)和教育開(kāi)發(fā)者四個(gè)類(lèi)型。個(gè)人開(kāi)發(fā)者證書(shū)費(fèi)用為$99一年,該賬號(hào)在A(yíng)pp Store銷(xiāo)售者只能顯示個(gè)人的ID。并且,個(gè)人賬號(hào)只能有一個(gè)開(kāi)發(fā)者,100個(gè)蘋(píng)果的iOS設(shè)備UDID測(cè)試。

1.png
1.png

公司開(kāi)發(fā)者費(fèi)用為$99一年,該賬號(hào)在A(yíng)pp Store銷(xiāo)售者可以顯示類(lèi)似Studios,或者自定義的團(tuán)隊(duì)名稱(chēng)。公司賬號(hào)可以允許多個(gè)開(kāi)發(fā)者協(xié)作開(kāi)發(fā),比個(gè)人多一些帳號(hào)管理的設(shè)置,可以設(shè)置多個(gè)Apple ID,分4種管理級(jí)別權(quán)限,100個(gè)蘋(píng)果的iOS設(shè)備UDID測(cè)試。但是,申請(qǐng)時(shí)需要填寫(xiě)公司的鄧白氏編碼(D-U-N-S),D-U-N-S鄧白氏碼可以在 蘋(píng)果官方網(wǎng)站免費(fèi)申請(qǐng)。

企業(yè)開(kāi)發(fā)者賬號(hào)費(fèi)用為$299一年, 該賬號(hào)開(kāi)發(fā)應(yīng)用不能發(fā)布到App Store,只能企業(yè)內(nèi)部應(yīng)用,蘋(píng)果的iOS設(shè)備UDID數(shù)量不限制。企業(yè)賬號(hào)適合不希望上線(xiàn)App Store,但是需要企業(yè)內(nèi)部,比如1000人的iOS設(shè)備都部署。

2.png
2.png

特別需要注意的是,其他渠道提供的所謂的企業(yè)證書(shū)實(shí)際上是與他人共用一張企業(yè)證書(shū),蘋(píng)果會(huì)偵測(cè)到這種情況,并進(jìn)行封號(hào)處理。封號(hào)后,包括已經(jīng)使用該證書(shū)安裝了的App都會(huì)無(wú)法繼續(xù)使用。

這些開(kāi)發(fā)者賬號(hào)的申請(qǐng)都需要一個(gè)重要的條件,那就是有一張支持Visa或MasterCard的信用卡。

真機(jī)調(diào)試

使用真機(jī)調(diào)試,必須要使用開(kāi)發(fā)者證書(shū),以及正確填寫(xiě)App ID,配置好Provision Profile,具體流程如下:

  1. 安裝調(diào)試證書(shū)
  2. 填寫(xiě) App ID
  3. 根據(jù) App ID 填寫(xiě) provision profile ,并下載安裝到 Xcode
  4. 真機(jī)調(diào)試運(yùn)行

怎樣申請(qǐng)開(kāi)發(fā)者證書(shū)?

需要下列幾步:
1.請(qǐng)求CSR文件

  • 打開(kāi)鑰匙串訪(fǎng)問(wèn), 從證書(shū)頒發(fā)機(jī)構(gòu)請(qǐng)求證書(shū)
3.png
3.png

4.png
4.png
  • 填寫(xiě)電子郵件地址,常用名稱(chēng),勾選存儲(chǔ)到磁盤(pán),最后保存CSR文件到指定位置


    5.png
    5.png
  • 最后保存CSR文件到指定位置


    6.png
    6.png

2.創(chuàng)建調(diào)試證書(shū)

  • 選擇CSR文件


    7.png
    7.png
  • 點(diǎn)擊Download下載,雙擊安裝到鑰匙串匙串


    8.png
    8.png
  1. 雙擊安裝

可以看到鑰匙串中有了我們剛安裝的證書(shū),左側(cè)有個(gè)三角,點(diǎn)擊展開(kāi)可以看到證書(shū)私鑰,如果沒(méi)有私鑰,則證書(shū)是不可用的,一般這種情況是你在開(kāi)發(fā)者網(wǎng)站上下載了其他Mac上制作的證書(shū),可以從這臺(tái)Mac導(dǎo)出證書(shū)安裝到自己的電腦上。

9.png
9.png

創(chuàng)建AppID

1. 填寫(xiě)AppID Name

10.png
10.png

2. 支持推送、Game Center等功能的話(huà)不能創(chuàng)建含有通配符的AppID,所以這里我們選擇Explicit App ID*
11.png
11.png

3. 勾選需要的服務(wù),然后Continue
12.png
12.png

添加設(shè)備

1. 填寫(xiě)設(shè)備名稱(chēng)、設(shè)備UDID

13.png
13.png

2. Register
14.png
14.png

注意:最多添加100臺(tái)設(shè)備

創(chuàng)建Provisioning Profile

15.png
15.png

16.png
16.png
  • iOS App Development:真機(jī)調(diào)試Profile(需要選擇iOS設(shè)備,只有包含的設(shè)備可以真機(jī)調(diào)試)
  • App Store:上傳到AppStore商店P(guān)rofile
  • In House:企業(yè)內(nèi)發(fā)布Profile(所有設(shè)備可以安裝)
  • Ad Hoc:Ad Hoc Profile(需要選擇iOS設(shè)備,除了只有包含的設(shè)備可以安裝外與AppStore、Inhouse版本基本沒(méi)有區(qū)別)

1. 選擇AppID

17.png
17.png

2. 選擇證書(shū)
18.png
18.png

3. 選擇設(shè)備(只有Development、AdHoc需要選擇設(shè)備)
19.png
19.png

4. 填寫(xiě)Profile Name
20.png
20.png

5. 點(diǎn)擊Download下載,雙擊安裝到Xcode

XCode打包

Configurations

默認(rèn)Configurations包含兩個(gè)配置,Debug、Release,可以看到Build Setting里好多配置都區(qū)分了Debug、Release,可以根據(jù)不同的情況配置不同的選項(xiàng),最常用的就是根據(jù)真機(jī)調(diào)試、打包發(fā)布,分別在Debug、Release選擇合適的證書(shū)、Profile。

21.png
21.png

個(gè)人認(rèn)為,現(xiàn)在的Xcode不用再Duplicate Release配置來(lái)建立專(zhuān)門(mén)打包AppStore或者Adhoc或其它的Configuration,因?yàn)楦杏X(jué)并不會(huì)方便多少,只是省去了選擇證書(shū),但是你還是設(shè)置Archive選項(xiàng)。
22.png
22.png

一般來(lái)說(shuō),Adhoc、AppStore\Inhouse,二者用的都是同一個(gè)證書(shū),只是Profile不同而已,簡(jiǎn)單的選擇一下Profile,是不是更省事一些呢。

指令集

先說(shuō)一下iOS設(shè)備的指令集:

  • arm64:

iPhone 5s, iPhone 6, iPhone6 Plus;
iPad Air, iPad Air 2;
iPad Mini 2, iPad Mini 3;

  • armv7s:

iPhone 5, iPhone 5c;
iPad 4;

  • armv7:

iPhone 3GS, iPhone 4, iPhone 4S;
iPad, iPad 2, iPad 3, iPad Mini;

  • armv6:

iPhone, iPhone 3G;

23.png
23.png
  • Architectures
    該編譯選項(xiàng)指定了工程支持哪些指令集,如果支持的指令集數(shù)目有多個(gè),就會(huì)編譯出包含多個(gè)指令集二進(jìn)制包,造成最終編譯的包很大。

  • Valid Architectures
    該編譯項(xiàng)指定可能支持的指令集,該列表和Architectures列表的交集,將是Xcode最終生成二進(jìn)制包所支持的指令集。

如上圖所示,Architectures 支持的指令集為 armv7、arm64、Valid Architectures 支持的指令集為armv7、armv7s、arm64,這時(shí)只會(huì)生成一個(gè) armv7、arm64 指令集的二進(jìn)制包。

  • Build Active Architecture Only
    該編譯項(xiàng)用于設(shè)置是否只編譯當(dāng)前使用的設(shè)備對(duì)應(yīng)的arm指令集。通常情況下,該編譯選項(xiàng)在Debug模式都設(shè)成YES,Release模式都設(shè)成NO。該選項(xiàng)起作用的條件有兩個(gè),必須同時(shí)滿(mǎn)足才會(huì)起作用:

注意:許多用戶(hù)可能會(huì)發(fā)現(xiàn)自己的應(yīng)用安裝不了,這時(shí)候可以看看自己的App支持的指令集,遇到過(guò)幾個(gè)用戶(hù)的指令集只支持arm64,這樣的App在設(shè)備不是arm64的情況下是安裝不了的。

Code Signing

24.png
24.png

上圖中Code Signing Identity包含的Debug和Release兩項(xiàng),其中,Debug指選擇真機(jī)調(diào)試證書(shū),Release指選擇發(fā)布證書(shū)(AdHoc、AppStore/Inhouse打包都使用發(fā)布證書(shū))。而在 Provisioning Profile中,無(wú)論真機(jī)調(diào)試,還是發(fā)布App,選擇的Profile的App ID要與項(xiàng)目工程的BundleId匹配。

注意:Provisioning Profile的Release這里選擇的Profile,并不一定就是簽名ipa用的Profile,后面會(huì)講到。

導(dǎo)出ipa

導(dǎo)出ipa首先需要選擇ipa版本,導(dǎo)出App Store/AdHoc/企業(yè)版ipa,然后點(diǎn)擊Next。如果Xcode 沒(méi)有登錄企業(yè)開(kāi)發(fā)者賬號(hào),選擇導(dǎo)出企業(yè)版ipa的時(shí)候會(huì)提示添加企業(yè)開(kāi)發(fā)者賬號(hào)到xcode。

選擇證書(shū)

25.png
25.png

這里就是上面說(shuō)的在工程選擇的證書(shū)、profile可能并不是簽名用的,關(guān)鍵在這里,這里會(huì)顯示已經(jīng)添加到Xcode的開(kāi)發(fā)者賬號(hào)對(duì)應(yīng)的證書(shū)列表,可以選擇簽名用的證書(shū)。如果跟工程設(shè)置的證書(shū)一致,并且Profile匹配,則會(huì)根據(jù)工程配置的證書(shū)、Profile來(lái)簽名導(dǎo)出。如果跟工程配置的證書(shū)不一致,則會(huì)根據(jù)選擇的證書(shū)自動(dòng)查找匹配的Profile來(lái)簽名導(dǎo)出ipa。
26.png
26.png

這里會(huì)顯示導(dǎo)出的ipa用的是哪一個(gè)證書(shū)、Profile簽名的,Profile旁邊那個(gè)箭頭并不是選擇Profile,然后在Finder中顯示當(dāng)前Profile。 所以導(dǎo)出的最后一步,盡量確認(rèn)一下簽名的證書(shū)、Profile是不是自己指定的。

內(nèi)測(cè)分發(fā)ipa文件

內(nèi)測(cè)分發(fā)ipa文件給測(cè)試人員主要有3種方法:

  1. 使用iTunes將iPa同步到手機(jī)中;
  2. 使用itms-services協(xié)議進(jìn)行下載分發(fā);
  3. 使用第三方工具進(jìn)行下載分發(fā)。

請(qǐng)注意,無(wú)論使用何種形式分發(fā),內(nèi)測(cè)的人數(shù)限制,以及App的UDID限制始終是存在的。如果想新增加測(cè)試人員,開(kāi)發(fā)者仍然需要將UDID寫(xiě)入Provision Profile,重新生成ipa文件進(jìn)行分發(fā)。

使用iTunes進(jìn)行內(nèi)測(cè)分發(fā)

使用iTunes進(jìn)行分發(fā)比較麻煩,需要測(cè)試用戶(hù)使用數(shù)據(jù)線(xiàn)連接裝有iTunes的電腦上,先將ipa文件添加到iTunes,再將iTunes的App同步到手機(jī)上。由于國(guó)內(nèi)用戶(hù)對(duì)iTunes熟悉程度不高,故不推薦大家使用這種方式進(jìn)行內(nèi)測(cè)分發(fā)。

使用itms-services協(xié)議進(jìn)行下載分發(fā)

相比iTunes的分發(fā)方式,使用itms-service 分發(fā)的最大好處是測(cè)試用戶(hù)無(wú)需使用數(shù)據(jù)線(xiàn),只需打開(kāi)Safari中訪(fǎng)問(wèn)包含itms-service連接的頁(yè)面,單擊連接后即可下載IPA文件。

itms-services的原理是itms-services指向一個(gè)plist文件,這個(gè)plist文件包含了ipa文件下載的地址,iOS設(shè)備的Safari會(huì)自動(dòng)將plist中指定的ipa文件下載安裝到本地。

itms-services的麻煩之處就是開(kāi)發(fā)者需要自己搭建一個(gè)服務(wù)器,之后蘋(píng)果在iOS 7.1 以后安裝ipa,寫(xiě)入ipa地址的plist文件的存放地址必須是一個(gè)https的地址.

itms的結(jié)構(gòu)參考如下

<a href="itms-services://?action=download-manifest&url=https://xxx/test.plist">安裝IOS BetaV1.0 </a>

plist 的結(jié)構(gòu)參考如下

<?xml version="1.0" encoding="UTF-8"?>
<plist version="1.0"><dict>
  <key>items</key>
  <array>
    <dict>
      <key>assets</key>
      <array>
        <dict>
          <key>kind</key>
          <string>software-package</string>
          <key>url</key>
          <string><![CDATA[http://fir.im/xxxxxx]]></string>
        </dict>
        <dict>
          <key>kind</key>
          <string>display-image</string>
          <key>needs-shine</key>
          <integer>0</integer>
          <key>url</key>
          <string><![CDATA[http://fir.im/xxx]]></string>
        </dict>
        <dict>
          <key>kind</key>
          <string>full-size-image</string>
          <key>needs-shine</key>
          <true/>
          <key>url</key>
          <string><![CDATA[http://fir.im/xxx]]></string>
        </dict>
      </array>
      <key>metadata</key>
      <dict>
        <key>bundle-identifier</key>
        <string>im.fir</string>
        <key>bundle-version</key>
        <string><![CDATA[1.3.0]]></string>
        <key>kind</key>
        <string>software</string>
        <key>title</key>
        <string><![CDATA[Fir plist Demo]]></string>
      </dict>
    </dict>
  </array>
</dict></plist>

我們可以看到,雖然說(shuō)用戶(hù)比較方便,但對(duì)開(kāi)發(fā)者而言需要寫(xiě)很多東西,還得搭建服務(wù)器,上OpenSSL等,比較麻煩。

使用第三方工具進(jìn)行內(nèi)測(cè)分發(fā)

為了避免開(kāi)發(fā)者使用itms-services而帶來(lái)的額外工作量,可以使用第三方工具如 fir.im ,將ipa快速地進(jìn)行內(nèi)測(cè)分發(fā)。


本文整理自:【CSDN技術(shù)公開(kāi)課】iOSApp研發(fā)的最后沖刺:內(nèi)測(cè)與部署,作者紀(jì)承,演講PPT>>下載地址。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀(guān)點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容