近日有用戶表示企業(yè)版的幾個APP相繼出現(xiàn)了閃退,用戶表示沒有升級過iOS系統(tǒng)初坠,之前使用也沒有出現(xiàn)什么異常。我就意識到不好囊拜,貌似去年這個時間段就出過類似的事某筐,但是當(dāng)時因?yàn)槲沂只却睿噶烁蟮腻e冠跷,導(dǎo)致并沒有注意到這是個問題,具有潛在的風(fēng)險身诺。仔細(xì)研究了一下蜜托,并且也撥打蘋果客服進(jìn)行了驗(yàn)證,得到的結(jié)論如下:
1霉赡,企業(yè)版帳號(年費(fèi)$299橄务,enterprise)每個distribution certificate(分發(fā)證書) 3年到期;
2穴亏,用企業(yè)版帳號簽名的APP蜂挪,它的provisioning profile(預(yù)配置文件)有效期是1年;
3嗓化,個人開發(fā)帳號(年費(fèi)$99棠涮,personally)上述證書沒有有效期,但是如果到期不續(xù)費(fèi)刺覆,APP會被自動下架
對于企業(yè)版帳號或者APP provisioning profile過期的問題严肪,蘋果客服回答只能通過在到期之前對APP進(jìn)行update來避免用戶使用中出現(xiàn)問題。(我在網(wǎng)上看到有蘋果MDM服務(wù)谦屑,可以在線update證書驳糯,沒有用過,也沒仔細(xì)研究)
那么問題的解決方法就是氢橙,每年都必須在證書(distribution certificate或者APP provisioning profile)到期之前酝枢,對企業(yè)證書發(fā)行的APP進(jìn)行update操作。
蘋果客服還建議,創(chuàng)建兩個distribution certificate(一個帳號最多可以創(chuàng)建2個分發(fā)證書)兩個時間是交疊的,在其中一個到期之前屯蹦,使用另外一個簽名APP并提示用戶進(jìn)行update乡数,即可以避免證書到期還沒有更新導(dǎo)致的APP啟動后閃退的問題。
另外林螃,我還注意到一個問題,provisioning profile是打包進(jìn)ipa的,它在里面寫明了APP使用的有效期(創(chuàng)建時間卑笨,過期時間和使用期限),至于具體是什么時間仑撞,與打包日期有關(guān)赤兴,與創(chuàng)建這個provisioning profile的時間有關(guān)妖滔。
對于provisioning profile已經(jīng)過期的APP,再次打包時桶良,選擇cerficate后座舍,provisioning profile中的時間就是當(dāng)前打包的時間;但是對于那些provisioning profile還沒有過期的APP陨帆,再次打包曲秉,還是使用舊的provisioning profile,creationTime(ExpirationDate)還是之前創(chuàng)建或者update時的時間疲牵。這個過期時間有可能與在member center上這個APP中查看到的時間不一致(有可能是生成了新的provisioning profile后承二,并沒有安裝到Xcode中)
還有一種情況,如果APP沒有特殊的capabilities纲爸,那么就可以使用通用的provisioning profile亥鸠,這個通常是XC:*,它的時間也是一年有效期识啦。
因此负蚊,如果不能十分確定每一個打出來的ipa的有效期(過期時間),而又需要關(guān)注它具體什么時候需要強(qiáng)制用戶update颓哮,最好是在要發(fā)行的ipa生成之后家妆,查看其中的provisioning profile。具體方法:
1题翻,解壓ipa:右鍵->打開壓縮包;
2揩徊,進(jìn)入解壓后生成的Payload目錄;
3嵌赠,右鍵app->顯示包內(nèi)容
4塑荒,找到文件:embedded.mobileprovision
5,用查看文本文件的工具打開這個文件姜挺,并轉(zhuǎn)換編碼為UTF-8齿税。
補(bǔ)充一點(diǎn),如果在控制臺炊豪,直接:
# unzip xxx.ipa 得到Payload目錄凌箕,然后
# cd Payload , 繼續(xù)
# cd xxx.app,就可以看見包里的文件了词渤,最后
# vi embedded.mobileprovision 就可以直接打開provision文件牵舱,不用再轉(zhuǎn)換編碼了
當(dāng)然,更加方面的是在Finder里使用文件的預(yù)覽功能啦缺虐,直接點(diǎn)embedded.mobileprovision 芜壁,預(yù)覽里就能看到內(nèi)容啦
轉(zhuǎn)換為UTF-8后,這個provisioning profile文件大部分內(nèi)容都是可讀的,可以查看其中的CreationDate 和 ExpirationDate 是不是預(yù)期的時間慧妄,或者記錄此時間顷牌,并在此之前安排用戶update。
一旦用戶錯過了update塞淹,導(dǎo)致APP已經(jīng)開始閃退了怎么辦窟蓝?
一個有效的解決辦法是:調(diào)整用戶設(shè)備時間,退回到APP過期之前饱普。
這樣APP就仍然是可以使用的狀態(tài)运挫,并不會閃退,如果APP其中包含升級的方式费彼,連接等滑臊,用戶就可以直接在APP中進(jìn)行升級了,否則可能需要給用戶提供其它的方式請用戶重新下載箍铲。當(dāng)然這些都是升級,并不需要用戶刪除原來的APP鬓椭。
只不過颠猴,絕大多數(shù)用戶都不喜歡調(diào)整自己設(shè)備的時間的,調(diào)整了別忘了調(diào)整回來小染,否則可能會導(dǎo)致很多奇怪的問題翘瓮,比如push獲取不到token之類~
==============
近日發(fā)現(xiàn)個人開發(fā)者賬戶(Personal, Individual)也即將到期裤翩,又仔細(xì)查看了一下Apple關(guān)于證書expire和remove的說明资盅,貼圖如下:
說明:
1)Enterprise 開發(fā)者賬號,distribution certificate過期(或手動revoke)后踊赠,使用此證書簽名打包的所有app將不能使用(打不開)呵扛,需要重新生成證書并打包新的app進(jìn)行安裝;
2)Company或Personal(Individual)開發(fā)者賬號筐带,distribution certificate過期(或手動revoke)后今穿,如果membership(年費(fèi))有效,已經(jīng)上架的app不會受到影響伦籍,但是下次發(fā)行或者更新app時蓝晒,需要生成新的證書并使用。