iOS馬甲包導(dǎo)致的搜索不到局域網(wǎng)設(shè)備的問題

1. 問題背景

iOS馬甲包同時安裝后,導(dǎo)致無法搜索到本地設(shè)備。

但是,只安裝一個app的話,就沒有此問題(這說明應(yīng)該是app互相干擾導(dǎo)致的)。

2. 解決過程

1)對比不同打包工具Xcode的版本,iPad對應(yīng)系統(tǒng)的版本。

2)一開始發(fā)現(xiàn)其他事打的包,安裝就沒有該問題,但是后續(xù)用同樣的配置去打包,安裝之后也有問題。

3)重裝系統(tǒng)后,首次安裝使用就是沒有問題的。但是繼續(xù)使用其他app,問題就會復(fù)現(xiàn)。  

以上都無法徹底解決該問題,直到測試同事發(fā)現(xiàn)如果只安裝一個APP的話,就不會有網(wǎng)絡(luò)問題。這給排查提供了思路。

經(jīng)過各種查資料,查閱iOS網(wǎng)絡(luò)相關(guān)知識,分析每一個安裝包的UUID(iOS系統(tǒng)下的應(yīng)用唯一標(biāo)識),發(fā)現(xiàn)同一個工程打出的包UUID是相同的,繼而發(fā)現(xiàn)相同的包在網(wǎng)絡(luò)請求時會發(fā)生沖突。

這也是由于我們剛好使用同一套工程去打包出不同app導(dǎo)致的:相同的代碼,僅僅是在打包的時候更換部分資源。這樣系統(tǒng)分辨出可執(zhí)行代碼都是相同的,也就造成了系統(tǒng)給出了同一個UUID。

同時也解釋了為什么安裝北京同事打出的包就沒有網(wǎng)絡(luò)問題,因?yàn)樗麄冐?fù)責(zé)的app和西安團(tuán)隊(duì)不是同一個軟件,也不是同一個工程。

解決方案:

在打每個包時加一些混淆文件,讓系統(tǒng)認(rèn)為這些app差異較大。

具體做法:在每個項(xiàng)目iOS主工程創(chuàng)建一個swift文件,內(nèi)容如下:

class udp1567367194 :UIView{
    let myAppleID = "1567367194"
    func temporaryFuncToFixUDPIssue(apple:String){
        print(myAppleID)
    }
}

注意:一定要寫一個print函數(shù),如果只是手動拖入一個類,會被系統(tǒng)認(rèn)為是靜態(tài)資源,但是有了print,iOS系統(tǒng)在編譯的時候,會將方法處理成-performSelector:…這種,從而觸發(fā)系統(tǒng)重構(gòu)UUID。

3. 參考代碼

otool -l Runner.app/Runner| grep LC_UUID -B 1 -A 2

#dirname $0 ,取得當(dāng)前執(zhí)行腳本文件的父目錄
basepath=$(cd `dirname $0`;pwd)
cd ${basepath}/ipas
currentPath=$(pwd)
record=/Users/dragon/Desktop/fix_udp/uuid.txt
echo "當(dāng)前文件夾路徑:$currentPath"

for dir in `ls`
    do
    #進(jìn)入子目錄
    cd $currentPath/$dir
    rm -rf Payload
    mv *.ipa $dir.zip
    unzip *.zip
    cd Payload
    echo [$dir]的uuid:?? >> $record
    uuid=`otool -l Runner.app/Runner| grep LC_UUID -B 1 -A 2`
    echo $uuid >> $record

    #不用返回上層目錄,for循環(huán)會清空當(dāng)前子路徑

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

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

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