iOS開發(fā):集成的SDK不支持模擬器調(diào)試怎么辦恩急?

??最近在項目的開發(fā)中遇到了一個問題。用戶反映在iPhone Xs Max上一些界面顯示異常纪蜒。但是手頭沒有這個手機衷恭,而且自從集成了螢石云的SDK以后,項目無法在模擬器上調(diào)試〈啃現(xiàn)在再申請購置一部XS Max手機也來不及了随珠,而且總不能一遇到手頭沒有的設備就申請新手機吧。于是就需要考慮如何讓這種集成了不支持模擬器的SDK如何也能在模擬器上運行杆烁,從而解決這類項目中遇到的個別機型差異造成的BUG牙丽。

一、什么情況下出現(xiàn)這種問題

??剛才說了兔魂,出現(xiàn)在這種問題是集成了第三方的SDK,該SDK不支持模擬器運行举娩。其實析校,再問題具體一點构罗,是因為這類SDK不支持在x86下編譯的話,則不能在模擬器上調(diào)試運行智玻。

二遂唧、解決這種問題的思路。

??其實吊奢,解決這類問題的方法就是四個字:條件編譯盖彭。利用條件編譯,在模擬器環(huán)境下不對不支持x86的SDK進行編譯即可页滚。

??對于有些SDK提供了兩套版本召边,一套Release環(huán)境,一套Debug環(huán)境裹驰。Debug環(huán)境支持在模擬器進行隧熙,對于這類SDK,則可以通過替換SDK的framework的方式來解決模擬器調(diào)試問題幻林。比如阿里云短視頻SDK贞盯,七牛視頻播放SDK等等。

三沪饺、具體解決問題的方法躏敢。

??我們要設置一個預編譯宏,來處理條件編譯整葡,比如設置一個預編譯宏父丰,名字叫EZDISABLE。在TargetBuild Settings選項卡下面掘宪,我們找到Preprocessor Macros項蛾扇,雙擊后增加一項:EZDISABLE=1∥汗觯可以只在Debug或者只在Release加入該宏镀首,具體依據(jù)你自己的需求而定。這里我都加入了鼠次。

??下面更哄,就是將用到不支持x86的SDK的調(diào)用,通過EZDISABLE“隔離”開腥寇。在我這個項目中成翩,需要把螢石云的SDK“隔離”

// 如果沒有定義EZDISABLE宏, 則編譯以下內(nèi)容, 否則不編譯
#ifndef EZDISABLE
#import <EZOpenSDKFramework/EZOpenSDKFramework.h>
#endif
......
......

- (void)setupEZ{
// 如果沒有定義EZDISABLE宏, 則編譯以下內(nèi)容, 否則不編譯
#ifndef EZDISABLE
   [EZOpenSDK initLibWithAppKey:@"xxxxxx"];
#endif
}

??代碼可能分散的比較多赦役,需要耐心的一個個把他給去掉麻敌。

??上面還說了,有些SDK分ReleaseDebug兩個版本掂摔,Debug支持模擬器編譯术羔。對于這類赢赊,如果你的SDK是通過手工添加的方式來集成的話,那你就手工一個個一個把SDK給替換了级历,如果你用的是cocoaPods的話释移,那一般只需要將Podfile的引用稍作修改既可以。我這個用的是cocoaPods來集成的七牛視頻播放SDK寥殖。我將Podfile文件修改成下面的即可:

source 'https://github.com/CocoaPods/Specs.git'
platform :ios, '8.0'
inhibit_all_warnings!
target 'BBTSer' do
  ...
  ...
  pod "PLPlayerKit", :podspec => 'https://raw.githubusercontent.com/pili-engineering/PLPlayerKit/master/PLPlayerKit-Universal.podspec'  #七牛官方提供的支持模擬器的版本玩讳,在官方網(wǎng)站上可以查到
end

??有時候,我們?yōu)榱朔奖愦a的復用嚼贡,做了很多的私有Pod子庫提供給主項目集成熏纯。如果在這些私有庫中引用了類似七牛這種SDK該怎么辦?其實我們根據(jù)cocoaPods的規(guī)則编曼,完全可以不用考慮子庫豆巨,直接在主工程的Podfile文件將SDK的引用改了就行。cocoaPods會自動處理這類依賴掐场,非常方便往扔。

