Xcode10 的坑
-
多余的同名 plist 文件(說的就是 info.plist)
解決: File -> Workspace Settings -> Project Settings, Build System 修改為 Legacy Build system
plist.pngCocoaPods 很重要!
CocoaPods 很重要!!
CocoaPods 很重要!!!
本著重要事情說三遍原則, 真的建議盡量 CocoaPods 來管理第三方庫. 編譯中發現, pod 進工程的庫即使包含了 info.plist 也不會報錯, 報錯的都是手動拖到工程且含有 info.plist 的庫...
再說個慘痛經歷, 朋友公司的項目, 沒有用 CocoaPods, 手動拖入了20幾個庫... 有一天幫他排除問題, 非常酸爽. 百度報錯信息, 說是有某些庫太老舊了, 需要更新, 但是沒指明是哪個庫, 只能一個個排除. 也不久, 兩個人一起也就搞了一個下午而已(保持微笑) 如果有當初, 如果當初是 pod, 全部更新一下就完事了(保持微笑吧)
- Xcode10:library not found for -lstdc++.6.0.9 臨時解決
百度能得到一大堆方案, 就不細說了. 貼個鏈接, 懶人就不用再百度了, 直接打開吧??
http://www.lxweimin.com/p/76bd060bab34
關于眾多 X 的適配
重構項目, 引導頁沒有記得要 X 的尺寸, 圖片變形. 加了 X 的尺寸后, 又沒有要 XR XSMax 的尺寸, 而且判斷條件只是 if (IS_IPHONE_X)
, 而 IS_IPHONE_X 的定義為
#define IS_IPHONE_X (fabs((double)[[ UIScreen mainScreen ] bounds ].size.height - ( double )812 )== 0)
總而言之, 滿心以為在 XSMax 上跑, 圖片肯定會變形的.
結果很完美啊, 跟在 X 上面一樣完美啊. 莫不是模擬器抽風了? 放了斷點看看
額... 好吧, 啟動頁也沒有做 XSMax 的, 所以 XSMax 默認使用了 X 的啟動圖, XR 也一樣使用了 X 的啟動圖.
之所以看起來適配沒拉伸問題, 是因為剛好幾款 X 的長寬比相差不大, 但是精益求精的話還是建議一一對應所有尺寸.
X: 812 / 375 = 2.16533
XR: 896 / 414 = 2.16425
XSMax: 896 / 414 = 2.16425
附上各種機型需要啟動頁的尺寸
機型 | 圖片尺寸 |
---|---|
XS Max | 1242px × 2688px |
XS & X | 1125px × 2436px |
XR | 828px × 1792px |
iPhone 678 Plus | 1242px × 2208px |
iPhone 678 | 750px × 1334px |
iPhone 5 SE | 640px × 1136px |
上面的尺寸是偷了一下博主的??
https://blog.csdn.net/fangkong0601/article/details/82800065
簡單總結各種 X :
- X 和 XS 尺寸一樣, 分辨率一樣
- XR 和 XSMax 的尺寸是一樣, 但分辨率是不同
- 如果只設置 X 的啟動圖, X 系列的其他款會默認使用 X 的啟動圖
- X XS XSMax 為三倍屏, 使用 @3x
- XR 為二倍屏, 使用 @2x
順便附上判斷各種 iPhone 的代碼
#define kTopBarHeight (IS_IPHONE_X ? 24.0 : 0)
#define kBottomBarHeight (IS_IPHONE_X ? 34.0 : 0)
#define kNavBarHeight (64 + kTopBarHeight)
#define kTabBarHeight (49 + kBottomBarHeight)
#define kContentHeight (kScreenHeight - kNavBarHeight - kBottomBarHeight)
#define IS_IPHONE_4 (fabs((double)[[ UIScreen mainScreen ] bounds ].size.height - ( double )480 )== 0)
#define IS_IPHONE_5 (fabs((double)[[ UIScreen mainScreen ] bounds ].size.height - ( double )568 )== 0)
#define IS_IPHONE_6 (fabs((double)[[ UIScreen mainScreen ] bounds ].size.height - ( double )667 )== 0)
#define IS_IPHONE_6P (fabs((double)[[ UIScreen mainScreen ] bounds ].size.height - ( double )736 )== 0)
#define IS_IPHONE_X ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(1125, 2436), [[UIScreen mainScreen] currentMode].size) : NO)
#define IS_IPHONE_XR ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(828, 1792), [[UIScreen mainScreen] currentMode].size) : NO)
#define IS_IPHONE_XSMAX ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(1242, 2688), [[UIScreen mainScreen] currentMode].size) : NO)
#define kScreenHeight [UIScreen mainScreen].bounds.size.height
#define kScreenWidth [UIScreen mainScreen].bounds.size.width
#define WeakObj(o) autoreleasepool{} __weak typeof(o) o##Weak = o;
#define StrongObj(o) autoreleasepool{} __strong typeof(o) o = o##Weak;