當開發(fā)者歷經(jīng)磨難瓢宦、披荊斬棘,完成了一個iOS項目后灰羽,最后的臨門一腳就是應用的內測驮履、部署。那么廉嚼,在這最后的射門動作中玫镐,都有哪些地方需要開發(fā)者注意?有哪些方式能夠更好地幫助我們進行iOS應用的發(fā)布部署怠噪?
本文針對iOS App開發(fā)的最后階段來詳解如何在真機上進行調試恐似,將App發(fā)送給其他測試人員進行內測,以及內測完成后如何將App上傳至App Store進行應用審核傍念,針對蘋果賬號的類型矫夷、真機調試、打包與崩潰收集進行深度剖析捂寿。
蘋果賬號的類型
蘋果開發(fā)者計劃分為個人口四、公司、企業(yè)和教育開發(fā)者四個類型秦陋。個人開發(fā)者證書費用為$99一年蔓彩,該賬號在App Store銷售者只能顯示個人的ID。并且驳概,個人賬號只能有一個開發(fā)者赤嚼,100個蘋果的iOS設備UDID測試。
公司開發(fā)者費用為$99一年顺又,該賬號在App Store銷售者可以顯示類似Studios更卒,或者自定義的團隊名稱。公司賬號可以允許多個開發(fā)者協(xié)作開發(fā)稚照,比個人多一些帳號管理的設置蹂空,可以設置多個Apple ID俯萌,分4種管理級別權限,100個蘋果的iOS設備UDID測試上枕。但是咐熙,申請時需要填寫公司的鄧白氏編碼(D-U-N-S),D-U-N-S鄧白氏碼可以在 蘋果官方網(wǎng)站免費申請辨萍。
企業(yè)開發(fā)者賬號費用為$299一年, 該賬號開發(fā)應用不能發(fā)布到App Store棋恼,只能企業(yè)內部應用,蘋果的iOS設備UDID數(shù)量不限制锈玉。企業(yè)賬號適合不希望上線App Store爪飘,但是需要企業(yè)內部,比如1000人的iOS設備都部署拉背。
特別需要注意的是师崎,其他渠道提供的所謂的企業(yè)證書實際上是與他人共用一張企業(yè)證書,蘋果會偵測到這種情況去团,并進行封號處理抡诞。封號后,包括已經(jīng)使用該證書安裝了的App都會無法繼續(xù)使用土陪。
這些開發(fā)者賬號的申請都需要一個重要的條件昼汗,那就是有一張支持Visa或MasterCard的信用卡。
真機調試
使用真機調試鬼雀,必須要使用開發(fā)者證書顷窒,以及正確填寫App ID,配置好Provision Profile源哩,具體流程如下:
- 安裝調試證書
- 填寫 App ID
- 根據(jù) App ID 填寫 provision profile 鞋吉,并下載安裝到 Xcode
- 真機調試運行
怎樣申請開發(fā)者證書?
需要下列幾步:
1.請求CSR文件
- 打開鑰匙串訪問励烦, 從證書頒發(fā)機構請求證書
-
填寫電子郵件地址谓着,常用名稱,勾選存儲到磁盤坛掠,最后保存CSR文件到指定位置
-
最后保存CSR文件到指定位置
2.創(chuàng)建調試證書
-
選擇CSR文件
-
點擊Download下載赊锚,雙擊安裝到鑰匙串匙串
- 雙擊安裝
可以看到鑰匙串中有了我們剛安裝的證書,左側有個三角屉栓,點擊展開可以看到證書私鑰舷蒲,如果沒有私鑰,則證書是不可用的友多,一般這種情況是你在開發(fā)者網(wǎng)站上下載了其他Mac上制作的證書牲平,可以從這臺Mac導出證書安裝到自己的電腦上。
創(chuàng)建AppID
1. 填寫AppID Name
2. 支持推送域滥、Game Center等功能的話不能創(chuàng)建含有通配符的AppID纵柿,所以這里我們選擇Explicit App ID*
3. 勾選需要的服務蜈抓,然后Continue
添加設備
1. 填寫設備名稱、設備UDID
2. Register
注意:最多添加100臺設備
創(chuàng)建Provisioning Profile
- iOS App Development:真機調試Profile(需要選擇iOS設備藐窄,只有包含的設備可以真機調試)
- App Store:上傳到AppStore商店Profile
- In House:企業(yè)內發(fā)布Profile(所有設備可以安裝)
- Ad Hoc:Ad Hoc Profile(需要選擇iOS設備资昧,除了只有包含的設備可以安裝外與AppStore酬土、Inhouse版本基本沒有區(qū)別)
1. 選擇AppID
2. 選擇證書
3. 選擇設備(只有Development荆忍、AdHoc需要選擇設備)
4. 填寫Profile Name
5. 點擊Download下載,雙擊安裝到Xcode
XCode打包
Configurations
默認Configurations包含兩個配置撤缴,Debug刹枉、Release,可以看到Build Setting里好多配置都區(qū)分了Debug屈呕、Release微宝,可以根據(jù)不同的情況配置不同的選項,最常用的就是根據(jù)真機調試虎眨、打包發(fā)布蟋软,分別在Debug、Release選擇合適的證書嗽桩、Profile岳守。
個人認為,現(xiàn)在的Xcode不用再Duplicate Release配置來建立專門打包AppStore或者Adhoc或其它的Configuration碌冶,因為感覺并不會方便多少湿痢,只是省去了選擇證書,但是你還是設置Archive選項扑庞。
一般來說譬重,Adhoc、AppStore\Inhouse罐氨,二者用的都是同一個證書臀规,只是Profile不同而已,簡單的選擇一下Profile栅隐,是不是更省事一些呢塔嬉。
指令集
先說一下iOS設備的指令集:
- 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;
Architectures
該編譯選項指定了工程支持哪些指令集,如果支持的指令集數(shù)目有多個约啊,就會編譯出包含多個指令集二進制包邑遏,造成最終編譯的包很大恰矩。Valid Architectures
該編譯項指定可能支持的指令集,該列表和Architectures列表的交集外傅,將是Xcode最終生成二進制包所支持的指令集俩檬。
如上圖所示,Architectures 支持的指令集為 armv7碾盟、arm64、Valid Architectures 支持的指令集為armv7冰肴、armv7s、arm64熙尉,這時只會生成一個 armv7联逻、arm64 指令集的二進制包。
-
Build Active Architecture Only
該編譯項用于設置是否只編譯當前使用的設備對應的arm指令集检痰。通常情況下,該編譯選項在Debug模式都設成YES铅歼,Release模式都設成NO。該選項起作用的條件有兩個厦幅,必須同時滿足才會起作用:
注意:許多用戶可能會發(fā)現(xiàn)自己的應用安裝不了俭识,這時候可以看看自己的App支持的指令集,遇到過幾個用戶的指令集只支持arm64套媚,這樣的App在設備不是arm64的情況下是安裝不了的。
Code Signing
上圖中Code Signing Identity包含的Debug和Release兩項玫芦,其中本辐,Debug指選擇真機調試證書,Release指選擇發(fā)布證書(AdHoc慎皱、AppStore/Inhouse打包都使用發(fā)布證書)。而在 Provisioning Profile中祈匙,無論真機調試,還是發(fā)布App夺欲,選擇的Profile的App ID要與項目工程的BundleId匹配。
注意:Provisioning Profile的Release這里選擇的Profile伞剑,并不一定就是簽名ipa用的Profile市埋,后面會講到黎泣。
導出ipa
導出ipa首先需要選擇ipa版本腰素,導出App Store/AdHoc/企業(yè)版ipa,然后點擊Next。如果Xcode 沒有登錄企業(yè)開發(fā)者賬號献起,選擇導出企業(yè)版ipa的時候會提示添加企業(yè)開發(fā)者賬號到xcode。
選擇證書
這里就是上面說的在工程選擇的證書姻政、profile可能并不是簽名用的岂嗓,關鍵在這里,這里會顯示已經(jīng)添加到Xcode的開發(fā)者賬號對應的證書列表厌殉,可以選擇簽名用的證書。如果跟工程設置的證書一致器紧,并且Profile匹配楼眷,則會根據(jù)工程配置的證書、Profile來簽名導出罐柳。如果跟工程配置的證書不一致,則會根據(jù)選擇的證書自動查找匹配的Profile來簽名導出ipa齿梁。
這里會顯示導出的ipa用的是哪一個證書芦拿、Profile簽名的查邢,Profile旁邊那個箭頭并不是選擇Profile酵幕,然后在Finder中顯示當前Profile。 所以導出的最后一步芳撒,盡量確認一下簽名的證書、Profile是不是自己指定的芥备。
內測分發(fā)ipa文件
內測分發(fā)ipa文件給測試人員主要有3種方法:
- 使用iTunes將iPa同步到手機中舌菜;
- 使用itms-services協(xié)議進行下載分發(fā);
- 使用第三方工具進行下載分發(fā)日月。
請注意,無論使用何種形式分發(fā)尺借,內測的人數(shù)限制精拟,以及App的UDID限制始終是存在的。如果想新增加測試人員蜂绎,開發(fā)者仍然需要將UDID寫入Provision Profile荡碾,重新生成ipa文件進行分發(fā)。
使用iTunes進行內測分發(fā)
使用iTunes進行分發(fā)比較麻煩坛吁,需要測試用戶使用數(shù)據(jù)線連接裝有iTunes的電腦上,先將ipa文件添加到iTunes哆姻,再將iTunes的App同步到手機上。由于國內用戶對iTunes熟悉程度不高矛缨,故不推薦大家使用這種方式進行內測分發(fā)。
使用itms-services協(xié)議進行下載分發(fā)
相比iTunes的分發(fā)方式箕昭,使用itms-service 分發(fā)的最大好處是測試用戶無需使用數(shù)據(jù)線落竹,只需打開Safari中訪問包含itms-service連接的頁面,單擊連接后即可下載IPA文件述召。
itms-services的原理是itms-services指向一個plist文件,這個plist文件包含了ipa文件下載的地址藤为,iOS設備的Safari會自動將plist中指定的ipa文件下載安裝到本地夺刑。
itms-services的麻煩之處就是開發(fā)者需要自己搭建一個服務器,之后蘋果在iOS 7.1 以后安裝ipa性誉,寫入ipa地址的plist文件的存放地址必須是一個https的地址.
itms的結構參考如下
<a href="itms-services://?action=download-manifest&url=https://xxx/test.plist">安裝IOS BetaV1.0 </a>
plist 的結構參考如下
<?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>
我們可以看到错览,雖然說用戶比較方便煌往,但對開發(fā)者而言需要寫很多東西,還得搭建服務器羞海,上OpenSSL等曲管,比較麻煩。
使用第三方工具進行內測分發(fā)
為了避免開發(fā)者使用itms-services而帶來的額外工作量腊徙,可以使用第三方工具如 fir.im 檬某,將ipa快速地進行內測分發(fā)。
本文整理自:【CSDN技術公開課】iOSApp研發(fā)的最后沖刺:內測與部署恢恼,作者紀承,演講PPT>>下載地址漓踢。