四、問題優(yōu)化熊户。

??在上面萍膛,已經(jīng)基本上解決了如何在模擬器上編譯的問題。但是不太方便嚷堡,我們總不能每次切換真機與模擬器的時候蝗罗,都去修改一下預編譯宏和Podfile文件吧?

??具體該怎么進行優(yōu)化可以讓我們方便的切換調(diào)試環(huán)境呢?

??對于預編譯宏的設置蝌戒,我們可以通過再設置一個Target的方式來處理串塑,我們將工程的Target復制一個,比如原工程Target名字為:BBTSer北苟。復制的一個改名為:BBTSer Simulator桩匪。我們只在BBTSer SimulatorBuild Settings選項卡中的Preprocessor Macros增加預編譯宏EZDISABLE=1。原來的老Target不變友鼻。如果用cocoaPods的話傻昙,在增加了一個新的Target后要相應的修改一下Podfile文件來增加對這個Target的支持。這樣彩扔,就可以通過切換Target的方式來處理真機與模擬器的調(diào)試切換妆档。

??再說下Podfile文件的優(yōu)化。上面講了虫碉,對于七牛的SDK官方支持了在模擬器調(diào)試贾惦,但是是不同的pod庫地址。需要進行切換。那么我們?nèi)绾文軌蚴筩ocoaPod能夠以一種相對自動的方式來處理這種切換呢纤虽?這需要我們更加的了解Podfile的語法才行乳绕。首先绞惦,在上面我們建立了兩個Target逼纸。所以Podfile文件要同時處理兩個Target的集成。然后济蝉,對于不同的Target有可能要集成不同的七牛SDK地址杰刽,如何在pod install的時候來處理這種不同?

??對于第一個問題其實很簡單王滤,百度一下很多方式贺嫂,這里不在敘述。對于第二個問題需要說一下雁乡。在Podfile中第喳,如果兩個或者多個Target引用了相同的pod庫,但是源文件地址不一樣的話踱稍,是會報錯的曲饱。那么我們就需要增加一個開關來處理一下,如果開關打開珠月,則引入正常地址扩淀,如果開關關閉則引入另外一個地址氯窍。我們知道洋幻,Podfile文件的語法其實跟Ruby差不多。所以奈嘿,我們可以增加一個變量release庆聘,然后通過判斷release變量是false還是true來引入不同的源地址胜臊。這樣,我們的Podfile文件就變成了如下行使伙判。

source 'https://github.com/CocoaPods/Specs.git'
platform :ios, '8.0'
inhibit_all_warnings!
#開關變量
release=false
# abstract_target:抽象target象对。內(nèi)部包含兩個Target:BBTSer和BBTSer Simulator。這兩個Targe繼承這個抽象target澳腹。抽象target的名字可以隨意定義织盼,這里我定義成BBT
abstract_target 'BBT' do    
  ...
  ...
  if release then
    target 'BBTSer' do
      pod "PLPlayerKit"
    end
  else
    target 'BBTSer Simulator' do
      pod "PLPlayerKit", :podspec => 'https://raw.githubusercontent.com/pili-engineering/PLPlayerKit/master/PLPlayerKit-Universal.podspec'
    end
  end
end

到了這里,我們在每次切換模擬器和真機的時候酱塔,只要把release的狀態(tài)改一下就可以了沥邻,真機改成true,模擬器改成false羊娃。然后在pod install或者pod update唐全。你可能會說,這樣也不好。每次還要改Podfile文件邮利。那么好弥雹,我再加一個shell腳本,來幫著我們處理這個改動延届,不要每次都改Podfile文件了剪勿,省的不小心改錯了。shell文件起名為podinstall.sh方庭。內(nèi)容如下:

#!/bin/bash
file="Podfile"
if [ ! -f "$file" ]; then
  echo '沒有找到Podfile文件'
  exit
fi

if [ ! -n "$1" ] ;then
    echo "請輸入?yún)?shù)厕吉。真機調(diào)試以及發(fā)布到AppStore請輸入release,模擬器調(diào)試輸入debug"
    exit
