Xcode常見報(bào)錯(cuò)錦囊(二)

中心思想

這篇文章也是緊接著上一篇繼續(xù)歸納和總結(jié)晨横,在我們?nèi)粘5拈_發(fā)工作中,Xcode編譯器拋出的各種“無理取鬧”的異常和錯(cuò)誤箫柳。
在每個(gè)異呈中危或錯(cuò)誤的下方,我會(huì)盡可能詳細(xì)地歸納解決辦法滞时,解決方案中涉及網(wǎng)上取材的內(nèi)容叁幢,我會(huì)附上網(wǎng)址或者其他大神博客供大家參考。

如果文中有不當(dāng)或者錯(cuò)誤的地方坪稽,勞煩您指正曼玩,我會(huì)及時(shí)修改,以免誤導(dǎo)他人及一些iOS開發(fā)初學(xué)者窒百。
Xcode編譯器頭疼腦熱的地方遠(yuǎn)比我們知道的要多黍判,如果您遇到過文中不曾提及的警告或者錯(cuò)誤,并且知道如果解決它篙梢,請(qǐng)您以簡信或者Email的形式發(fā)送給我(網(wǎng)頁地址欄有我的郵箱地址)顷帖,我會(huì)一并總結(jié)更新,我會(huì)附上您的信息(例如博客渤滞,Github地址)贬墩。在此先謝謝了。


1.Bitcode問題

XXX does not contain bitcode. You must rebuild it with bitcode enabled (Xcode setting ENABLE_BITCODE), obtain an updated library from the vendor, or disable bitcode for this target. for architecture arm64

上面這個(gè)問題也是iOS 9SDK發(fā)布以后出現(xiàn)在Xcode7中的新問題妄呕,Bitcode是Xcode7引入的新特性陶舞,旨在為App瘦身,網(wǎng)上對(duì)它通俗的解釋是在線版安卓ART模式绪励。

下面這段話肿孵,是親身參與2015年WWDC大會(huì)的國內(nèi)一線開發(fā)者王巍的總結(jié):Bitcode 是 LLVM 的中間碼,在編譯器更新時(shí)疏魏,Apple 可以用你之前提交的 Bitcode 進(jìn)行優(yōu)化停做,這樣你就不必在編譯器更新后再次提交你的 app,也能享受到編譯器改進(jìn)所帶來的好處大莫。Bitcode 支持在新項(xiàng)目中是默認(rèn)開啟的蛉腌,沒有特別理由的話,你也不需要將它特意關(guān)掉。

Apple Watch應(yīng)用必須打開Bitcode眉抬,iOS沒有強(qiáng)制贯吓,但是Xcode7默認(rèn)打開了Bitcode。

解決上述問題的方法:
1.更新library使包含Bitcode蜀变,否則會(huì)出現(xiàn)以上問題悄谐,陸續(xù)都會(huì)支持Bitcode。
2.關(guān)閉Bitcode,步驟如下库北。
找到工程的target->build settings->直接搜索bitcode->然后在搜索結(jié)果的Build Options選項(xiàng)下找到Enable Bitcode->將YES改為NO爬舰,如下動(dòng)態(tài)圖所示。

圖片取材自網(wǎng)絡(luò)

2.升級(jí)Xcode7后上傳App時(shí)報(bào)錯(cuò)

圖片取自網(wǎng)絡(luò)

解決方案:進(jìn)入TencentOpenApi_ios_Bundle.bunle 點(diǎn)擊顯示包內(nèi)容寒瓦,把plist文件刪除即可

3.故事板與Masonry混合使用時(shí)報(bào)錯(cuò)

原因:如果用的view是storyboard連線而來的情屹,不是自己在代碼里創(chuàng)建的。 很可能運(yùn)行的時(shí)候會(huì)報(bào)錯(cuò)杂腰,說IB已經(jīng)定義的約束和Masonry的約束沖突垃你。即使你拖進(jìn)去控件后并沒有設(shè)置約束。

解決:按以前的方法先用故事版做好約束喂很,然后在每個(gè)約束的屬性面板設(shè)置PlaceHolder : Remove at run time惜颇。 這樣在運(yùn)行的時(shí)候會(huì)自動(dòng)取消。

Masonry是一個(gè)Objective-C版本的第三方Autolayout庫少辣,還有一個(gè)叫做snapKit的開源庫凌摄,它是Masonry的Swift版本。在Swift項(xiàng)目中漓帅,如果出現(xiàn)上述錯(cuò)誤锨亏,解決辦法同上。

