問題:主題應(yīng)用失敗了础锐。主題代碼上線有段時間了拘荡,而我也沒修過代碼胖翰,怎么會出問題呢接剩?
分析:
1.主題的應(yīng)用邏輯:從服務(wù)端下載->本地解壓->使用。根據(jù)測試提供的線索萨咳,只有最新的包應(yīng)用失敗懊缺。我檢查整個邏輯,下載包完整培他,解壓失敗鹃两。對比主題的代碼,和之前一模一樣舀凛。有點摸不著動腦俊扳。
2.只有沿著最近提交的節(jié)點,一個一個去查找猛遍,先定位出問題出現(xiàn)在哪個節(jié)點上馋记。
3.定位出節(jié)點,奇怪的是該節(jié)點沒有代碼沖突懊烤,也沒有修改主題代碼梯醒。對ZipArchive解壓的代碼看了又看,與之前正常的ZipArchive比了又比腌紧,發(fā)現(xiàn)沒有任何思路茸习。
4.替換下最新的ZipArchive的試試,引入SSZipArchive壁肋。問題暴露了逮光,編譯不通過。
大概猜到了原因, ZipArchive與SSZipArchive沖突了墩划。而根據(jù)節(jié)點的信息涕刚,應(yīng)該是新引入的framework中引入了SSZipArchive。而framework中的SSZipArchive乙帮,在工程中是看不到的杜漠。
我猜測是category覆蓋引起的,于是我查找了ZipArchive與
SSZipArchive的分類,發(fā)現(xiàn)并無沖突驾茴。但是.c文件卻有很多相似盼樟。
我有意把zip.c拖入工程,發(fā)現(xiàn)項目能正常運行锈至。至于用的是那個.c文件晨缴,我想得看XCode的選擇了。原因也明確了峡捡,原來文件覆蓋不止Category击碗,.c文件也會。嘗試去掉新引入的framework们拙,發(fā)現(xiàn)功能正常稍途。
這里提供一種查看framework中文件的方法:
用反編譯工具如IDA,找到framework中的二進(jìn)制文件,拖入IDA工具砚婆,可查看類名
總結(jié):
1.如果有引入的合作的第三方framework械拍,除提供framework使用的方法外,還要提供下framework引用了哪些第三方装盯。第三方的zip.c文件坷虑,在工程中是看不到的。最好還是以私有組件的方式提供埂奈,公共的第三方迄损,大家都能使用。
2.OC中文件覆蓋挥转,除了category還有.c文件。
3.無論是framework里的類名共屈、方法绑谣,還是category的名稱和方法,都要加上前綴拗引,防止沖突借宵。
4.另外,對于全局變量矾削,類名相同等沖突壤玫,XCode編譯會報錯;最難受的是category這種覆蓋沖突,找都不好找哼凯,再加上framework看不到源碼欲间,最為致命。