fi

MODE=$1
if [ "$MODE" != "release" ] && [ "$MODE" != "debug" ];then
    echo "請輸入正確的參數(shù)械念。真機調(diào)試以及發(fā)布到AppStore請輸入release头朱,模擬器調(diào)試輸入debug"
    exit
fi
echo "當前集成環(huán)境:$MODE"

podmodel="release=false"
if [ "$MODE" == "release" ];then
    podmodel="release=true"
fi
echo $podmodel
# sed -i "s/release=true/$podmodel/g" 
# sed -i '' '/release=true/$podmodel/g' $file
sed -i '' "s#release=true#$podmodel#g" $file
sed -i '' "s#release=false#$podmodel#g" $file

#更新pod配置
echo "********************************************"
echo "*      配置完畢,開始Pod集成        *"
echo "********************************************"
pod install

每次pod install的時候龄减,用這個shell來代替项钮。將它和Podfile文件放到一起。真機pod調(diào)用./podinstall.sh release希停。模擬器pod調(diào)用./podinstall.sh debug烁巫。怎么樣,是不是方便多了脖苏?

?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末程拭,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子棍潘,更是在濱河造成了極大的恐慌恃鞋,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,482評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件亦歉,死亡現(xiàn)場離奇詭異恤浪,居然都是意外死亡,警方通過查閱死者的電腦和手機肴楷,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,377評論 2 382
  • 文/潘曉璐 我一進店門水由,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人赛蔫,你說我怎么就攤上這事砂客。” “怎么了呵恢?”我有些...
    開封第一講書人閱讀 152,762評論 0 342
  • 文/不壞的土叔 我叫張陵鞠值,是天一觀的道長。 經(jīng)常有香客問我渗钉,道長彤恶,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,273評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮声离,結(jié)果婚禮上芒炼,老公的妹妹穿的比我還像新娘。我一直安慰自己术徊,他們只是感情好本刽,可當我...
    茶點故事閱讀 64,289評論 5 373
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著弧关,像睡著了一般盅安。 火紅的嫁衣襯著肌膚如雪唤锉。 梳的紋絲不亂的頭發(fā)上世囊,一...
    開封第一講書人閱讀 49,046評論 1 285
  • 那天,我揣著相機與錄音窿祥,去河邊找鬼株憾。 笑死,一個胖子當著我的面吹牛晒衩,可吹牛的內(nèi)容都是我干的嗤瞎。 我是一名探鬼主播,決...
    沈念sama閱讀 38,351評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼听系,長吁一口氣:“原來是場噩夢啊……” “哼贝奇!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起靠胜,我...
    開封第一講書人閱讀 36,988評論 0 259
  • 序言:老撾萬榮一對情侶失蹤掉瞳,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后浪漠,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體陕习,經(jīng)...
    沈念sama閱讀 43,476評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,948評論 2 324
  • 正文 我和宋清朗相戀三年址愿,在試婚紗的時候發(fā)現(xiàn)自己被綠了该镣。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,064評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡响谓,死狀恐怖损合,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情娘纷,我是刑警寧澤嫁审,帶...
    沈念sama閱讀 33,712評論 4 323
  • 正文 年R本政府宣布,位于F島的核電站失驶,受9級特大地震影響土居,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,261評論 3 307
  • 文/蒙蒙 一擦耀、第九天 我趴在偏房一處隱蔽的房頂上張望棉圈。 院中可真熱鬧,春花似錦眷蜓、人聲如沸分瘾。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,264評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽德召。三九已至,卻和暖如春汽纤,著一層夾襖步出監(jiān)牢的瞬間上岗,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,486評論 1 262
  • 我被黑心中介騙來泰國打工蕴坪, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留肴掷,地道東北人。 一個月前我還...
    沈念sama閱讀 45,511評論 2 354
  • 正文 我出身青樓背传,卻偏偏與公主長得像呆瞻,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子径玖,可洞房花燭夜當晚...
    茶點故事閱讀 42,802評論 2 345

推薦閱讀更多精彩內(nèi)容