一大早的給我驚喜,上線被拒的悲催,apple給的提示信息com.apple.springboard.lockcomplete
看到的第一眼感覺是檢測(cè)鎖屏私有api的使用,不過(guò)項(xiàng)目里面自己確實(shí)沒(méi)有使用過(guò)類似的api,第一個(gè)想到的應(yīng)該是第三方庫(kù)和sdk,打開終端cd到你的項(xiàng)目根目錄執(zhí)行如下的語(yǔ)句
grep -R 'com.apple.springboard.lockcomplete' *
亦或者執(zhí)行這個(gè)也是可以的
find . | grep -v .svn | grep ".a" | grep -v ".app" | xargs grep com.apple.springboard.lockcomplete
會(huì)把相關(guān)使用私有api的類或者第三方檢測(cè)出來(lái)。
我的想檢測(cè)出如圖

原來(lái)是環(huán)信的sdk出現(xiàn)的問(wèn)題,我們?nèi)サ焦倬W(wǎng)就可以看到,我的sdk該升級(jí)了,因?yàn)閍pple把相關(guān)api變成了私有,sdk自然也就需要升級(jí),但是環(huán)信的技術(shù)為什么會(huì)使用如此蛋疼的api造成的麻煩就不知道了,好了現(xiàn)在就可以下載新的sdk替換掉舊的sdk即可。
但是還有問(wèn)題就是appstore上傳的時(shí)候是不允許使用i386 x86_64兩種文件的,我們需要進(jìn)行把i386 x86_64刪除,如圖所示

把刪除后的sdk放進(jìn)項(xiàng)目即可。這個(gè)階段已完成,不過(guò)好戲在后面。
注意
你會(huì)看到各種頭文件引用錯(cuò)誤,靜下心不要擔(dān)心,你看到這些有文件都是找不到,很簡(jiǎn)單我們把頭文件替換一下就OK了,使用尖括號(hào),如下,
import <Hyphenate/EMCallSession.h>
等你替換完編譯沒(méi)有報(bào)錯(cuò),高興啊,終于可以通過(guò)了,直接真機(jī)測(cè)試,悲催了,直接崩潰,心有涼了也一下,不過(guò)還是要看看什么錯(cuò)誤也好解決。
Library not loaded: @rpath/Hyphenate.framework/Hyphenate
Referenced from: /var/containers/Bundle/Application/98B60753-EF76-4A53-B771-002F7F3D64D7/DigitalCampus.app/DigitalCampus
Reason: image not found
這就是包的錯(cuò)誤,是Hyphenate.framework找不到相關(guān)的資源文件,這是什么情況,查找相關(guān)信息終于不負(fù)有心人。找到答案完美解決。
解決辦法一:把導(dǎo)入的Framework的Status由Required改為Optional,如圖,編譯運(yùn)行正常。但是有后遺癥,sdk不能用,消息發(fā)送為空,好吧,我還以為項(xiàng)目問(wèn)題,各種排場(chǎng),各種參數(shù),都是對(duì)的,但是問(wèn)題就是依然存在,好吧,就暫時(shí)改回來(lái)的狀態(tài)。

解決辦法二:不需要修改Framework的Status,首先在Build Phases下添加 New Copy Files Phase;

然后,在如圖:

設(shè)置好后,編譯運(yùn)行通過(guò)。真機(jī)測(cè)試完美解決,消息可以順暢的發(fā)走了。