4.升級(jí)Xcode7后使用JSONKit第三方庫崩潰

出現(xiàn)問題的出處是: void *keyObjectISA = *((void **)keys[idx]);這一段忙干。這個(gè)問題我也是從網(wǎng)絡(luò)搜集的器予,我沒用過JSONKit,一直都是用系統(tǒng)自帶的捐迫。但是下面的解決辦法在我朋友那里得到了驗(yàn)證乾翔。如果您有異議,請(qǐng)您指正弓乙,我會(huì)及時(shí)修改末融。

解決辦法:將原項(xiàng)目中JSONKit.m文件替換成下面鏈接的實(shí)現(xiàn)文件即可
https://github.com/jcbertin/JSONKit

5.添加Scheme白名單

這個(gè)問題是引起一些在項(xiàng)目中使用到微信钧惧,支付寶或者微博SDK相關(guān)功能(支付暇韧,收藏,分享)出現(xiàn)錯(cuò)誤的原因浓瞪,它會(huì)導(dǎo)致Xcode報(bào)如下報(bào)錯(cuò):
canOpenURL:failedforURL:“weixin://app/wxdaae92a9cfe5d54c/” - error: “This app is not allowed to query for scheme weixin”

問題描述:在iOS 9下涉及到平臺(tái)客戶端跳轉(zhuǎn)懈玻,系統(tǒng)會(huì)自動(dòng)到項(xiàng)目info.plist下檢測是否設(shè)置平臺(tái)Scheme。對(duì)于需要配置的平臺(tái)乾颁,如果沒有配置涂乌,就無法正常跳轉(zhuǎn)平臺(tái)客戶端艺栈。因此要支持客戶端的分享和授權(quán)等,需要配置Scheme名單湾盒。

解決辦法如下:
1)在項(xiàng)目的info.plist中添加一LSApplicationQueriesSchemes湿右,類型為Array。
2)然后給它添加一個(gè)需要支持的項(xiàng)目罚勾,類型為字符串類型毅人;
下面是一些項(xiàng)目中常用的白名單,你有用到的你就添加到該數(shù)組下面,類型全部為string

mqqOpensdkSSoLogin
mqzone
sinaweibo
alipayauth
alipay
safepay
mqq
mqqapi
mqqopensdkapiV3
mqqopensdkapiV2
mqqapiwallet
mqqwpa
mqqbrowser
wtloginmqq2
weixin
wechat

6. directory not found for option

問題截圖

問題原因:Xcode7將framworks位置改變了

解決方法:
1)點(diǎn)擊項(xiàng)目尖殃,選擇 Targets->XXXTests
2)選擇build setting 選項(xiàng)丈莺,找到 Frameworks Search Path 或者 Library Search Paths
3)刪除$(SDKROOT)/Developer/Library/Frameworks,
或者使用$(PLATFORM_DIR)/Developer/Library/Frameworks替換

7.iOS 9舊狀態(tài)欄報(bào)錯(cuò)

下圖是報(bào)錯(cuò)的截圖


取自網(wǎng)絡(luò)

出錯(cuò)原因:設(shè)置app的狀態(tài)欄樣式使用了舊的方式送丰,在info.plist里面設(shè)置了View controller-based status bar appearance為NO缔俄,默認(rèn)為YES,一般式iOS6的時(shí)候使用這種方式器躏,iOS7俐载,8也兼容,但是到了iOS9就報(bào)了警告邀桑。

解決辦法:
1)刪除原先編寫的代碼
[[UIApplication sharedApplication]setStatusBarStyle:UIStatusBarStyleLightContent]

2)然后在plist文件中添加項(xiàng)View controller-based status bar appearance瞎疼,類型為Boolean,設(shè)置為YES(默認(rèn)是NO)壁畸,如下圖7-1所示贼急。


7-1

3)然后在你自定義的導(dǎo)航控制器里面添加如下代碼
-(UIStatusBarStyle)preferredStatusBarStyle { return UIStatusBarStyleLightContent; }

4)在模擬器上刪除應(yīng)用程序并重新運(yùn)行即可

8.大部分社交平臺(tái)接口不支持https協(xié)議。

