整治笔记188金宝搏

升级完 Xcode8 和 iOS10后, 在开发当中遇到的问题,
现整理自己的问题解决记录.

现在在苹果的官网上,我们已经可以下载到Xcode8的GM版本了,加上9.14日凌晨,苹果就要正式推出iOS10系统的推送了,在此之际,iOS10的适配已经迫在眉睫啦,不知道Xcode8
beat版本,童鞋们有木有下载过来试试呢?就我的使用来说,总体觉得苹果还是坑不断,但是也在一直进步的啦。下面我就来说说,iOS10的适配以及Xcode8使用上的一些注意点。

我的好奇心打开推送通知后,目前就发现了两个问题,说大不大说小不小,但是真心很恼人!真心建议,如若项目中没有推送相关,则不要打开这个!

一、证书管理

188金宝搏 1

用Xcode8打开工程后,比较明显的就是下图了,这个是苹果的新特性,可以帮助我们自动管理证书。建议大家勾选这个Automatically
manage
signing
(Ps.但是在beat2版本我用的时候,完全不可以,GM版本竟然神奇的又好了。)

1.1 工程增加了Notification Content和Notification
Service两个Extension,Signing默认是自动模式.

188金宝搏 2

188金宝搏 3

QQ20160913-8.png-96.9kB

如果想使用原始的手动配置,不仅要把Automatically manage
signing去掉,还要在Key
Chains钥匙串里把新生成的证书删掉,然后在Web端生成授权文件。使用Automatically
manage signing最好把每个Target都使用相同的方式.重新 Edit 配置文件
有黄变绿成为Active时,重新下载并打开.

下面我来说说可能会出现的问题:

188金宝搏 4188金宝搏 5

1.Xcode未设置开发者账号情况下的截图

这个时候真机测试时如果出现如下图这个问题:

188金宝搏 6

188金宝搏 7

QQ20160913-0.png-38.5kB

这个时候请先检查设备上是不是之前测试装过该软件,如果有删掉重新运行即可!

解决办法是:大家在Xcode的偏好设置中,添加苹果账号,即可。

如果想了解 Xcode8开发iOS10推送通知过程 请移步,作者: zhao0

2.设备机器未添加进开发者的Device情况下的截图

1.2 打开推送通知后,xib
文件里布局约束丢失及视图变为空白;这个时候我们先Update Frames,
如果还是不行再需要重新添加整体 view布局,
先从外到内添加约束,因为后面的一般不再爆红而是报黄,我们可以用提示一键解决的.

188金宝搏 8

188金宝搏 9

QQ20160913-2.png-33.7kB

刚升级到 Xcode8,发现控制台打印了好多东西.例如:subsystem:
com.apple.network, category: , enable_level: 0, persist_level: 0,
default_ttl: 0, info_ttl: 0, debug_ttl: 0, generate_symptoms: 0,
enable_oversize: 0, privacy_setting: 2, enable_private_data: 0

解决办法是:大家在官网将设备添加进开发机后,陪下描述文件重新下个描述文件即可。

解决方案:

3.正常情况:Xcode配置登录开发者账号后的图片,耐心等待即可。

188金宝搏 10188金宝搏 11OS_ACTIVITY_MODE
disable .png

188金宝搏 12

当然目前Xcode8比较事多,你懂得,如果有时候失灵了,重新勾选对号✅即可.

QQ20160913-1.png-25.1kB

#ifdef DEBUG //测试 处于开发阶段// 真机打印#define ZLString [NSString stringWithFormat:@"%s", __FILE__].lastPathComponent#define ZLLog printf("%s 第%d行: %s\n\n", [ZLString UTF8String] ,__LINE__, [[NSString stringWithFormat:__VA_ARGS__] UTF8String]);#else //发布 处于发布阶段#define ZLLog#endif

等待完成之后的图

使用 iOS10之后, 之前使用的方法去除的 navi
的黑线又回来了.那么怎么进去处理呢.

188金宝搏 13

