1校套、在打包的時(shí)候報(bào)錯(cuò)“Code signing is required for product type 'Application' in SDK 'iOS 10.2'”
開(kāi)發(fā)者賬號(hào)選的不對(duì)趴久。
2、應(yīng)用會(huì)彈出“可能會(huì)使iPhone變慢”
這個(gè)是由于沒(méi)有支持64位系統(tǒng)搔确。具體做法,
關(guān)于Xcode “Build Setting”中的Architectures參數(shù)問(wèn)題
Architectures:你想支持的指令集。(支持指令集是通過(guò)編譯生成對(duì)應(yīng)的
二進(jìn)制數(shù)據(jù)包實(shí)現(xiàn)的膳算,如果支持的指令集數(shù)目有多個(gè)座硕,就會(huì)編譯出包含多
個(gè)指令集代碼的數(shù)據(jù)包,造成最終編譯的包很大涕蜂。)
Valid architectures:即將編譯的指令集华匾。(Valid architectures 和 Architecture兩個(gè)集合的交
集為最終編譯生成的版本)
Build Active Architecture Only:是否只編譯當(dāng)前設(shè)備適用的指令集(如果這個(gè)參數(shù)設(shè)為YES,
使用iPhone 6調(diào)試机隙,那么最終生成的一個(gè)支持ARM64指令集的Binary蜘拉。一般在DEBUG模式下設(shè)
為YES,RELEASE設(shè)為NO)
3有鹿、設(shè)置navigation bar 背景透明
//設(shè)置navigationbar 背景透明
UINavigationBar *bar = self.navigationBar;
[bar setTintColor:COLORRGB(53, 53, 53, 1.0)];
bar.translucent = YES;
UIColor *color = [UIColor clearColor];
CGRect rect = CGRectMake(0, 0, UIScreen_Width, 64);
UIGraphicsBeginImageContext(rect.size);
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextSetFillColorWithColor(context, color.CGColor);
CGContextFillRect(context, rect);
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
[bar setBackgroundImage:image forBarMetrics:UIBarMetricsDefault];
4旭旭、選擇配置文件進(jìn)行打包時(shí)發(fā)現(xiàn)配置文件無(wú)效(ineligible)
? ? ? ? 昨晚準(zhǔn)備用家里mac進(jìn)行app上架,從開(kāi)發(fā)者中心上面下載的開(kāi)發(fā)證書(shū)和對(duì)應(yīng)的配置文件葱跋,發(fā)現(xiàn)配置文件竟然是ineligible 狀態(tài)持寄,嘗試Archive后報(bào)錯(cuò),提示我在本地沒(méi)有對(duì)應(yīng)的開(kāi)發(fā)證書(shū)娱俺。然后百度了一下才發(fā)現(xiàn)稍味,需要公司里的mac上面的開(kāi)發(fā)者證書(shū)導(dǎo)出p12文件分發(fā)給其他的電腦使用,配置文件才可用荠卷。后來(lái)無(wú)奈只能重新生成證書(shū)和配置文件進(jìn)行上架模庐。
5、Xcode 自帶的Application Loaders 無(wú)法登陸
? ? ? ? 上架時(shí)用Application Loaders 上傳安裝包油宜,卻發(fā)現(xiàn)無(wú)法登陸掂碱,明明輸入了正確的密碼卻提示我無(wú)法登陸,簡(jiǎn)直懷疑人生验庙。后來(lái)我發(fā)現(xiàn)原來(lái)是我的開(kāi)發(fā)者賬號(hào)開(kāi)啟了雙向驗(yàn)證顶吮。關(guān)閉了該功能以后秒登錄。雖然我承認(rèn)蘋(píng)果對(duì)于賬號(hào)安全方面做得工作很足粪薛,但是開(kāi)發(fā)工具不支持某些安全功能悴了,第一次遇到不明就里的人真的很讓人頭疼啊。
6违寿、中英文切換時(shí)需注意的地方
? ? ? 如果創(chuàng)建.strings文件是自定義的名字的話湃交,如當(dāng)前我起名為 Internation.strings,那么調(diào)用的方式為:
NSLocalizedStringFromTable(@”title”,@”Internation”, nil)
NSLocalizedStringFromTable(@”name”,@”Internation”, nil)
當(dāng)自定義名字后,使用NSLocalizedString的方式不起作用藤巢,這里要特別注意搞莺,注意,注意5嘀洹2挪住迈喉!(重要的說(shuō)三遍);
7温圆、The 'Pods-XXX' target has libraries with conflicting names: libcrypto.a and libssl.a.
? ? ? 最近在項(xiàng)目中接入Alink的SDK的時(shí)候發(fā)現(xiàn)導(dǎo)入pod時(shí)候會(huì)報(bào)錯(cuò) 如小標(biāo)題所示挨摸,cocoapods 版本是1.1.1,仔細(xì)一看是和之前導(dǎo)入百度地圖的SDK的時(shí)候 framework 文件夾里已經(jīng)有了libssl.a和libcrypto.a 這兩個(gè)靜態(tài)庫(kù)了岁歉,刪除這兩個(gè)靜態(tài)庫(kù)后重新導(dǎo)入就可以了得运。在新項(xiàng)目同時(shí)要導(dǎo)入這兩個(gè)第三方庫(kù)的時(shí)候會(huì)報(bào)錯(cuò),我的處理方法是锅移,先導(dǎo)入其中一個(gè)熔掺,然后刪除路徑下的libcrypto.a 和libssl.a,再導(dǎo)入另外一個(gè)就好啦非剃。
8置逻、設(shè)置漸變色導(dǎo)航欄
//漸變色
CAGradientLayer *bgLayer = [CAGradientLayer layer];
bgLayer.frame = CGRectMake(0, -20, UIScreen_Width, 64);//漸變圖層的大小,這里的 -20是為了遮擋狀態(tài)欄
bgLayer.locations = @[@0, @0.7, @1];//漸變的位置
bgLayer.colors = @[(id)COLORRGB(40, 144, 166, 1).CGColor, (id)COLORRGB(39, 196, 206, 1).CGColor];
[self.navigationController.navigationBar.layer addSublayer:bgLayer];
9努潘、真機(jī)運(yùn)行出現(xiàn):error: Invalid bitcode signature
刪除DerivedData文件夾
打開(kāi)xcode找到Products文件夾 -> Products文件夾里的.app文件诽偷,show in Finder 選擇三欄顯示模式 -> 往前滑找到DerivedData文件夾, 刪除 疯坤。
用pod 重新install报慕。注意Build Active Architecture Only 中的debug要設(shè)置為Yes,不然會(huì)無(wú)法生成項(xiàng)目pod靜態(tài)庫(kù),導(dǎo)致編譯報(bào)錯(cuò)压怠。
10眠冈、編譯出現(xiàn)錯(cuò)誤提示:?objc-class-ref in ?xxxx.o?
xxx文件中引用的model類(lèi)中的.m文件里忘記寫(xiě)上:
@implementation VirtualModel
@end
11、項(xiàng)目在iPhone X上面的適配
項(xiàng)目結(jié)構(gòu)是TabbarController ->NavigationController->RootViewController菌瘫。在rootController在push跳轉(zhuǎn)后再pop返回來(lái)蜗顽,在iPhone X模擬器下面調(diào)試(ios 11),rootcontroller的view的長(zhǎng)度會(huì)收縮一下雨让,仔細(xì)看會(huì)發(fā)現(xiàn)返回時(shí)view被拉長(zhǎng)了雇盖,然后在viewDidAppear后恢復(fù)正常長(zhǎng)度,導(dǎo)致看上去是長(zhǎng)度收縮了栖忠。推測(cè)應(yīng)該是跟ios 11以后提出的safeArea有關(guān)崔挖。分別在 viewWillAppear 、viewDidAppear庵寞、viewDidLayoutSubviews狸相、viewSafeAreaInsetsDidChange(iOS11)方法內(nèi)打上斷點(diǎn),輸出frame 和 SafeAreaInset捐川。這里提供一下 判斷iOS 11前后safeAreaInset 的方法
static inline UIEdgeInsets sgm_safeAreaInset(UIView *view) { ?
? ? ? if (@available(iOS 11.0, *)) { ? ? ? ?
? ? ? ? ? ? ?return view.safeAreaInsets; ? ?
? ? ? } ? ?
? ? ? return UIEdgeInsetsZero;
}
可以看到圖1中的打印內(nèi)容脓鹃。在viewDidAppear以后,view的frame 處于變動(dòng)狀態(tài)古沥,導(dǎo)致了動(dòng)畫(huà)的產(chǎn)生瘸右。而且娇跟,在viewDidAppear之前后分別都會(huì)調(diào)用一次viewSafeAreaInsetsDidChange 和 viewLayoutSubviews方法,而viewSafeAreaInsetsDidChange方法的調(diào)用是由safeAreaInset的改變導(dǎo)致尊浓,所以我們?cè)谶@個(gè)方法里去控制view的frame就OK了逞频。代碼如下:
UIEdgeInsets safeAreaInset = sgm_safeAreaInset(self.view); ? ?
CGRect frame = self.view.frame; ? ?
frame.size.height -= safeAreaInset.bottom; ? ?
self.view.frame = frame;?