這個(gè)問題也是上一篇中網(wǎng)絡(luò)請(qǐng)求出錯(cuò)的一個(gè)分支捏萍。目前還有大量的應(yīng)用是通過HTTP協(xié)議來訪問服務(wù)器的,而要讓所有的應(yīng)用都轉(zhuǎn)向支持HTTPS太抓,顯然是一件耗時(shí)的工作。所以下面的方法可以一試令杈,但只是暫時(shí)性的走敌。畢竟蘋果幫之前提出了App Transport Security(ATS)的概念,它的提出意味著蘋果將準(zhǔn)備棄用HTTP逗噩,轉(zhuǎn)而支持HTTPS掉丽。

上述問題的解決方案就是設(shè)置域,可以簡單理解成异雁,把不支持https協(xié)議的接口設(shè)置成http的接口捶障。

具體方法:

1)、在項(xiàng)目的info.plist中添加一個(gè)Key:NSAppTransportSecurity纲刀,類型為字典類型项炼。

2)、然后給它添加一個(gè)NSExceptionDomains,類型為字典類型锭部;

3)暂论、把需要的支持的域添加給NSExceptionDomains。其中域作為Key拌禾,類型為字典類型取胎。

4)、每個(gè)域下面需要設(shè)置3個(gè)屬性:NSIncludesSubdomains湃窍、NSExceptionRequiresForwardSecrecy扼菠、NSExceptionAllowsInsecureHTTPLoads。均為Boolean類型坝咐,值分別為YES循榆、NO、YES墨坚。

以下文章能夠幫助你更好的理解ATS的概念
如何使用ATS提高應(yīng)用的安全性
ATS問題

App Transport Security dictionary primary keys

摘自官方文檔

9.找不到.dylib文件秧饮,換成.tbd文件而又無法運(yùn)行,請(qǐng)嘗試下面的方式來解決泽篮。

拿添加libsqlite3.dylib為例(你可別照本宣科)
1)在項(xiàng)目Target中的Link Binary With Libraries 手動(dòng)添加,
首先點(diǎn)擊 “+” ;

2)顯示搜索添加頁面盗尸,在這里如果搜索之前的libsqlite3.dylib是搜不出來ios9之前的。所以需要點(diǎn)擊 Add Other,出現(xiàn)文件目錄頁面帽撑,正常情況這里也是找不到老的libsqlite3.dylib文件的泼各,因?yàn)檫@個(gè)文件是隱藏掉的。所以需要按快捷鍵 CMD+Shift+G (Go to the folder)亏拉,輸入/usr/lib后扣蜻,進(jìn)入隱藏的界面;

3)然后添加你需要的 *.dylib,如libsqlite3.dylib文件.大功告成


今天先告一段落及塘,我會(huì)繼續(xù)更新莽使,keep moving!給廣大無聊的程序員推薦一個(gè)小游戲笙僚,我最近無聊的時(shí)候在玩芳肌,叫做okay?(你要是在改Bug肋层,當(dāng)我沒說)亿笤。
另外給大家推薦一個(gè)bug收集工具,叫做Bugtags栋猖,我也是偶然在資深開發(fā)者唐巧的微信公眾號(hào)看見的净薛,后來在自己的Demo中體驗(yàn)了一下,感覺小巧實(shí)用掂铐,之后還接到了一個(gè)Bugtags開發(fā)團(tuán)隊(duì)的使用情況回訪電話罕拂,就算幫助他們推廣一下。

更多有關(guān)Bugtags的內(nèi)容請(qǐng)參考以下鏈接:
Bugtags官網(wǎng)
Bugtags博客


更新兩個(gè)使用Swift語言出現(xiàn)的問題

1.新建playground報(bào)錯(cuò)Unable to find execution service for selected run destination

這個(gè)問題參考一下就行了

解決步驟:
1.先關(guān)閉Xcode
2.cd到Xcode所在目錄全陨,并打開終端輸入下面兩行命令
rm-rf~/Library/Developer/CoreSimulator/Devices
killall -9 com.apple.CoreSimulator.CoreSimulatorService

關(guān)于Playground
Playground爆班,有人將它稱呼為“訓(xùn)練場”,它可以讓Swift展示某些腳本語言的特性辱姨。實(shí)際上柿菩,Playground只是提供了一個(gè)可實(shí)時(shí)編譯運(yùn)行并展示的交互式開發(fā)環(huán)境罷了,類似于著名的REPL雨涛。它的這項(xiàng)功能完全借助于LLVM編譯器強(qiáng)大的組織能力枢舶。
目前,Playground只支持Swift語言替久,但是一位歪果仁大神開發(fā)出了一個(gè)可以運(yùn)行OC版本的Playground凉泄,有興趣可以去看看。點(diǎn)我嘍