- viewDidAppear:animated { [super viewDidAppear:animated]; // 移除nav上黑线 (这个时机viewDidAppear) [self removeNavBlackLine:self.navigationBar];}- removeNavBlackLine:view { for (UIView *subView in view.subviews) { if (subView.subviews.count) { [self removeNavBlackLine:subView]; } else { if (subView.frame.size.height <= 1) { [subView removeFromSuperview]; } } }}

QQ20160913-3.png-27kB

如果你的 nav 不需要背景颜色 当然可以有更简单的方法.

二、Xib文件的注意事项

/** * 当第一次使用这个类的时候会调用一次 */+ initialize { // 移除nav上黑线 [UINavigationBar appearance].clipsToBounds = YES;}

使用Xcode8打开xib文件后,会出现下图的提示。

188金宝搏 14nav.png

188金宝搏 15

- viewDidAppear:animated { [super viewDidAppear:animated]; // 移除tabBar上黑线 [self removeTabBarBlackLine:self.tabBar];}- removeTabBarBlackLine:view { for (UIView *subView in view.subviews) { if (subView.subviews.count) { [self removeTabBarBlackLine:subView]; } else { if (subView.frame.size.height <= 1) { // 如果还是移除就会在进入二级页面返回一级页面时黑线还会显示,这样用隐藏就 OK 了. subView.hidden = YES; } } }}// 因为这个tabBar 是透明底,如果改变背景颜色发现根本没变色,但是可以通过设置背景图片去改变背景色.+ initialize { // tabbar相关背景设置 UITabBar *tabbar = [UITabBar appearance]; tabbar.backgroundImage = [UIImage imageNamed:@"tabbar"];}

QQ20160913-9.png-41.7kB

如果你的 tabbar不需要中间按钮突出 当然可以有更简单的方法.
否则突出图片会被平切掉!!!

大家选择Choose Device即可。

/** * 当第一次使用这个类的时候会调用一次 */+ initialize { // 移除tabbar上黑线 [UITabBar appearance].clipsToBounds = YES;}

之后大家会发现布局啊,frame乱了,只需要更新一下frame即可。如下图

188金宝搏 16tabBar.png

188金宝搏 17

深层定制 tabBar. 请移步: 作者:明月钓无痕

QQ20160913-11.png-113.2kB

iOS10 对于隐私权限更加严格了.在调用相机,相册,定位,蓝牙等等时,都需要在
info.plist 中进行配置添加.info.plist NSContactsUsageDescription

注意:如果按上面的步骤操作后,在用Xcode7打开Xib会报一下错误,

188金宝搏 18P
要大写!!!.png

188金宝搏 19

  1. 在iOS 9的时候, 默认HTTP的网络是被禁止的当然我们也可以把
    NSAllowsArbitraryLoads 设置为YES禁用ATS。
  2. 不过iOS 10从2017年1月1日起, 所有新提交的 App苹果
    默认不允许通过这个方法来绕过ATS的限制,也就是说强制我们用HTTPS,如果不这样的话提交App可能会被拒绝。
  3. 但是我们可以选择使用NSExceptionDomains设置白名单的方式来针对特定的域名开放HTTP通过审核。
  4. 在 iOS 10 中 info.plist
    文件新加入NSAllowsArbitraryLoadsInWebContent键, 允许任意 web
    页面加载,同事苹果会用 ATS 来保护你的 App.
  5. 安全传输不再支持 SSLv3, 建议尽快停用 SHA1 和 3DES 算法.

QQ20160913-12.png-32.3kB

建议用第三个[[UIDevice currentDevice] systemVersion]这个方法!

解决办法:需要删除Xib里面

// 值为 1[[[[UIDevice currentDevice] systemVersion] substringToIndex:1] integerValue]// 值为10.000000[[UIDevice currentDevice] systemVersion].floatValue,// 值为10.0[[UIDevice currentDevice] systemVersion]
<capability name="documents saved in the Xcode 8 format" mainToolsVersion="8.0/">

当我们手机系统字体改变了之后,字体会随着手机系统而改变,
我们App的label可能导致部分文字隐藏显示不全问题,
这需要我们写很多代码来进一步处理才能实现,但是iOS 10
提供了这样的属性adjustsFontForContentSizeCategory来设置。

这句话,以及把< document >中的toolsVersion和< plugIn
>中的version改成你正常的xib文件中的值

解决方案: 为 UILabel写一个扩展类

,不过不建议这么做,在Xcode8出来后,希望大家都快速上手,全员更新。这就跟Xcode5到Xcode6一样,有变动,但是还是要尽早学习,尽快适应哟!

@implementation UILabel - lableAdaptIOS10{ CGFloat iOS10 = [[UIDevice currentDevice] systemVersion] >= 10.0; if {// self UIFont 的preferredFontForTextStyle: 意思是指定一个样式,并让字体大小符合用户设定的字体大小。 [self sizeToFit]; // self.font =[UIFont preferredFontForTextStyle: UIFontTextStyleHeadline]; //是否更新字体的变化// self.adjustsFontForContentSizeCategory = YES; }

三、代码及Api注意

如果当提交新版本等了很久构建版本一直不出现.原因是iOS10为了保护隐私,需要在
info.plist
里添加配置,包括定位,摄像头,麦克风,相册,相机等等.但是添加完了,后面的描述信息切记要写!!!!否则很有可能出现构建版本失败的情况.构建版本旁边的➕不会出现.当然历史版本里也看不到.几乎是没有提示.当再提交下一个版本时,发现1.1.1是失败的(这里拿1.1.1版本介绍).

使用Xcode8之后,有些代码可能就编译不过去了,具体我就说说我碰到的问题。

188金宝搏 20188金宝搏 21启动页图出错

1.UIWebView的代理方法:

这个时候需要先检查图片尺寸是否正确,接着清空 Launch Screen File ,上面
Launch Image Sourc里 不再选择Brand Assets.

**注意要删除NSError前面的 nullable,否则报错。

188金宝搏 22

- webView:(UIWebView *)webView didFailLoadWithError:(nullable NSError *)error { [self hideHud];}

打开终端,命令运行: sudo /usr/libexec/xpccachectl 重启电脑

​四、代码注释不能用的解决办法

想了解更多相关兼容iOS 10 资料整理笔记, 请移步,作者: 判若两人丶

这个是因为苹果解决xcode ghost,把插件屏蔽了。

后续接着整理自己遇到的问题, 未完待续~~

解决方法

打开终端,命令运行: sudo /usr/libexec/xpccachectl

然后必须重启电脑后生效

注意:Xcode8内置了开启注释的功能,位置在这里

188金宝搏 23

QQ20160914-3.png

快捷键的设置在这里

188金宝搏 24

QQ20160914-2.png

貌似Xcode8取消了三方插件的功能,具体可以查阅下Xcode8 Source Editor

五、权限以及相关设置

注意,添加的时候,末尾不要有空格

我们需要打开info.plist文件添加相应权限的说明,否则程序在iOS10上会出现崩溃。

具体如下图:

188金宝搏 25

QQ20160914-0.png

麦克风权限:Privacy - Microphone Usage Description
是否允许此App使用你的麦克风?

相机权限: Privacy - Camera Usage Description
是否允许此App使用你的相机?

相册权限: Privacy - Photo Library Usage Description
是否允许此App访问你的媒体资料库?通讯录权限: Privacy - Contacts Usage
Description 是否允许此App访问你的通讯录?

蓝牙权限:Privacy - Bluetooth Peripheral Usage Description
是否许允此App使用蓝牙?

语音转文字权限:Privacy - Speech Recognition Usage Description
是否允许此App使用语音识别?

日历权限:Privacy - Calendars Usage Description 是否允许此App使用日历?

定位权限:Privacy - Location When In Use Usage Description
我们需要通过您的地理位置信息获取您周边的相关数据

定位权限: Privacy - Location Always Usage Description
我们需要通过您的地理位置信息获取您周边的相关数据

定位的需要这么写,防止上架被拒。

注意,添加的时候,末尾不要有空格

六、字体变大,原有frame需要适配

经有的朋友提醒,发现程序内原来2个字的宽度是24,现在2个字需要27的宽度来显示了。。

希望有解决办法的朋友,评论告我一下耶,谢谢啦

七、推送

如下图的部分,不要忘记打开。所有的推送平台,不管是极光还是什么的,要想收到推送,这个是必须打开的哟✌️

188金宝搏 26

QQ20160914-4.png

之后就应该可以收到推送了。另外,极光推送也推出新版本了,大家也可以更新下。

PS.苹果这次对推送做了很大的变化,希望大家多查阅查阅,处理推送的代理方法也变化了。

// 推送的代理

[]

iOS10收到通知不再是在

[application: didReceiveRemoteNotification:]方法去处理,
iOS10推出新的代理方法,接收和处理各类通知

- userNotificationCenter:(UNUserNotificationCenter *)center willPresentNotification:(UNNotification *)notification withCompletionHandler:(UNNotificationPresentationOptions))completionHandler { //应用在前台收到通知 NSLog(@"========%@", notification);}- userNotificationCenter:(UNUserNotificationCenter *)center didReceiveNotificationResponse:(UNNotificationResponse *)response withCompletionHandler:completionHandler { //点击通知进入应用 NSLog(@"response:%@", response);}

​稍后我会更新文章,对推送做一个详细的讲解。

iOS开发 iOS10推送讲解:

:iOS开发 iOS10推送讲解:

8.屏蔽杂乱无章的bug

更新Xcode8之后,新建立工程,都会打印一堆莫名其妙看不懂的Log.

如这些

subsystem: com.apple.UIKit, category: HIDEventFiltered, enable_level:
0, persist_level: 0, default_ttl: 0, info_ttl: 0, debug_ttl: 0,
generate_symptoms: 0, enable_oversize: 1,

屏蔽的方法如下:

Xcode8里边 Edit Scheme-> Run -> Arguments, 在Environment
Variables里边添加

OS_ACTIVITY_MODE = Disable

188金宝搏 27

QQ20160914-8.png

如果写了之后还是打印log,请重新勾选对勾,就可以解决了

9.

Xcode8打印许多无关紧要的内容

刚升级到 Xcode8,发现控制台打印了好多东西.

例如:subsystem: com.apple.network, category: , enable_level: 0,
persist_level: 0, default_ttl: 0, info_ttl: 0, debug_ttl: 0,
generate_symptoms: 0, enable_oversize: 0, privacy_setting: 2,
enable_private_data: 0

188金宝搏 28

解决方案: 如下图

// Product–>Scheme–>Edict Scheme;

​如果没有OS_ACTIVITY_MODE就添加,如果有,就设置Value为disable,并且打钩.

188金宝搏 29188金宝搏 30

著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。

文/徐不同

原文链接:

长按关注:

188金宝搏 31

QQ群:427763454

欢迎你的投稿,展示的你的技术文章:812920365@qq.com

相关文章

Comment ()
评论是一种美德,说点什么吧,否则我会恨你的。。。