不積跬步無以至千里凄吏。再愚蠢的Bug劫窒,也是進步的墊腳石苛秕。
Mac 軟件安裝提示“文件損壞城看,打不開”
文件損壞潘飘,打不開
sudo spctl --master-disable
sudo xattr -d com.apple.quarantine /Applications/Cornerstone.app
i386, x86_64 模擬器乐严;
armv6,armv7 ,armv7s, arm64真機瘤袖。
arm64:iPhone6s | iphone6s plus|iPhone6| iPhone6 plus|iPhone5S | iPad| iPad Mini 2 iPad mini
armv7s:iPhone5|iPhone5C|iPad4(iPad with Retina Display)
armv7:iPhone4|iPhone4S|iPad|iPad2|iPad3(The New iPad)|iPad mini|iPod Touch 3G|iPod Touch4
Architectures 錯誤 靜態(tài)庫不支持armv7架構。
The linked library 'libxxx.a/Framework' is missing one or more architectures required by this target: armv7.
解決方法:在buildsetting將其排除昂验。
Target -> Build Setting -> Exculded Architectures
EXCLUDED_ARCHS__EFFECTIVE_PLATFORM_SUFFIX_simulator__NATIVE_ARCH_64_BIT_x86_64=arm64 arm64e armv7 armv7s armv6 armv8 EXCLUDED_ARCHS=$(inherited) $(EXCLUDED_ARCHS__EFFECTIVE_PLATFORM_SUFFIX_$(EFFECTIVE_PLATFORM_SUFFIX)__NATIVE_ARCH_64_BIT_$(NATIVE_ARCH_64_BIT))
圖片渲染模式
imageWithRenderingMode
:
UIImageRenderingModeAutomatic,
//根據(jù)圖片的使用環(huán)境和所處的繪圖上下文自動調(diào)整渲染模式捂敌。
UIImageRenderingModeAlwaysOriginal,
// 始終繪制圖片原始狀態(tài)
UIImageRenderingModeAlwaysTemplate,
// 始終根據(jù)Tint Color繪制圖片,忽略圖片的顏色信息既琴。
#define strongObj(o) autoreleasepool{} __strong typeof(o) o = o##Weak;
#define weakObj(o) autoreleasepool{} __weak typeof(o) o##Weak = o;
#define kWeakself(type) __weak typeof(type) weak##type = type;
#define kStrongSelf(type) __strong typeof(type) type = weak##type;
導航欄控制器
self.edgesForExtendedLayout = UIRectEdgeNone;//tableview不延展至導航欄下
self.automaticallyAdjustsScrollViewInsets=NO;//默認YES->控件尺寸從導航欄下面開始(滑動tableview可滑動至導航欄下)
info.plist
添加App需要的一些設備權限:
相機NSCameraUsageDescription
相冊NSPhotoLibraryUsageDescription
通訊錄NSContactsUsageDescription
始終訪問位置NSLocationAlwaysUsageDescription
位置NSLocationUsageDescription
在使用期間訪問位置NSLocationWhenInUseUsageDescription
麥克風NSMicrophoneUsageDescription
訪問藍牙NSBluetoothPeripheralUsageDescription
訪問日歷NSCalendarsUsageDescription
訪問媒體資料庫NSAppleMusicUsageDescription
訪問健康分享NSHealthShareUsageDescription
訪問健康更新NSHealthUpdateUsageDescription
訪問運動與健身NSMotionUsageDescription
訪問提醒事項NSRemindersUsageDescription
SVN提交沖突問題
.xcodeproj工程文件沖突占婉,往往是多人同時做了例如增刪文件等行為,那么保存/提交就會出現(xiàn)project.pbxproj文件沖突甫恩,svn就會在文件中加上>>>>> 還有<<<<<來區(qū)分誰做的修改逆济,只要把這個文件用編輯器打開,搜mine到了把這些沖突標記刪除磺箕,將服務器和自己的修改都保留應該就沒事了奖慌。
解決方法如下:
1.右鍵點擊.xcodeproj,選擇顯示包內(nèi)容;
2.雙擊打開project.pbxproj文件;
3.找到類似如下的沖突信息(可用command + F 搜索)
4.刪除
<<<<<< .mine
=======
>>>>>>> .r156
留下下面的:
.... in Resources */,
... in Resources */,
5.保存文件松靡,退出简僧,再打開即可使用。
異步加載網(wǎng)絡圖片
-(void)downloadImageWithUrl:(NSString *)imageDownloadURLStr withImgView:(UIImageView *)_imageView{
__block UIImage *image = [[UIImage alloc] init];
NSURL *imageDownloadURL = [NSURL URLWithString:imageDownloadURLStr];
dispatch_queue_t asynchronousQueue = dispatch_queue_create("imageDownloadQueue", NULL);
dispatch_async(asynchronousQueue, ^{
NSError *error;
NSData *imageData = [NSData dataWithContentsOfURL:imageDownloadURL options:NSDataReadingMappedIfSafe error:&error];
if (imageData) {
image = [UIImage imageWithData:imageData];
}
dispatch_async(dispatch_get_main_queue(), ^{
[_imageView setImage:image]
});
});
}
移除Main.storyboard
- 工程配置中移除關聯(lián)
TARGETS->Deploymeny info 清空Main interface 選項中值 - 移除Main.storyboard關聯(lián)類
點擊Main.storyboard文件 選擇 Show the identity inspector -> Custom Class 清除Class關聯(lián) - 刪除Main.storyboard文件雕欺。
Wordspace 管理多工程 找不到頭文件
- 方法一: Build setting -> User Header Search Paths 添加$(BUILT_PRODUCTS_DIR) 但是不能simulator 與真機隨意切換 項目中直接使用真機 未嘗試simulator岛马,暫未處理。
- 方法二:Build setting -> Header search paths 編輯:../工程名或靜態(tài)庫名 或者 ../../工程名或靜態(tài)庫名阅茶。解決蛛枚。
制作靜態(tài)庫失敗
error: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/libtool: can't locate file for: -lQmyKit
error: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/libtool: file: -lQmyKit is not an object file (not allowed in a library)
- 檢查Library Search Paths 是否正確。
$(PROJECT_DIR)/
設置啟動頁為LaunchImage
- 1.在Assets.xcassets中新建LaunchImage
2.在項目TARGETS->General->App Icons and Launch Images中設置 Launch Images Source 為LaunchImage,并將Launch Screen File 設為空
3.在LaunchImage 添加相應啟動圖片脸哀。
iOS系統(tǒng)升級導致無法真機調(diào)試
倘若你升級的真機系統(tǒng)蹦浦,而Xcode還是舊版本,真機調(diào)試時會出現(xiàn)Could not find Developer Disk Image撞蜂。升級Xcode盲镶,又很慢。Just do it: 進入下面路徑:/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/DeviceSupport
導入你需要的包文件SDK(百度下載)蝌诡。
若還是不行 上官網(wǎng)更新Xcode:https://developer.apple.com/download/
Archives 打包出現(xiàn) Other Items
原因為打包時產(chǎn)生了一些不必要的文件
解決方法:
- 靜態(tài)庫的skip install設置為YES
- 將子項目中Build Phases→Copy Headers中的所有頭文件拉到Project下溉贿,即Public和Private下不能有文件
- 清空Build Settings→Deployment→Installation Directory選項的內(nèi)容
CocoaPods Podfile 文件
platform:ios,'8.0'
target 'AFNetworkingDemo' do
pod 'AFNetworking', '~> 3.0'
end
Ruby:
查看本地ruby資源:gem source -l
查看ruby cocoapods版本 ruby -v
pod --version
https://rubygems.org/
移除https://rubygems.org/替換為https://gems.ruby-china.com/
gem source --remove https://rubygems.org/
gem source --add https://gems.ruby-china.com/
安裝cocospods
sudo gem install cocoapods
代理屬性為何使用weak
代理的銷毀不能由當前遵從協(xié)議的類控制,倘若屬性為strong,則會造成循環(huán)應用浦旱。
刪除數(shù)組中重復對象
NSArray *newArr = [oldArr valueForKeyPath:@“@distinctUnionOfObjects.self"];
顏色轉(zhuǎn)圖片
+ (UIImage *)imageWithColor:(UIColor *)color {
CGRect rect = CGRectMake(0.0f, 0.0f, 1.0f, 1.0f);
UIGraphicsBeginImageContext(rect.size);
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextSetFillColorWithColor(context, [color CGColor]);
CGContextFillRect(context, rect);
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return image;
}
Pod 錯誤
down下來的項目出現(xiàn)以下錯誤時
方法1. 進入項目根目錄 執(zhí)行pod update
||pod install
即可宇色。
diff: /../Podfile.lock: No such file or directory
diff: /Manifest.lock: No such file or directory
error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.
方法2.Build Phases
勾選 Run script only when installing
執(zhí)行延遲函數(shù)
dispatch_time_t delay = dispatch_time(DISPATCH_TIME_NOW, 1*NSEC_PER_SEC);
dispatch_after(delay, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
});
異步下載數(shù)據(jù)
dispatch_queue_t asynchronousQueue = dispatch_queue_create("imageDownloadQueue", NULL);
//創(chuàng)建異步線程
dispatch_async(asynchronousQueue, ^{
//網(wǎng)絡下載圖片 NSData格式
NSError *error;
NSData *imageData = [NSData dataWithContentsOfURL:imageDownloadURL options:NSDataReadingMappedIfSafe error:&error];
if (imageData) {
image = [UIImage imageWithData:imageData];
}
//回到主線程更新UI
dispatch_async(dispatch_get_main_queue(), ^{
[_imageView setImage:image];
[_myActivity stopAnimating];
});
});
CADisplayLink
使用CADisplayLink NStimer繪制頁面時默認RunLoopMode為NSDefaultRunLoopMode。此時主線程中操作某些UI事件(例如UITableview滑動)會造成 NSDefaultRunLoopMode 模式中注冊的事件是不會執(zhí)行,此時mode被切換為NSEventTrackingRunLoopMode宣蠕,若要保證定時器繪制不被影響可選擇NSRunLoopCommonModes模式例隆。
Xcode編譯第三方庫,出現(xiàn)
Undefined symbols for architecture arm64:
"_OBJC_CLASS_$_xxx", referenced from:
原因1.相關工程文件未導入:
處理方式:Build Phase->Compile Sources 添加該庫.m文件抢蚀。
原因2.缺少鏈接靜態(tài)庫:
處理方式:OBJC_CLASS$_xxx 查詢xxx所在的庫并加入镀层。
原因3. 查看.a支持的架構
Valid Architectures 填入對應的armNumber
Xcode升級后聯(lián)想功能失效無法Command類庫處理方法
Xcode->Preferences->Location
進入DerivedData 刪除該文件夾下的內(nèi)容 重啟Xcode。
CADisplayLink和NSTimer的區(qū)別
NSTimer占用系統(tǒng)資源較多
NSTimer使用完后皿曲,一定要銷毀唱逢,把它設置成nil。
CADisplayLink本來就在進程中屋休,每秒進行60次坞古。
核心動畫的時候,最好使用CADisplayLink
防止圖片上傳發(fā)生偏轉(zhuǎn)
+ (UIImage *)fixOrientation:(UIImage *)aImage {
// No-op if the orientation is already correct
if (aImage.imageOrientation == UIImageOrientationUp)
return aImage;
// We need to calculate the proper transformation to make the image upright.
// We do it in 2 steps: Rotate if Left/Right/Down, and then flip if Mirrored.
CGAffineTransform transform = CGAffineTransformIdentity;
switch (aImage.imageOrientation) {
case UIImageOrientationDown:
case UIImageOrientationDownMirrored:
transform = CGAffineTransformTranslate(transform, aImage.size.width, aImage.size.height);
transform = CGAffineTransformRotate(transform, M_PI);
break;
case UIImageOrientationLeft:
case UIImageOrientationLeftMirrored:
transform = CGAffineTransformTranslate(transform, aImage.size.width, 0);
transform = CGAffineTransformRotate(transform, M_PI_2);
break;
case UIImageOrientationRight:
case UIImageOrientationRightMirrored:
transform = CGAffineTransformTranslate(transform, 0, aImage.size.height);
transform = CGAffineTransformRotate(transform, -M_PI_2);
break;
default:
break;
}
switch (aImage.imageOrientation) {
case UIImageOrientationUpMirrored:
case UIImageOrientationDownMirrored:
transform = CGAffineTransformTranslate(transform, aImage.size.width, 0);
transform = CGAffineTransformScale(transform, -1, 1);
break;
case UIImageOrientationLeftMirrored:
case UIImageOrientationRightMirrored:
transform = CGAffineTransformTranslate(transform, aImage.size.height, 0);
transform = CGAffineTransformScale(transform, -1, 1);
break;
default:
break;
}
// Now we draw the underlying CGImage into a new context, applying the transform
// calculated above.
CGContextRef ctx = CGBitmapContextCreate(NULL, aImage.size.width, aImage.size.height,
CGImageGetBitsPerComponent(aImage.CGImage), 0,
CGImageGetColorSpace(aImage.CGImage),
CGImageGetBitmapInfo(aImage.CGImage));
CGContextConcatCTM(ctx, transform);
switch (aImage.imageOrientation) {
case UIImageOrientationLeft:
case UIImageOrientationLeftMirrored:
case UIImageOrientationRight:
case UIImageOrientationRightMirrored:
// Grr...
CGContextDrawImage(ctx, CGRectMake(0,0,aImage.size.height,aImage.size.width), aImage.CGImage);
break;
default:
CGContextDrawImage(ctx, CGRectMake(0,0,aImage.size.width,aImage.size.height), aImage.CGImage);
break;
}
// And now we just create a new UIImage from the drawing context
CGImageRef cgimg = CGBitmapContextCreateImage(ctx);
UIImage *img = [UIImage imageWithCGImage:cgimg];
CGContextRelease(ctx);
CGImageRelease(cgimg);
return img;
}
CALayer中anchorPoint博投、position绸贡、frame關系
- frame中的X,Y表示sublayer左上角相對于supLayer的左上角的距離。
- position中的X,Y表示sublay錨點相對于supLayer的左上角的距離毅哗。
- anchorPoint中的X,Y表示錨點的x,y的相對距離比例值听怕。
當確定錨點,改變frame時, position的值為:
position.x = frame.origin.x + anchorPoint.x * bounds.size.width;
position.y = frame.origin.y + anchorPoint.y * bounds.size.height虑绵;
確定錨點, 改變position時, frame的值為:
frame.origin.x = position.x - anchorPoint.x * bounds.size.width尿瞭;
frame.origin.y = position.y - anchorPoint.y * bounds.size.height;
改變錨點, frame的值變化為
frame.origin.x = - anchorPoint.x * bounds.size.width + position.x翅睛;
frame.origin.y = - anchorPoint.y * bounds.size.height + position.y
設置字體顏色
- (NSMutableAttributedString *)setColorTextStr:(NSString *)title
withTextColor:(UIColor *)colorText
withLabelTitle:(NSString *)content
withTitleColor:(UIColor *)colorContent{
NSString *textContent = [NSString stringWithFormat:@"%@ %@",title,content];
NSRange rangeTitle =[textContent rangeOfString:title];
NSRange rangeContent =[textContent rangeOfString:content];
NSMutableAttributedString *textAttr = [[NSMutableAttributedString alloc]initWithString:textContent];
[textAttr addAttribute:NSForegroundColorAttributeName value:colorText range:rangeTitle];
[textAttr addAttribute:NSForegroundColorAttributeName value:colorContent range:rangeContent];
[textAttr addAttribute:NSFontAttributeName value:[UIFont systemFontOfSize:15] range:NSMakeRange(0,textContent.length)];
return textAttr;
}
Xcode新建工程編譯失敗
Safe Area Layout Guide Before IOS 9.0
處理方式:選中stroyboard ->show the file inspector -> 去掉勾選的Use Safe Area Layout Guide
調(diào)用safari打開鏈接
NSString *textURL = @"https://www.baidu.com/";
NSURL *cleanURL = [NSURL URLWithString:[NSString stringWithFormat:@"%@", textURL]];
[[UIApplication sharedApplication] openURL:cleanURL];
多人開發(fā)打包時出現(xiàn)has iOS Distribution certificate but its private key is not installed
原因在于蘋果規(guī)定.cer證書只能存在一個電腦上声搁,其他開發(fā)者使用時即便從開發(fā)者中心download也是無效的,因此 如果另一臺電腦想要用的話捕发,需要導出為.p12 file 疏旨,安裝到其他電腦上。
關于Debug模式下weak修飾的view正常顯示扎酷,Release模式View無法顯示問題
Debug和Release和內(nèi)存分配和釋放方式是不同的,Debug模式下內(nèi)存會延遲釋放,weak的對象會延遲,但Release下進行了優(yōu)化,所以達到釋放條件會立即釋放檐涝,從而造成weak修飾的view在Release模式下無法正常顯示。調(diào)整為Strong即可法挨。
反射機制:
對于任意一個類谁榜,都能夠知道這個類的都有屬性和方法
對于任意一個對象,都能夠調(diào)用它的任意一個方法和屬性
毒藥與小白鼠
問題:1000瓶水有1瓶水有毒凡纳,老鼠喝一滴24小時后就會死窃植,問最少需要多少只老鼠,以及如何檢測出毒藥荐糜?
1.至少需要10只老鼠巷怜。采用二分法計算小白鼠數(shù)量葛超。
第一次: 將1-500瓶兌在一起喝。
如果老鼠死了延塑,則拿另一只老鼠去品嘗501-725瓶兌的藥水巩掺。否則去喝2-250瓶兌的水。
采用如此二分法页畦,因為2^10>1000 2^9<1000,所以10次就可以找出。
2.取10個燒杯編號1->10
給1000個試劑分別標上如下標簽(10位長度):
0000000001 (第1瓶)
0000000010 (第2瓶)
0000000011 (第3瓶)
……
1111101000 (第1000瓶)
從編號最后1位是1的所有的試劑里面取出1滴混在一起(比如從第一瓶研儒,第三瓶豫缨,。端朵。好芭。里分別取出一滴混在一起)并倒入編號為1的燒杯中。以此類推冲呢,從編號第一位是1的所有的試劑里面取出1滴混在一起并倒入編號為10的燒杯中∩岚埽現(xiàn)在得到有10瓶燒杯編號的混合液,小白鼠排排站敬拓,分別標上10邻薯,9,乘凸。厕诡。。1號营勤,并分別給它們灌上對應號碼的混合液灵嫌。24小時過去了,過來驗尸吧:
從左到右葛作,死了的小白鼠貼上標簽1寿羞,沒死的貼上0,最后得到一個序號赂蠢,把這個序號換成10進制的數(shù)字绪穆,就是有毒的那瓶水的編號。
檢驗一下:假如第一瓶有毒客年,按照0000000001 (第1瓶)霞幅,說明第1號混合液有毒,因此小白鼠的生死符為0000000001(編號為1的小白鼠掛了)量瓜,0000000001二進制標簽轉(zhuǎn)換成十進制=1號瓶有毒司恳;假如第三瓶有毒,0000000011 (第3瓶)绍傲,第1號和第2號混合液有毒扔傅,因此小白鼠的生死符為00000011(編號為1耍共,2的鼠兄弟掛了),0000000011二進制標簽轉(zhuǎn)換成十進制=3號瓶有毒猎塞。
Error: Multiple commands produce
移除Build phase > Copy Bundle Resource 中找到info.plist
Charles 手機安裝好Charles證書仍抓不到https請求
iOS 10.3系統(tǒng)以后试读,需要在 設置→通用→關于本機→證書信任設置啟用完全信任Charles證書。
Charles 配置
Cocoa開發(fā)者社區(qū)
ld: symbol(s) not found for architecture arm64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
這種編譯失敗情況多種
1.重復導入相關文件或頭文件名
2.Other Linker Flags 設置問題:-ObjC ,-all_load
3.缺少必要系統(tǒng)庫荠耽。
IQKeyboardManager 引起電池欄透明
IQUIView+Hierarchy.m文件修改
-(UIViewController*)topMostController 方法中的代碼
-(UIViewController *)topMostController
{
UIViewController *rootController = [UIApplication sharedApplication].keyWindow.rootViewController;
if ([rootController isKindOfClass:[UITabBarController class]]) {
UITabBarController *tabBarController = (UITabBarController *)rootController;
UINavigationController *navController = tabBarController.selectedViewController;
UIViewController *viewController = (UIViewController *)navController.visibleViewController;
while (viewController.presentedViewController) {
viewController = (UIViewController *)viewController.presentedViewController;
}
return viewController;
} else if ([rootController isKindOfClass:[UINavigationController class]]) {
UINavigationController *navController = (UINavigationController *)rootController;
return navController.visibleViewController;
} else if ([rootController isKindOfClass:[UIViewController class]]) {
return rootController;
} else {
return nil;
}
}
Duplicate symbol _kXXX in:
ViewA.o;
ViewB.o;
通常定義常量使用static const 修飾 钩骇,若聲明的kXXX變量不加static 編輯器會默認創(chuàng)建“外部符號”<enternal symbol>,若其他編譯單元存在同名變量kXXX則會導致編譯失敗。
關于Compile Sources AS: Objective C++ 編譯失敗
第三方庫沖突
Other Linker flags 加入 (PODS_ROOT) +$(PODS_ROOT)/第三方庫地址
打包dYSM
Generate Debug Symbols 铝量?NO 不生成
Debug Information Format
DWARF with dSYM File
Xcode Font&Colors ~/Library/Developer/Xcode/UserData/FontAndColorThemes/
libstdc++.6.0.9
path:
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/usr/lib/
關于Xcode10出現(xiàn) Multiple commands produce ??? 'Info.plist' / Target '???' has copy command from ' ??? 'Info.plist' to ??? 'Info.plist'錯誤原因與解決方式
原因:Xcode10取消了對libstdc++6.0.9的支持倘屹,而使用的第三方庫存在仍保持對libstdc++6.0.9的依賴。
解決:將libstdc++6.0.9(上面有路徑)復制一份在該路徑下慢叨。
同時調(diào)整Xcode配置Xcode-->File-->Workspace Settings-->Build System-->Legacy Build System
- Transporter 交付失敗問題排查:
- 避免ipa名稱含中文纽匙;
- 確認Xcode buildsetting ->iOS Deployment Target最低支持版本;
- 確認線上版本是否低于交付版本 build 與version
- 嘗試使用此方法
- Cocoapads pod install 失敗
LibreSSL SSL_connect: SSL_ERROR_SYSCALL in connection to github.com:443
處理方法:
git config --global http.postBuffer 4194304000
wrieshark ios抓包
rvictl -s uuid 添加虛擬網(wǎng)卡接口
rvictl -x uuid 刪除
無權限彈窗終端輸入
sudo /Applications/Wireshark.app/Contents/MacOS/Wireshark
好記性不如爛筆頭拍谐。