2.dyld: Library not loaded:@rpath/libswiftCore.dylib

問題描述:真機(jī)測試時(shí)蚯根,出現(xiàn)上述錯(cuò)誤
解決步驟:
1.在工程的Targets中找到Build Setting選項(xiàng)
2.搜索Embedded Content Contains Swift Code項(xiàng)后众,將其設(shè)置為YES

第三次更新

更新兩個(gè)問題,也是在網(wǎng)上搜集的颅拦,解決辦法比較詳細(xì)

1. “Unknown class XXViewController in Interface Builder file.” 問題處理

在靜態(tài)庫中寫了一個(gè)XXViewController類蒂誉,然后在主工程的xib中,將xib的類指定為XXViewController距帅,程序運(yùn)行時(shí)右锨,報(bào)了上述錯(cuò)誤:

其實(shí)這個(gè)問題與Interface Builder無關(guān),最直接的原因還是相關(guān)的symbol沒有從靜態(tài)庫中加載進(jìn)來碌秸。這種問題的處理就是在Target的”Build Setting”–>“Other Link Flags”中加上”-all_load -ObjC”這兩個(gè)標(biāo)識(shí)位绍移,這樣就OK了。

2.關(guān)于Unbalanced calls to begin/end appearance transitions for …問題的處理

當(dāng)某個(gè)業(yè)務(wù)有這么一個(gè)需求讥电,進(jìn)入一個(gè)列表后需要立馬又push一個(gè)web頁面登夫,做一些活動(dòng)的推廣。在iOS 8上允趟,我們的實(shí)現(xiàn)是一切OK的恼策;但到了iOS 7上,就發(fā)現(xiàn)這個(gè)web頁面push不出來了潮剪,同時(shí)控制臺(tái)給了一條警告消息涣楷,即如下:

Unbalanced calls to begin/end appearance transitions for ...
在這種情況下,點(diǎn)擊導(dǎo)航欄中的返回按鈕時(shí)抗碰,直接顯示一個(gè)黑屏狮斗。

我們到stackoverflow上查了一下,有這么一段提示:

occurs when you try and display a new viewcontroller before the current view controller is finished displaying.
意思是說在當(dāng)前視圖控制器完成顯示之前弧蝇,又試圖去顯示一個(gè)新的視圖控制器碳褒。

于是我們?nèi)ヅ挪榇a折砸,果然發(fā)現(xiàn),在viewDidLoad里面去做了次網(wǎng)絡(luò)請(qǐng)求操作沙峻,且請(qǐng)求返回后就去push這個(gè)web活動(dòng)推廣頁睦授。此時(shí),當(dāng)前的視圖控制器可能并未顯示完成(即未完成push操作)摔寨。

Basically you are trying to push two view controllers onto the stack at almost the same time.
解釋如下:
當(dāng)幾乎同時(shí)將兩個(gè)視圖控制器push到當(dāng)前的導(dǎo)航控制器棧中時(shí)去枷,或者同時(shí)pop兩個(gè)不同的視圖控制器,就會(huì)出現(xiàn)不確定的結(jié)果是复。所以我們應(yīng)該確保同一時(shí)間删顶,對(duì)同一個(gè)導(dǎo)航控制器棧只有一個(gè)操作,即便當(dāng)前的視圖控制器正在動(dòng)畫過程中淑廊,也不應(yīng)該再去push或pop一個(gè)新的視圖控制器逗余。

所以最后我們把web活動(dòng)的數(shù)據(jù)請(qǐng)求放到了viewDidAppear里面,并做了些處理季惩,這樣問題就解決了猎荠。
原文鏈接

第四次更新

1.手動(dòng)performSegueWithIdentifier沒有生效的問題

這個(gè)問題是因?yàn)閷?duì)視圖控制對(duì)象的生命周期概念沒有深刻理解,比如說當(dāng)用戶打開應(yīng)用蜀备,判斷用戶是否登陸关摇,如果未登陸,就跳轉(zhuǎn)到登錄頁面這個(gè)情況碾阁。

如果你將判斷用戶是否登陸的語句放到了視圖的viewDidLoad中去输虱,那么這個(gè)方法是不會(huì)生效的。因?yàn)樵趘iewDidLoad中就啟動(dòng)segue的話脂凶,依然會(huì)被后來填充的視圖覆蓋宪睹,要是在視圖加載完成后的viewDidAppear中啟動(dòng)segue,就不會(huì)出現(xiàn)錯(cuò)誤了蚕钦。

