編譯失敗
Bundleid不匹配
如果證書都配置正確了,注意看看Target中是否有Test,Test的id是不是和證書一致。
複製程式碼
no such provisioning profile was found
分別嘗試用以下方法解決:
1.在證書和描述檔案有更新後,需要完全退出Xcode再開啟。
2.前往~/Library/MobileDevice/Provisioning Profiles,刪除描述檔案
3.Window-Devices,右鍵裝置Show Provisioning Profile,刪除描述檔案,刪除依賴這些描述檔案的App。
4.刪除Xcode的Device Data。
5.嘗試證書籤名配置那裡選Don't Code Sign,儲存,然後再選正確的證書。
複製程式碼
library not found for -l
注意檢查Build Settings的Library Search Paths和Other Linker Flags是否殘留有已刪除的庫配置。
複製程式碼
升級Xcode後,就編譯不了
未升級前還好好的專案,升級了Xcode後,就報Undefined symbols for architecture arm64...
嘗試刪除快取Device Data。
Preferences-Locations-Derived Data
下方有行小字顯示了它的路徑,末尾有個小小的右箭頭,點它進入資料夾
然後可以選中全部項,刪掉~~
複製程式碼
Pods的庫升級後編譯不了 或 .a檔案升級更換後編譯不了
清空Device Data。
複製程式碼
internal api error
在ios7真機除錯時,bundleName不能是中文,改為英文即可
複製程式碼
Use of undeclared identifier ‘sqlite_int64'
如果有用到FMDB的話,標頭檔案引入
#if FMDB_SQLITE_STANDALONE
#import <sqlite3/sqlite3.h>
#else
#import <sqlite3.h>
#endif
複製程式碼
Undefined symbols for architecture armv7
有時是因為更新了第三方庫導致的,把xcode的drivedata清除即可
複製程式碼
Xcode選不了模擬器,模擬器不見了
如果Target的SDK編譯版本高於Xcode模擬器支援的SDK版本,模擬器列表就會變成空,只需把Target的SDK版本選低點就好了。
執行中崩潰
[self becomeFirstResponder] 崩潰
成員變數中不可以有叫inputView的變數
Controller的updateViewConstraints崩潰
要先呼叫父類的updateViewConstraints,否則會崩潰
TableHeaderView約束崩潰
iOS7及以下TableHeaderView不可以設定與tableview關聯的約束,否則會crash。 我猜測是headerView由tableView自動管理,如果手動為headerView新增與tableView關聯的約束,會因衝突而crash。 ios8無此問題。
dispatch_semaphore崩潰
當某個dispatch_semaphore_t正處於dispatch_semaphore_wait的時候,釋放這個dispatch_semaphore_t的引用(sema = nil),將會導致崩潰。 示例:
- (void)viewDidLoad {
[super viewDidLoad];
self.sema = dispatch_semaphore_create(0);
// 每隔1秒釋放一個訊號量
NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:1.0 repeats:YES block:^(NSTimer * _Nonnull timer) {
dispatch_semaphore_signal(self.sema);
}];
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
// 模擬10個任務
for (NSInteger index = 1; index <= 10; ++ index) {
// 每個任務都需要等待到有訊號量才能開始
dispatch_semaphore_wait(self.sema, DISPATCH_TIME_FOREVER);
NSLog(@"執行任務%@...", @(index));
}
// 全部任務執行完畢
[timer invalidate];
});
}
- (void)touchesEnded:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {
NSLog(@"touchesEnded");
// crash!
// 當某個dispatch_semaphore_t正處於dispatch_semaphore_wait的時候
// 釋放這個dispatch_semaphore_t的引用,將會導致崩潰
self.sema = nil;
}
複製程式碼
控制檯:
2016-11-22 16:01:50.520 SemaDemo[2990:136781] 執行任務1...
2016-11-22 16:01:51.482 SemaDemo[2990:136781] 執行任務2...
2016-11-22 16:01:52.495 SemaDemo[2990:136781] 執行任務3...
2016-11-22 16:01:53.209 SemaDemo[2990:136725] touchesEnded
複製程式碼
使用技巧
怎麼檢視真機沙盒目錄
開啟Xcode
頂部Window-Devices
儲存到桌面,右鍵顯示包內容就可以看到沙盒目錄了。