一、xcode Build 成功,但是不會運行到模擬器
背景:github 上下載一個開源項目,使用了CocoPods
可以編譯成功,說明代碼是沒有問題的,不能運行到模擬器,應該是沒有選擇正確的 scheme
解決:選擇 “Product” >> “Scheme” >> "Edit Scheme" >> ?左邊 "Run" >> “Info” 選項卡 >> "Executable" >> "你的項目.app"
二、Build warning:?directory not found for option “XXX”
編譯后出現的警告,沒有找到對應的XXX ,這里XXX一般是 Framework 或 Library 的路徑,
一般在打開下載的項目會出現,比如我是在打開微信SDK Demo 時出現的。
解決:在項目 Target 選擇 Build Settings 選項,找到 Search Paths 下的 Library Search Paths 項和Framework Search Paths(可以用搜索功能快速定位),
OK,展開Library Search Paths 的值,可以看到其中就有警告中沒有找到的XXX路徑,刪掉它就行
三、Error '!obj' trying to fetch default input device's sample rate
背景:使用MPMoviePlayerViewController 播放視頻
環境:Mac miniiosSimulator
這個坑爹的問題,是提示你需要給設備插上耳機,準確的說,插上外接的音頻輸出設備。嗯,插在Mac mini 上,就醬紫。
四、Build Error“openssl/asn1.h”file not found
背景:接入支付寶時出現
這個問題說穿了很簡單,“openssl" 整個文件夾代碼都拷貝到項目中,找不到文件是路徑問題
再看下支付寶的集成文檔,里面要提到 在?“Header Search Paths” 增加頭文件路徑:$(SRCROOT)/項目名稱,顯然就是解決這個問題的,
但是注意,這里支付寶Demo 的 openssl 文件夾是放在項目的根目錄的,對應路徑就是?$(SRCROOT)/項目名稱,
你的openssl 文件夾是放在根目錄的么?反正我不是放在這里,所以路徑要根據你的實際情況修改下。
解決:在 “Build Setting” 下 "Header Search Paths" 增加 openssl 文件夾路徑,比如我的路徑是?$(SRCROOT)/項目名稱/library/AliPay
如果有問題,請看下 “五”
其它補充:這里文件找不到,除了路徑問題,還有一個就是?#include<> 和?#include “” 的區別
#include<> ?編譯器會優先在系統庫中查找該文件,一般引用系統庫的時候用<>;
#include “” ? 編譯器優先從項目文件中查找,一般自己寫的文件用 “”
五、Build Error :?Apple Mach-O Linker Error
Build Error :linker command failed with exit code 1 (use -v to see invocation)
網上查了一圈,最有可能的原因有三種,分別如下:
第一種:缺少了 .m 文件的引用,在 “Build Phases" 中的 “Compile Sources" 查看,如果有缺失的.m文件(一般是第三方的文件),添加上去;
第二種:正好和第一種相反,重復引用了相同的文件,請刪除相同的引用;
第三種:缺少了 .framework 或 .a 庫文件的引用,請確保第三方所需要的庫文件已經全部引用,在“Build Phases" 中的 “Link Binary With Libraries" 查看;
除了這三種外,還是其它可能,請參看這里
我是在接入支付寶時出現這個問題,還是和 openssl 有關,查詢 openssl ,發現是用C語言寫的,在IOS中并不能直接使用 openssl 的源碼,是需要編譯成為 .a 庫文件進行使用的!再回頭看下支付寶的demo,里面確實引用了 openssl 編譯出來的兩個庫文件,libssl.a 和?libcrypto.a。
OK,在項目中加入兩個庫文件,編譯通過,知道真相后我的眼淚都要掉下來...
很奇怪為什么要同時引用 openssl 源碼和編譯后的庫文件,缺哪個都有問題?
六、Thread 1:EXC_BAD_ACCESS(code=EXC_I386_GPFLT)
訪問了一塊不屬于你的內存
解決:找到引起錯誤的變量,嘗試修改為其它變量屬性,呃,這塊知識點有待加強
七、Build Error :?apple LLVM 6.1 Error
背景:編譯運行外來項目時出現,應該和項目之前的關聯路徑發生變化有關
解決:有一個簡單粗暴的方法,直接刪除 Targets 下面的 xxxTests,嗯,右鍵后選刪除。
八、iTunes Connect 上傳圖片,提示“無法載入您的文件。請再試一次”
背景:圖片符合要求,出現此問題
解決:確保圖片存儲路徑和圖片名稱不包含中文字符!
九、The iOS 8.2 simulator runtime is not available.
Unable to open liblaunch_sim.dylib. ?Try reinstalling Xcode or the simulator runtime.
背景:升級Xcode 7 后出現這個問題
解決:
方法一:參看這里
復制 liblaunch_sim.dylib 到有問題的模擬器版本上
找到下面的文件,復制
/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
其它模擬器如果有問題,同理替換,路徑都基本一樣的
然而,這個方法并沒有解決我的問題
方法二:
網速好像不錯,我重新下載了模擬器版本,這大概是最愚蠢的解決方案
十、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)
......
背景:導入第三方庫(微信)后編譯失敗。
解決:添加 libc++ 庫即可。
十一、could not launch “XXX” process launch failed security
?背景:Xcode 7.1 真機調試,真機版本9.1
原因?一:包ID匹配而證書不匹配的問題,請確定使用的是開發證書。
解決:切換為正確的開發證書
原因二:9.1下企業應用需要信任開發者描述證書
解決:iphone > 設置 > 通用 > 描述文件 > "你開發用的Apple ID 賬號" > 選擇信任
解決二:Xcode > Window > Devices > 按住“Ctrl"鍵點擊設備,選"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.
設備上安裝了 Bundle identifier 一樣的應用,請先刪除。
十三、交易訂單處理失敗,請稍后再試 ali64
背景:接入支付寶時出現
原因:密鑰問題,商戶公鑰沒有上傳到支付寶,或者商戶密鑰被更換過
RSA密鑰分 公鑰和私鑰,請確保目前項目使用的密鑰和上傳到支付寶的密鑰是配對的。
十四、Archive 過程中出現
archive 后 upload 時出現
iOS7 需要添加iPhone5的啟動圖片支持。Launch Screen File 這個是iOS8后才有的。
十五、Could not find Developer Disk Image
真機測試時出現,Xcode沒有真機對應的包。比如:Xcode7.1 最高支持iOS9.1
解決:更新你的xcode版本,或者拷貝對應的支持包到下面的路徑
[html]view plaincopy
/Applications(應用程序)/Xcode-beta(右鍵顯示包內容)/Contents/Developer/Platforms/iPhoneOS.platform/DeviceSupport
附錄:
十六、An unknown error message 'DeviceLocked', was received from the device.
接上面 “十五”,如果你導入對應的支持包后,比如10.0的支持包,可能出現這個問題
解決:拔掉數據線,重新插入,簡單粗暴。
十七、Upload to app store 過程中出現
1. Archive upload ?failed with error
版本號不對,設置一個比 1.4.3 更高的版本號,
新修改xcode 中的版本號,要比?iTunes Connect 中心 》應用的構建版本 最新版本高。
2. This action could not be completed. Try again. (-22421)
原因:
1. 這個問題一般是Apple iTunes connect 抽風,等一下再試,或者使用 Application Loader 上傳。
2. iTunes connect 沒有找到應用對應的版本號也會出現。比如要上傳的版本是2.0.0 版本,但iTunes connect 還沒創建出2.0.0版本。
十八、點擊狀態欄快速返回頭部 失效
這個功能是系統默認有的,失效可能是當前頁面由多個UITableView組成,系統不知道響應哪一個。
解決:如果是多列表頁面,設置當前使用的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,嘗試更換庫或者關閉 gitcode
二十、iOS10權限適配
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后調用相機、相冊應用直接掛掉。查了下才知道需要加權限使用說明。
解決:在info.plist 文件中加上對應權限使用說明。
[html]view plaincopy
NSAppleMusicUsageDescription
App需要您的同意,才能訪問媒體資料庫
NSBluetoothPeripheralUsageDescription
App需要您的同意,才能訪問藍牙
NSCalendarsUsageDescription
App需要您的同意,才能訪問日歷
NSCameraUsageDescription
App需要您的同意,才能訪問相機
NSHealthShareUsageDescription
App需要您的同意,才能訪問健康分享
NSHealthUpdateUsageDescription
App需要您的同意,才能訪問健康更新
NSLocationAlwaysUsageDescription
App需要您的同意,才能始終訪問位置
NSLocationUsageDescription
App需要您的同意,才能訪問位置
NSLocationWhenInUseUsageDescription
App需要您的同意,才能在使用期間訪問位置
NSMicrophoneUsageDescription
App需要您的同意,才能訪問麥克風
NSMotionUsageDescription
App需要您的同意,才能訪問運動與健身
NSPhotoLibraryUsageDescription
App需要您的同意,才能訪問相冊
NSRemindersUsageDescription
App需要您的同意,才能訪問提醒事項
二十一、Build 安裝到模擬器時 Devices NO Such File Or directory
描述:刪除應用后重新安裝,第一次就可以正常使用,第二次編譯運行后就會報這個問題。
解決:模擬器菜單》hardware 》reboot ?即可
二十二、Failed to load Info.plist from bundle at path......
解決:clear項目,重新運行
二十三、could not attach to pid:
解決:clear 項目,重啟模擬器,重新編譯,再次運行
二十四、pngcrush caught libpng error
解決:
1、確定圖片格式沒有被修改過,比如jpg圖片改后綴名為png,這樣是不行滴;
2、確定圖片是正常生成出來的,不是切圖之類搞出來的;
3、用圖片處理工具重新處理圖片
異常相關
零、設置異常斷點捕獲?Exception Breakpoint
Xcode 打開 Breakpoint 斷點面板,增加一個全局的斷點,這樣可以定位到大部分的異常拋出位置
一、lb: library not found for -| XXX
編譯的時候出現,原因是編譯時找不到需要的庫鏈接
解決:在項目Target 選擇要編譯的 target ,選擇 General 選項,下面有個 “Linked Frameworks and Libraries” , 添加缺失的庫鏈接
其它:如果是lb:library not found for -|Pods.a
說明項目使用CocoaPods作為依賴管理工具,負責管理項目中的第三方開源代碼,libPods.a 是CocoaPods 將所有第三方編譯合成的文件,
當IOS項目使用使用CocoaPods,我們要打開項目工程的是 .xcworkspace 文件,而不是 .xcodeproj 文件,顯然這是個菜鳥問題。
二、Error Domain=NSURLErrorDomain Code=-1005 "The network commection was lost"
背景:模擬器、使用 AFNetworking 請求數據
切換不同網絡連接后會出現
解決:一般重啟模擬器可以解決;如果沒有解決,可以重置模擬器內容
選 IOS Simulator 》Reset Content and Settings 》Reset
三、Error Domain=com.alamofire.error.serialization.response Code=-1016 "Request failed: unacceptable content-type: text/JavaScript"
背景:模擬器、使用 AFNetworking 請求數據
顯然,這是因為請求設置的 content-type 和 服務器返回的 content-type 不相同,服務器用的是?content-type: text/javascript
解決:設置下
[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'
初始化數據后使用 mutableCopy 方法
[objc]view plaincopy
mArray?=?[[userDefaultsobjectForKey:@"test_data"]mutableCopy];
五、[NSNull count]: unrecognized selector sent to instance 0x10d76d4c0
這是個坑爹的問題,查了好久才發現原因
服務器接口返回數據中,有空值,有空值,有空值,重要事情說三遍!
比如服務器返回 {"title":""}
在 oc 中,會轉化為 NSNull 值,而不是一個空的 NSString 字符串
這個和Java轉化為空的String字符串是完全不同的
oc 中,NSNull 值不能賦給其它變量,會報錯
解決:對可能出現空值的地方進行判斷處理,如果可以的話,最好服務器接口不要傳空值,改為一個默認值更佳。
[objc]view plaincopy
if([dictobjectForKey:@"title"]?==?[NSNullnull])?{
NSLog("數據為空");
}
update 2015.08.17
沒有最坑爹,只有更坑爹!我發現有個接口查不到數據居然僅回傳 “[ ]” 這幾個字符!!!寫接口的你過來,看我不打屎你。
這個用上面的方法是不能檢測出來的,因為壓根就沒東西,考慮到正常的接口JSON都是字典類型,改為下面的方法判斷:
[objc]view plaincopy
if([respObjisKindOfClass:[NSArrayclass]])?{
NSLog(@"無數據");
}
顯然,“[ ]” 轉為數組,“{ }” 轉為字典。
六、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 時出現,問題出在 section 和 rows 數量與界面中的數量不符,比如:數據中存在 section=2,rows=2,但界面中沒有這個分組(行),這時候對該組(行)進行操作就會出現異常。
常發生在 insertRowsAtIndexPaths 和 deleteRowsAtIndexPaths 以及 刷新 tableView數據源后。
解決:保持界面與數據源同步
七、unknown type name 'CGFloat'
No type or protocol named 'UITableViewDataSource'
導入?#import
這種類似問題一律導入 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 請求數據
原因:一般是服務器返回的數據格式有問題(不是JSON?格式)
解決:
需要確定到底是返回什么樣的數據,然后才能正確的解決問題
[objc]view plaincopy
afManager?=?[AFHTTPRequestOperationManagermanager];
//?使用?AFHTTPRequestSerializer/AFHTTPResponseSerizlizer?替換?AFJSONRequestSerializer/AFJSONResponseSerializer
afManager.requestSerializer=?[AFHTTPRequestSerializerserializer];
afManager.responseSerializer=?[AFHTTPResponseSerializerserializer];
[afManagerGET:@"you?url"parameters:nilsuccess:^(AFHTTPRequestOperation*operation,idrespObj)?{
//?將獲取到的數據轉為字符串輸出
NSData*data?=?respObj;
NSString*resultString?=??[[NSStringalloc]initWithData:dataencoding:NSUTF8StringEncoding];
NSLog(@"resultString?=?%@",?resultString);
}failure:^(AFHTTPRequestOperation*operation,NSError*error)?{
NSLog(@"error:?%@",?error);
}];
OK,看下輸出的結果是什么,再做進一步操作。
比如我打印出來的數據是一個網頁的HTML代碼,說明接口有問題的,聯系后臺的同事修改。
(補充:這個接口在網頁端返回的是JSON數據;在移動端用IOS源生NSMutableURLRequest 請求也返回JSON數據;用AFNetworking 返回網頁;
經查:是后臺過濾器問題,默認將移動端請求導到某個頁面)
如果返回的不是JSON,是字符串數據,可以用上面的方法,轉為字符串再進一步處理。
或者嘗試使用下面方法
[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. 導入庫 ?MobileCoreServices.framework
2. 引用 import
[objc]view plaincopy
#import?