轉(zhuǎn)載請(qǐng)注明出處及作者名亭病,謝謝!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
禁止轉(zhuǎn)載嘶居,如需轉(zhuǎn)載請(qǐng)通過簡信或評(píng)論聯(lián)系作者罪帖。
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市邮屁,隨后出現(xiàn)的幾起案子整袁,更是在濱河造成了極大的恐慌,老刑警劉巖佑吝,帶你破解...
    沈念sama閱讀 206,214評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件坐昙,死亡現(xiàn)場離奇詭異,居然都是意外死亡芋忿,警方通過查閱死者的電腦和手機(jī)炸客,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,307評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門疾棵,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人痹仙,你說我怎么就攤上這事是尔。” “怎么了蝶溶?”我有些...
    開封第一講書人閱讀 152,543評(píng)論 0 341
  • 文/不壞的土叔 我叫張陵,是天一觀的道長宣渗。 經(jīng)常有香客問我抖所,道長,這世上最難降的妖魔是什么痕囱? 我笑而不...
    開封第一講書人閱讀 55,221評(píng)論 1 279
  • 正文 為了忘掉前任田轧,我火速辦了婚禮,結(jié)果婚禮上鞍恢,老公的妹妹穿的比我還像新娘傻粘。我一直安慰自己,他們只是感情好帮掉,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,224評(píng)論 5 371
  • 文/花漫 我一把揭開白布弦悉。 她就那樣靜靜地躺著,像睡著了一般蟆炊。 火紅的嫁衣襯著肌膚如雪稽莉。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,007評(píng)論 1 284
  • 那天涩搓,我揣著相機(jī)與錄音污秆,去河邊找鬼。 笑死昧甘,一個(gè)胖子當(dāng)著我的面吹牛良拼,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播充边,決...
    沈念sama閱讀 38,313評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼庸推,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了浇冰?” 一聲冷哼從身側(cè)響起予弧,我...
    開封第一講書人閱讀 36,956評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎湖饱,沒想到半個(gè)月后掖蛤,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,441評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡井厌,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,925評(píng)論 2 323
  • 正文 我和宋清朗相戀三年蚓庭,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了致讥。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,018評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡器赞,死狀恐怖垢袱,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情港柜,我是刑警寧澤请契,帶...
    沈念sama閱讀 33,685評(píng)論 4 322
  • 正文 年R本政府宣布,位于F島的核電站夏醉,受9級(jí)特大地震影響爽锥,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜畔柔,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,234評(píng)論 3 307
  • 文/蒙蒙 一氯夷、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧靶擦,春花似錦腮考、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,240評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至枚粘,卻和暖如春寂纪,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背赌结。 一陣腳步聲響...
    開封第一講書人閱讀 31,464評(píng)論 1 261
  • 我被黑心中介騙來泰國打工捞蛋, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人柬姚。 一個(gè)月前我還...
    沈念sama閱讀 45,467評(píng)論 2 352
  • 正文 我出身青樓拟杉,卻偏偏與公主長得像,于是被迫代替她去往敵國和親量承。 傳聞我的和親對(duì)象是個(gè)殘疾皇子搬设,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,762評(píng)論 2 345

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

  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫、插件撕捍、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 12,022評(píng)論 4 62
  • 有時(shí)候我在想:人與人之間為什么會(huì)產(chǎn)生分歧忧风? 一 觀點(diǎn)不一致默色,意見不能達(dá)成統(tǒng)一。 二 不能明確的闡述你的觀點(diǎn)狮腿,別人得...
    靜謐夜空閱讀 1,585評(píng)論 0 0
  • 楊倩腿宰,焦點(diǎn)講師三期呕诉,漯河,堅(jiān)持分享297天吃度,(2017-10-23) 關(guān)注什么得到什么 今晚上了講師班的...
    溫心怡然閱讀 201評(píng)論 0 0
  • 最近事情比較多甩挫,心情受到影響。人與人的區(qū)別在于脖子以上的部分椿每。想要改變伊者,讀書是一種不錯(cuò)的途徑。另外间护,原生態(tài)家庭的影...
    大心晴閱讀 297評(píng)論 0 0
  • 近幾年兑牡,全網(wǎng)滿屏都是大數(shù)據(jù)央碟,互聯(lián)網(wǎng)税灌,云計(jì)算均函,在前不久的貴陽國際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)上。吸引了近9萬名觀眾觀展菱涤。諸多全球...
    暮秋老人閱讀 256評(píng)論 0 0