一蚕钦、xcode Build 成功,但是不會運(yùn)行到模擬器
背景:github 上下載一個(gè)開源項(xiàng)目,使用了CocoPods
可以編譯成功,說明代碼是沒有問題的人灼,不能運(yùn)行到模擬器,應(yīng)該是沒有選擇正確的 scheme
解決:選擇 “Product” >> “Scheme” >> "Edit Scheme" >> ?左邊 "Run" >> “Info” 選項(xiàng)卡 >> "Executable" >> "你的項(xiàng)目.app"
二婆咸、Build warning:?directory not found for option “XXX”
編譯后出現(xiàn)的警告唉铜,沒有找到對應(yīng)的XXX ,這里XXX一般是 Framework 或 Library 的路徑菠红,
一般在打開下載的項(xiàng)目會出現(xiàn)第岖,比如我是在打開微信SDK Demo 時(shí)出現(xiàn)的。
解決:在項(xiàng)目 Target 選擇 Build Settings 選項(xiàng)途乃,找到 Search Paths 下的 Library Search Paths 項(xiàng)和Framework Search Paths(可以用搜索功能快速定位)绍傲,
OK,展開Library Search Paths 的值耍共,可以看到其中就有警告中沒有找到的XXX路徑烫饼,刪掉它就行
三、Error '!obj' trying to fetch default input device's sample rate
背景:使用MPMoviePlayerViewController 播放視頻
環(huán)境:Mac miniiosSimulator
這個(gè)坑爹的問題试读,是提示你需要給設(shè)備插上耳機(jī)杠纵,準(zhǔn)確的說,插上外接的音頻輸出設(shè)備钩骇。嗯比藻,插在Mac mini 上,就醬紫倘屹。
四银亲、Build Error“openssl/asn1.h”file not found
背景:接入支付寶時(shí)出現(xiàn)
這個(gè)問題說穿了很簡單,“openssl" 整個(gè)文件夾代碼都拷貝到項(xiàng)目中纽匙,找不到文件是路徑問題
再看下支付寶的集成文檔务蝠,里面要提到 在?“Header Search Paths” 增加頭文件路徑:$(SRCROOT)/項(xiàng)目名稱,顯然就是解決這個(gè)問題的烛缔,
但是注意馏段,這里支付寶Demo 的 openssl 文件夾是放在項(xiàng)目的根目錄的,對應(yīng)路徑就是?$(SRCROOT)/項(xiàng)目名稱践瓷,
你的openssl 文件夾是放在根目錄的么院喜?反正我不是放在這里,所以路徑要根據(jù)你的實(shí)際情況修改下晕翠。
解決:在 “Build Setting” 下 "Header Search Paths" 增加 openssl 文件夾路徑喷舀,比如我的路徑是?$(SRCROOT)/項(xiàng)目名稱/library/AliPay
如果有問題,請看下 “五”
其它補(bǔ)充:這里文件找不到,除了路徑問題元咙,還有一個(gè)就是?#include<> 和?#include “” 的區(qū)別
#include<> ?編譯器會優(yōu)先在系統(tǒng)庫中查找該文件梯影,一般引用系統(tǒng)庫的時(shí)候用<>;
#include “” ? 編譯器優(yōu)先從項(xiàng)目文件中查找庶香,一般自己寫的文件用 “”
五甲棍、Build Error :?Apple Mach-O Linker Error
Build Error :linker command failed with exit code 1 (use -v to see invocation)
網(wǎng)上查了一圈,最有可能的原因有三種赶掖,分別如下:
第一種:缺少了 .m 文件的引用感猛,在 “Build Phases" 中的 “Compile Sources" 查看,如果有缺失的.m文件(一般是第三方的文件)奢赂,添加上去陪白;
第二種:正好和第一種相反,重復(fù)引用了相同的文件膳灶,請刪除相同的引用咱士;
第三種:缺少了 .framework 或 .a 庫文件的引用,請確保第三方所需要的庫文件已經(jīng)全部引用轧钓,在“Build Phases" 中的 “Link Binary With Libraries" 查看序厉;
除了這三種外,還是其它可能毕箍,請參看這里
我是在接入支付寶時(shí)出現(xiàn)這個(gè)問題弛房,還是和 openssl 有關(guān),查詢 openssl 而柑,發(fā)現(xiàn)是用C語言寫的文捶,在IOS中并不能直接使用 openssl 的源碼,是需要編譯成為 .a 庫文件進(jìn)行使用的媒咳!再回頭看下支付寶的demo粹排,里面確實(shí)引用了 openssl 編譯出來的兩個(gè)庫文件,libssl.a 和?libcrypto.a涩澡。
OK恨搓,在項(xiàng)目中加入兩個(gè)庫文件,編譯通過筏养,知道真相后我的眼淚都要掉下來...
很奇怪為什么要同時(shí)引用 openssl 源碼和編譯后的庫文件,缺哪個(gè)都有問題常拓?
六渐溶、Thread 1:EXC_BAD_ACCESS(code=EXC_I386_GPFLT)
訪問了一塊不屬于你的內(nèi)存
解決:找到引起錯(cuò)誤的變量,嘗試修改為其它變量屬性弄抬,呃茎辐,這塊知識點(diǎn)有待加強(qiáng)
七、Build Error :?apple LLVM 6.1 Error
背景:編譯運(yùn)行外來項(xiàng)目時(shí)出現(xiàn),應(yīng)該和項(xiàng)目之前的關(guān)聯(lián)路徑發(fā)生變化有關(guān)
解決:有一個(gè)簡單粗暴的方法拖陆,直接刪除 Targets 下面的 xxxTests弛槐,嗯,右鍵后選刪除依啰。
八乎串、iTunes Connect 上傳圖片,提示“無法載入您的文件速警。請?jiān)僭囈淮巍?/b>
背景:圖片符合要求叹誉,出現(xiàn)此問題
解決:確保圖片存儲路徑和圖片名稱不包含中文字符!
九闷旧、The iOS 8.2 simulator runtime is not available.
Unable to open liblaunch_sim.dylib. ?Try reinstalling Xcode or the simulator runtime.
背景:升級Xcode 7 后出現(xiàn)這個(gè)問題
解決:
方法一:參看這里
復(fù)制 liblaunch_sim.dylib 到有問題的模擬器版本上
找到下面的文件长豁,復(fù)制
/Applications/Xcode-beta.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator.sdk/usr/lib/system/host/liblaunch_sim.dylib
替換下面的文件
/Library/Developer/CoreSimulator/Profiles/Runtimes/iOS 8.2.simruntime/Contents/Resources/RuntimeRoot/usr/lib/system/host/liblaunch_sim.dylib
其它模擬器如果有問題,同理替換忙灼,路徑都基本一樣的
然而匠襟,這個(gè)方法并沒有解決我的問題
方法二:
網(wǎng)速好像不錯(cuò),我重新下載了模擬器版本该园,這大概是最愚蠢的解決方案
十酸舍、Undefined symbols for architecture x86_64: "operator delete[](void*)", referenced from:
[objc]view plaincopy
Undefined?symbolsforarchitecturex86_64:
"operator?delete[](void*)",?referencedfrom:
+[WeChatApiUtilEncodeBase64:]?in?libWeChatSDK.a(WeChatApiUtil.o)
+[WeChatApiUtilNsDataEncodeBase64:]?in?libWeChatSDK.a(WeChatApiUtil.o)
+[WeChatApiUtilDecodeWithBase64:]?in?libWeChatSDK.a(WeChatApiUtil.o)
+[WeChatApiUtilDecodeBase64:]?in?libWeChatSDK.a(WeChatApiUtil.o)
......
背景:導(dǎo)入第三方庫(微信)后編譯失敗。
解決:添加 libc++ 庫即可爬范。
十一父腕、could not launch “XXX” process launch failed security
?背景:Xcode 7.1 真機(jī)調(diào)試,真機(jī)版本9.1
原因?一:包ID匹配而證書不匹配的問題青瀑,請確定使用的是開發(fā)證書璧亮。
解決:切換為正確的開發(fā)證書
原因二:9.1下企業(yè)應(yīng)用需要信任開發(fā)者描述證書
解決:iphone > 設(shè)置 > 通用 > 描述文件 > "你開發(fā)用的Apple ID 賬號" > 選擇信任
解決二:Xcode > Window > Devices > 按住“Ctrl"鍵點(diǎn)擊設(shè)備,選"Show Provisioning Profiles" > 刪除全部
十二斥难、This application's application-identifier entitlement does not match that of the installed application. These values must match for an upgrade to be allowed.
設(shè)備上安裝了 Bundle identifier 一樣的應(yīng)用枝嘶,請先刪除。
十三哑诊、交易訂單處理失敗群扶,請稍后再試 ali64
背景:接入支付寶時(shí)出現(xiàn)
原因:密鑰問題,商戶公鑰沒有上傳到支付寶镀裤,或者商戶密鑰被更換過
RSA密鑰分 公鑰和私鑰竞阐,請確保目前項(xiàng)目使用的密鑰和上傳到支付寶的密鑰是配對的。
十四暑劝、Archive 過程中出現(xiàn)
archive 后 upload 時(shí)出現(xiàn)
iOS7 需要添加iPhone5的啟動圖片支持骆莹。Launch Screen File 這個(gè)是iOS8后才有的。
十五担猛、Could not find Developer Disk Image
真機(jī)測試時(shí)出現(xiàn)幕垦,Xcode沒有真機(jī)對應(yīng)的包丢氢。比如:Xcode7.1 最高支持iOS9.1
解決:更新你的xcode版本,或者拷貝對應(yīng)的支持包到下面的路徑
[html]view plaincopy
/Applications(應(yīng)用程序)/Xcode-beta(右鍵顯示包內(nèi)容)/Contents/Developer/Platforms/iPhoneOS.platform/DeviceSupport
附錄:
十六先改、An unknown error message 'DeviceLocked', was received from the device.
接上面 “十五”疚察,如果你導(dǎo)入對應(yīng)的支持包后,比如10.0的支持包仇奶,可能出現(xiàn)這個(gè)問題
解決:拔掉數(shù)據(jù)線貌嫡,重新插入,簡單粗暴猜嘱。
十七衅枫、Upload to app store 過程中出現(xiàn)
1. Archive upload ?failed with error
版本號不對,設(shè)置一個(gè)比 1.4.3 更高的版本號朗伶,
新修改xcode 中的版本號弦撩,要比?iTunes Connect 中心 》應(yīng)用的構(gòu)建版本 最新版本高。
2. This action could not be completed. Try again. (-22421)
原因:
1. 這個(gè)問題一般是Apple iTunes connect 抽風(fēng)论皆,等一下再試益楼,或者使用 Application Loader 上傳。
2. iTunes connect 沒有找到應(yīng)用對應(yīng)的版本號也會出現(xiàn)点晴。比如要上傳的版本是2.0.0 版本感凤,但iTunes connect 還沒創(chuàng)建出2.0.0版本。
十八粒督、點(diǎn)擊狀態(tài)欄快速返回頭部 失效
這個(gè)功能是系統(tǒng)默認(rèn)有的陪竿,失效可能是當(dāng)前頁面由多個(gè)UITableView組成,系統(tǒng)不知道響應(yīng)哪一個(gè)屠橄。
解決:如果是多列表頁面族跛,設(shè)置當(dāng)前使用的UITableView.scrollToTop = YES,其它為NO锐墙。
十九礁哄、Archive failed
.bundle.ltGJwQ/01 for architecture arm64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
一般是第三方庫的問題,可能它沒有支持gitcode溪北,嘗試更換庫或者關(guān)閉 gitcode
二十桐绒、iOS10權(quán)限適配
This app has crashed because it attempted to access privacy-sensitive data without a usage description. The app's Info.plist must contain an NSPhotoLibraryUsageDescription key with a string value explaining to the user how the app uses this data.
背景:iOS10后調(diào)用相機(jī)、相冊應(yīng)用直接掛掉之拨。查了下才知道需要加權(quán)限使用說明茉继。
解決:在info.plist 文件中加上對應(yīng)權(quán)限使用說明。
[html]view plaincopy
NSAppleMusicUsageDescription
App需要您的同意,才能訪問媒體資料庫
NSBluetoothPeripheralUsageDescription
App需要您的同意,才能訪問藍(lán)牙
NSCalendarsUsageDescription
App需要您的同意,才能訪問日歷
NSCameraUsageDescription
App需要您的同意,才能訪問相機(jī)
NSHealthShareUsageDescription
App需要您的同意,才能訪問健康分享
NSHealthUpdateUsageDescription
App需要您的同意,才能訪問健康更新
NSLocationAlwaysUsageDescription
App需要您的同意,才能始終訪問位置
NSLocationUsageDescription
App需要您的同意,才能訪問位置
NSLocationWhenInUseUsageDescription
App需要您的同意,才能在使用期間訪問位置
NSMicrophoneUsageDescription
App需要您的同意,才能訪問麥克風(fēng)
NSMotionUsageDescription
App需要您的同意,才能訪問運(yùn)動與健身
NSPhotoLibraryUsageDescription
App需要您的同意,才能訪問相冊
NSRemindersUsageDescription
App需要您的同意,才能訪問提醒事項(xiàng)
二十一蚀乔、Build 安裝到模擬器時(shí) Devices NO Such File Or directory
描述:刪除應(yīng)用后重新安裝烁竭,第一次就可以正常使用,第二次編譯運(yùn)行后就會報(bào)這個(gè)問題乙墙。
解決:模擬器菜單》hardware 》reboot ?即可
二十二颖变、Failed to load Info.plist from bundle at path......
解決:clear項(xiàng)目,重新運(yùn)行
二十三听想、could not attach to pid:
解決:clear 項(xiàng)目腥刹,重啟模擬器,重新編譯汉买,再次運(yùn)行
二十四衔峰、pngcrush caught libpng error
解決:
1、確定圖片格式?jīng)]有被修改過蛙粘,比如jpg圖片改后綴名為png垫卤,這樣是不行滴;
2出牧、確定圖片是正常生成出來的穴肘,不是切圖之類搞出來的;
3舔痕、用圖片處理工具重新處理圖片
異常相關(guān)
零评抚、設(shè)置異常斷點(diǎn)捕獲?Exception Breakpoint
Xcode 打開 Breakpoint 斷點(diǎn)面板,增加一個(gè)全局的斷點(diǎn)伯复,這樣可以定位到大部分的異常拋出位置
一慨代、lb: library not found for -| XXX
編譯的時(shí)候出現(xiàn),原因是編譯時(shí)找不到需要的庫鏈接
解決:在項(xiàng)目Target 選擇要編譯的 target 啸如,選擇 General 選項(xiàng)侍匙,下面有個(gè) “Linked Frameworks and Libraries” , 添加缺失的庫鏈接
其它:如果是lb:library not found for -|Pods.a
說明項(xiàng)目使用CocoaPods作為依賴管理工具,負(fù)責(zé)管理項(xiàng)目中的第三方開源代碼叮雳,libPods.a 是CocoaPods 將所有第三方編譯合成的文件想暗,
當(dāng)IOS項(xiàng)目使用使用CocoaPods,我們要打開項(xiàng)目工程的是 .xcworkspace 文件债鸡,而不是 .xcodeproj 文件江滨,顯然這是個(gè)菜鳥問題。
二厌均、Error Domain=NSURLErrorDomain Code=-1005 "The network commection was lost"
背景:模擬器唬滑、使用 AFNetworking 請求數(shù)據(jù)
切換不同網(wǎng)絡(luò)連接后會出現(xiàn)
解決:一般重啟模擬器可以解決;如果沒有解決棺弊,可以重置模擬器內(nèi)容
選 IOS Simulator 》Reset Content and Settings 》Reset
三晶密、Error Domain=com.alamofire.error.serialization.response Code=-1016 "Request failed: unacceptable content-type: text/JavaScript"
背景:模擬器、使用 AFNetworking 請求數(shù)據(jù)
顯然模她,這是因?yàn)檎埱笤O(shè)置的 content-type 和 服務(wù)器返回的 content-type 不相同稻艰,服務(wù)器用的是?content-type: text/javascript
解決:設(shè)置下
[objc]view plaincopy
afManager.responseSerializer.acceptableContentTypes=?[NSSetsetWithObject:@"text/javascript"];
四、Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: '-[__NSCFArray replaceObjectAtIndex:withObject:]: mutating method sent to immutable object'
初始化數(shù)據(jù)后使用 mutableCopy 方法
[objc]view plaincopy
mArray?=?[[userDefaultsobjectForKey:@"test_data"]mutableCopy];
五侈净、[NSNull count]: unrecognized selector sent to instance 0x10d76d4c0
這是個(gè)坑爹的問題尊勿,查了好久才發(fā)現(xiàn)原因
服務(wù)器接口返回?cái)?shù)據(jù)中僧凤,有空值,有空值元扔,有空值躯保,重要事情說三遍!
比如服務(wù)器返回 {"title":""}
在 oc 中澎语,會轉(zhuǎn)化為 NSNull 值途事,而不是一個(gè)空的 NSString 字符串
這個(gè)和Java轉(zhuǎn)化為空的String字符串是完全不同的
oc 中,NSNull 值不能賦給其它變量擅羞,會報(bào)錯(cuò)
解決:對可能出現(xiàn)空值的地方進(jìn)行判斷處理尸变,如果可以的話,最好服務(wù)器接口不要傳空值减俏,改為一個(gè)默認(rèn)值更佳召烂。
[objc]view plaincopy
if([dictobjectForKey:@"title"]?==?[NSNullnull])?{
NSLog("數(shù)據(jù)為空");
}
update 2015.08.17
沒有最坑爹,只有更坑爹垄懂!我發(fā)現(xiàn)有個(gè)接口查不到數(shù)據(jù)居然僅回傳 “[ ]” 這幾個(gè)字符F锞А!草慧!寫接口的你過來桶蛔,看我不打屎你。
這個(gè)用上面的方法是不能檢測出來的漫谷,因?yàn)閴焊蜎]東西仔雷,考慮到正常的接口JSON都是字典類型,改為下面的方法判斷:
[objc]view plaincopy
if([respObjisKindOfClass:[NSArrayclass]])?{
NSLog(@"無數(shù)據(jù)");
}
顯然舔示,“[ ]” 轉(zhuǎn)為數(shù)組碟婆,“{ }” 轉(zhuǎn)為字典。
六惕稻、Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'attempt to delete row 0 from section 0 which only contains 0 rows before the update'
使用 UITableView 時(shí)出現(xiàn)竖共,問題出在 section 和 rows 數(shù)量與界面中的數(shù)量不符,比如:數(shù)據(jù)中存在 section=2,rows=2俺祠,但界面中沒有這個(gè)分組(行)公给,這時(shí)候?qū)υ摻M(行)進(jìn)行操作就會出現(xiàn)異常。
常發(fā)生在 insertRowsAtIndexPaths 和 deleteRowsAtIndexPaths 以及 刷新 tableView數(shù)據(jù)源后蜘渣。
解決:保持界面與數(shù)據(jù)源同步
七淌铐、unknown type name 'CGFloat'
No type or protocol named 'UITableViewDataSource'
導(dǎo)入?#import
這種類似問題一律導(dǎo)入 kit
八、Error Domain=NSCocoaErrorDomain Code=3840 "The operation couldn’t be completed. (Cocoa error 3840.)" (JSON text did not start with array or object and option to allow fragments not set.) UserInfo=0x7faad1f2b8b0 {NSDebugDescription=JSON text did not start with array or object and option to allow fragments not set.}
背景:?模擬器蔫缸、使用 AFNetworking 請求數(shù)據(jù)
原因:一般是服務(wù)器返回的數(shù)據(jù)格式有問題(不是JSON?格式)
解決:
需要確定到底是返回什么樣的數(shù)據(jù)腿准,然后才能正確的解決問題
[objc]view plaincopy
afManager?=?[AFHTTPRequestOperationManagermanager];
//?使用?AFHTTPRequestSerializer/AFHTTPResponseSerizlizer?替換?AFJSONRequestSerializer/AFJSONResponseSerializer
afManager.requestSerializer=?[AFHTTPRequestSerializerserializer];
afManager.responseSerializer=?[AFHTTPResponseSerializerserializer];
[afManagerGET:@"you?url"parameters:nilsuccess:^(AFHTTPRequestOperation*operation,idrespObj)?{
//?將獲取到的數(shù)據(jù)轉(zhuǎn)為字符串輸出
NSData*data?=?respObj;
NSString*resultString?=??[[NSStringalloc]initWithData:dataencoding:NSUTF8StringEncoding];
NSLog(@"resultString?=?%@",?resultString);
}failure:^(AFHTTPRequestOperation*operation,NSError*error)?{
NSLog(@"error:?%@",?error);
}];
OK,看下輸出的結(jié)果是什么拾碌,再做進(jìn)一步操作吐葱。
比如我打印出來的數(shù)據(jù)是一個(gè)網(wǎng)頁的HTML代碼街望,說明接口有問題的,聯(lián)系后臺的同事修改弟跑。
(補(bǔ)充:這個(gè)接口在網(wǎng)頁端返回的是JSON數(shù)據(jù)它匕;在移動端用IOS源生NSMutableURLRequest 請求也返回JSON數(shù)據(jù);用AFNetworking 返回網(wǎng)頁窖认;
經(jīng)查:是后臺過濾器問題,默認(rèn)將移動端請求導(dǎo)到某個(gè)頁面)
如果返回的不是JSON告希,是字符串?dāng)?shù)據(jù)扑浸,可以用上面的方法,轉(zhuǎn)為字符串再進(jìn)一步處理燕偶。
或者嘗試使用下面方法
[objc]view plaincopy
afManager.requestSerializer=?[AFHTTPRequestSerializerserializer];
AFJSONResponseSerializer*jsonResponseSerializer?=?[AFJSONResponseSerializerserializerWithReadingOptions:NSJSONReadingAllowFragments];
jsonResponseSerializer.acceptableContentTypes=?[NSSetsetWithObject:@"text/html"];
afManager.responseSerializer=?jsonResponseSerializer;
參看這里
http://stackoverflow.com/questions/27915879/apns-error-domain-nscocoaerrordomain-code-3840
九喝噪、use of undeclared identifier KUTTypeImage
解決:
1. 導(dǎo)入庫 ?MobileCoreServices.framework
2. 引用 import
[objc]view plaincopy
#import?