1.輸出log日志關(guān)閉
Xcode8運(yùn)行項(xiàng)目之后瓦哎,控制臺(tái)打印了好多l(xiāng)og輸出,根據(jù)如下操作可以關(guān)掉這些log日志,點(diǎn)擊項(xiàng)目Edit Scheme
或者按command + shift + <
快捷鍵。在彈出的窗口中選擇Run ->Arguments -> Environment Variables里添加:Name:OS_ACTIVITY_MODE Value:disable
解決了問(wèn)題之后较曼,是不是趕腳心里舒服多了,亂七八糟的輸出不見(jiàn)了振愿,但是在我們用真機(jī)調(diào)試的時(shí)候捷犹,NSLog也不工作了。我們?cè)谳敵龃翱诳床坏轿覀兿胍娜罩玖恕?/strong>
定義一個(gè)宏即可
#ifdef DEBUG
#define CLLog(format, ...) printf("[%s] %s [第%d行] %s\n", __TIME__, __FUNCTION__, __LINE__, [[NSString stringWithFormat:format, ## __VA_ARGS__] UTF8String]);
#else
#define NSLog(format, ...)
#endif
2.Command +/ 快捷鍵注釋代碼快捷鍵不能用
在終端輸入
sudo /usr/libexec/xpccachectl
重啟電腦即可
3.LaunchScreen.storyboard: The document “(null)” requires Xcode 8.0 or later
1) 打開(kāi)storyboard, 右鍵點(diǎn)擊,點(diǎn)擊source Control - > commit
2)刪除這行代碼:
<capalibility name="documents saved in the Xcode 8 format"> minToolsVersion=8.0/>
3)刪除所有你要用到的storyboard的里面的整個(gè)行代碼,提交.
4)重新運(yùn)行程序,問(wèn)題解決.
同樣, xib文件遇到類似報(bào)錯(cuò),也是這樣解決.
或者:
Xcode8 打開(kāi)StoryBoard冕末,如圖所示,Open in 改為7.X即可:
4.字體變大伏恐,原有的fream需要適配,只能逐一排查啦
5.Nib問(wèn)題:警告
- (void)awakeFromNib {
// Initialization code
}
需要添加:
[super awakeFromNib];
6.系統(tǒng)判斷失效
現(xiàn)在改用:
#define IOS10_OR_LATER ([[[UIDevice currentDevice] systemVersion] compare"10.0" options:NSNumericSearch] != NSOrderedAscending)
7.程序調(diào)用相機(jī)和相冊(cè)程序崩潰Crash
在iOS10中栓霜,如果你的App想要訪問(wèn)用戶的相機(jī)、相冊(cè)横蜒、麥克風(fēng)胳蛮、通訊錄等等權(quán)限,都需要進(jìn)行相關(guān)的配置丛晌,不然會(huì)直接crash.
崩潰日志如下:
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.
- 意思試圖訪問(wèn)安全隱私數(shù)據(jù)仅炊,但是又沒(méi)有相應(yīng)的描述,你必須要包含在info.plist里包含一個(gè)鍵值 NSPhotoLibraryUsageDescription對(duì)應(yīng)的描述澎蛛。
- 其實(shí)上面是iOS10抚垄,蘋果加強(qiáng)了對(duì)隱私數(shù)據(jù)的保護(hù),要對(duì)隱私數(shù)據(jù)權(quán)限做一個(gè)適配iOS10調(diào)用相機(jī)谋逻,訪問(wèn)通訊錄呆馁,訪問(wèn)相冊(cè)等都要在info.plist中加入權(quán)限訪問(wèn)描述,不然之前你們的項(xiàng)目涉及到這些權(quán)限的地方就會(huì)直接crash掉毁兆。
需要在info.plist中添加App需要的一些設(shè)備權(quán)限:
訪問(wèn)藍(lán)牙:NSBluetoothPeripheralUsageDescription
訪問(wèn)日歷:NSCalendarsUsageDescription
相機(jī):NSCameraUsageDescription
相冊(cè):NSPhotoLibraryUsageDescription
通訊錄:NSContactsUsageDescription
始終訪問(wèn)位置:NSLocationAlwaysUsageDescription
位置:NSLocationUsageDescription
在使用期間訪問(wèn)位置:NSLocationWhenInUseUsageDescription
麥克風(fēng):NSMicrophoneUsageDescription
訪問(wèn)媒體資料庫(kù):NSAppleMusicUsageDescription
訪問(wèn)健康分享:NSHealthShareUsageDescription
訪問(wèn)健康更新:NSHealthUpdateUsageDescription
訪問(wèn)運(yùn)動(dòng)與健身:NSMotionUsageDescription
訪問(wèn)提醒事項(xiàng):NSRemindersUsageDescription
8.如果你的項(xiàng)目中使用了MJRefresh浙滤,并且不是最新版本的,就會(huì)直接崩潰:
只要將MJRefresh更新到最新版本就行了气堕。簡(jiǎn)單粗暴
9.在用模擬器進(jìn)行調(diào)試的時(shí)候纺腊,會(huì)莫名的輸出
這個(gè)輸出不影響調(diào)試畔咧,也不影響程序運(yùn)行。
原因:是在這兩個(gè)路徑下有兩個(gè)模擬器包文件揖膜,并且這兩個(gè)包文件中都包含了PhotoLibraryServices文件誓沸,模擬器不知道使用哪個(gè)文件了。在真機(jī)上就不會(huì)出現(xiàn)這種情況壹粟。
解決方法:這兩個(gè)模擬器包文件誰(shuí)都不可以刪除拜隧,刪除誰(shuí)都會(huì)報(bào)錯(cuò),確切的說(shuō)刪除iPhoneSimulator10.0.sdk這個(gè)包文件會(huì)報(bào)錯(cuò)煮寡,另一個(gè)不能在模擬器上運(yùn)行了虹蓄。我得到的結(jié)果是:這可能是模擬器的bug,也可能是我電腦上安裝了兩個(gè)版本的Xcode.所以可以忽略這個(gè)警告.
10.跳轉(zhuǎn)到app內(nèi)的隱私數(shù)據(jù)設(shè)置頁(yè)面
我們知道用戶沒(méi)開(kāi)啟權(quán)限的話要提醒用戶去設(shè)置開(kāi)啟幸撕,所以要跳轉(zhuǎn)到app的隱私數(shù)據(jù)界面薇组。如何調(diào)用呢,可以定義一個(gè)宏方便調(diào)用:
UIKIT_EXTERN NSString *const UIApplicationOpenSettingsURLString
NS_AVAILABLE_IOS(8_0);
//-----------------------系統(tǒng)權(quán)限設(shè)置路徑(iOS8以后適用)--------------
// 設(shè)置url
#define SettingURL [NSURL URLWithString:UIApplicationOpenSettingsURLString]
// 調(diào)到設(shè)置
#define GoToSetting if([[UIApplication sharedApplication] canOpenURL:SettingURL]) { [[UIApplication sharedApplication] openURL:SettingURL];}}
// 去設(shè)置
if (IOS8_OR_LATER) {
GoToSetting;
}
11.真機(jī)調(diào)試問(wèn)題-App installation failed
Xcode 8 無(wú)證書真機(jī)調(diào)試時(shí)免費(fèi)App ID出現(xiàn)的問(wèn)題:
原因:蘋果免費(fèi)App ID只能運(yùn)行2個(gè)應(yīng)用程序,當(dāng)調(diào)試第三個(gè)的時(shí)候就會(huì)報(bào)這個(gè)錯(cuò)誤, 必須把之前的應(yīng)用程序刪除,才能調(diào)試新的
解決方法:連接iPhone 打開(kāi)Xcode--->Window--->Devices刪除不是本次運(yùn)行的應(yīng)用程序即可.
12.***** Assertion failure in -[UIApplication _runWithMainScene:transitionContext:completion:], /BuildRoot/Library/Caches/com.apple.xbs/Sources/UIKit_Sim/UIKit-3505.16/UIApplication.m:3294**
原因:
新的SDK不允許在設(shè)置rootViewController之前做過(guò)于復(fù)雜的操作坐儿,導(dǎo)致在didFinishLaunchingWithOptions 結(jié)束后還沒(méi)有設(shè)置rootViewController
Xcode7需要所有UIWindow必須立即先設(shè)置一個(gè)rootViewController
解決辦法:
先設(shè)置個(gè)rootVIewController 之后重新賦值
UIWindow *window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];
window.rootViewController = [UIViewController new];