從今年三月開(kāi)始,我學(xué)習(xí) iOS 開(kāi)發(fā),語(yǔ)言是 Swift 。七八月的時(shí)候,我開(kāi)始構(gòu)思一款記錄、分享句子的 App 。由于是業(yè)余的自己用業(yè)余的時(shí)間做,所遇問(wèn)題也非常多,有些能解決掉,有些功能卻是自己想也想不能該如何實(shí)現(xiàn)的,還好自己有一個(gè)好的心態(tài),處于新手階段的自己,也沒(méi)有想一下子就做得很了不起。十月的時(shí)候,終于感覺(jué)到這個(gè) App 可以用起來(lái)了,于是在十月底交費(fèi)開(kāi)通了蘋(píng)果開(kāi)發(fā)者帳號(hào)。并找資料看視頻,尋求上傳 App 的方式,還好,比較順利,一個(gè)晚上的時(shí)間,就將第一個(gè)版本上傳到了 App Store ,接著就是等待了,一周多一點(diǎn)的樣子,審核狀態(tài)變成了「正在審核」,很快,收到郵件通知,審核未能通過(guò)。
我查找了原因,是因?yàn)樽约旱?App 用戶帳號(hào)管理方面的問(wèn)題。我使用了友盟第三方帳號(hào)管理系統(tǒng),但卻沒(méi)有自己的帳號(hào)管理模塊。我直接將友盟的帳號(hào)模塊完全刪除掉,換用 Parse 來(lái)做 App 的后臺(tái),但很快我發(fā)現(xiàn),訪問(wèn)速度太成問(wèn)題。正當(dāng)我感感有點(diǎn)絕望的時(shí)候,無(wú)意中有人提到了 LeanCloud 這個(gè)服務(wù)。看了看使用文檔,使用上就完全和 Parse 一樣,代碼修改極其簡(jiǎn)單,半小時(shí)就完全修改 OK 了,我立馬打包上傳,結(jié)果發(fā)現(xiàn),真機(jī)上運(yùn)行就出錯(cuò)了:
The identity used to sign the executable is no longer valid.
Please verify that your device’s clock is properly set, and that your signing certificate is not expired.
(0xE8008018).
當(dāng)時(shí)就覺(jué)得奇怪了,我只是添加了一個(gè)第三方 SDK ,其它的都沒(méi)有動(dòng)過(guò),怎么就這樣了呢?看樣子是提示簽名或授權(quán)文件現(xiàn)問(wèn)題之類的。我試著在網(wǎng)上尋求解決辦法,果然也有人遇到這樣的問(wèn)題,我進(jìn)行這些方法的嘗試:
- 重啟 Xcode
- 刪除 Xcode 里面的 Apple ID ,重啟 Xcode ,再重新登錄 Apple ID ,然后下載 Provisioning Profile 。
- 關(guān)閉 Xcode ,刪除
/Users/USERNAME/Library/MobileDevice/Provisioning Profiles
里面所有的文件。 - 清除掉
/Users/USERNAME/Library/Developer/Xcode/DerivedData
目錄中對(duì)應(yīng)項(xiàng)目的目錄。 - 在 Apple Developer 上刪除原有的 Provisioning Profile 文件,新建,再下載,重新安裝上。
然而卻報(bào)同樣的錯(cuò)誤,接著尋找辦法,感覺(jué)找到了更多的解決辦法:
看里面的留言,有成功的,也有仍然失敗的,最容易的,就是重啟一下Xcode就搞定了。然后我卻沒(méi)有那到幸運(yùn)。
按著其方式一一作了嘗試,卻仍然沒(méi)有用。心里挺絕望的。于是我開(kāi)始做自己才想到的另一個(gè) App ,前前后后一個(gè)月,白天上班,晚上回家看看書(shū),寫(xiě)寫(xiě)代碼,然后做出來(lái)了。這月初的時(shí)候提交審核,15號(hào)審核通過(guò),正多上架。一下子挺受鼓舞,就拿起以前的 App ,想重新弄下。將以前試過(guò)的方法又重新試過(guò),仍然無(wú)果。我在一個(gè) QQ 開(kāi)發(fā)群中求助,得到到一朋友的幫助,所用方法,也是我嘗試過(guò)的。接著我想到了蘋(píng)果的開(kāi)發(fā)者技術(shù)團(tuán)隊(duì)。于是向他們發(fā)了郵件,盡量的將我息遇問(wèn)題及解決辦法給他們說(shuō)了,他們當(dāng)天給了回復(fù),建議我將 Xcode 刪除掉再重裝,昨天晚上按此方法試了,卻仍然報(bào)著一樣的錯(cuò)。
不過(guò)我卻仍然沒(méi)有放棄,盡管我心理頭想可以跳過(guò)這個(gè) App ,重新再做一個(gè)功能更強(qiáng)一點(diǎn)的,但問(wèn)題放在這里總會(huì)是個(gè)問(wèn)題,萬(wàn)一哪天我又遇到怎么辦呢?我新建了一個(gè)項(xiàng)目,把原有項(xiàng)目里的文件全部復(fù)制到新項(xiàng)目中,安裝 SDK, 然后進(jìn)行調(diào)試,原以為一切OK,然后,錯(cuò)誤一樣出現(xiàn)了!
無(wú)意中我查看 App 的編譯信息時(shí),發(fā)現(xiàn)有一行貌似 LeanCloud 有請(qǐng)求證書(shū)的代碼,而所報(bào)之錯(cuò),也是關(guān)于證書(shū)的,難著這個(gè) SDK 使用也需要先申請(qǐng)證書(shū)?我上 LeanCloud 的網(wǎng)站查看文檔,找到了這樣的資料:
https://leancloud.cn/docs/ios_push_cert.html
原來(lái)是要開(kāi)啟信息推送功能:
為 App 開(kāi)啟 Push Notification 功能。如果是已經(jīng)創(chuàng)建的 App ID 也可以通過(guò)設(shè)置開(kāi)啟 Push Notification 功能。
需要兩個(gè)新的證書(shū),然后再更新授權(quán)文件。但真機(jī)運(yùn)行時(shí),同樣報(bào)錯(cuò),于是我動(dòng) SDK 的 BBS 看尋求幫助,發(fā)現(xiàn)了這個(gè)貼子:
https://forum.leancloud.cn/t/ios-avoscloud-framework-code-signature/3667/12
所遇問(wèn)題和我的一樣,提示升級(jí) Xcode ,我看我 SDK 的版本是 3.1.5.2 的,我將其升級(jí)到了 3.1.6.8 ,這里,我驚喜的發(fā)現(xiàn),和原來(lái)報(bào)的錯(cuò)不一樣了,而變成了這樣:
盡管還有錯(cuò)誤,但總算是有了新的起色,也算是一個(gè)不錯(cuò)的消息了,我英文不太好,但我猜還是授權(quán)文件方面的問(wèn)題吧,但我確實(shí)是才重新做了授權(quán)文件的。
最后發(fā)現(xiàn),還是 SDK 的使用問(wèn)題,我手動(dòng)添加了最新版的 SDK 之后,就一切 OK 了,現(xiàn)在真機(jī)也能運(yùn)行上了!
最后,總結(jié)一下這次經(jīng)歷的經(jīng)驗(yàn)教訓(xùn)吧。
- 遇到的問(wèn)題,多半不止自己一個(gè)人遇到,通過(guò)網(wǎng)絡(luò)查找,一般可以解決。
- 向他們求助,但這一步一定要在自己實(shí)無(wú)可想之法時(shí)才進(jìn)行。
- 開(kāi)發(fā)文檔應(yīng)該仔細(xì)閱讀。即便不想讀,也至少全程瀏覽一遍,有個(gè)印象之后,能方便問(wèn)題的定位。
- 受難時(shí)別迷失了方向,前期的嘗試感覺(jué)在方向上都出了問(wèn)題,利于排除法,問(wèn)題應(yīng)該能很快的定位到是由于第三方 SDK 所起的錯(cuò)誤。
問(wèn)題得到解決,又可以繼續(xù)了!