xcode8.0升级之后公司项目遇到的问题
AQGridViewCell,这个第三方的类主要是用于处理图片的问题,xcode开发工具升级过后,报这样的错误iPhoneSimulator10.0.sdk/usr/include/objc/objc.h:204:16: 'objc_unretainedObject' has been explicitly marked unavailable here,主要是执行的这段代码
NSMutableDictionary * info = (NSMutableDictionary *) objc_unretainedObject(CFDictionaryGetValue(_selectionColorInfo, objc_unretainedPointer(view) ));
导致的报错,objc_unretainedObject点进去发现这是在苹果原生的类库 <objc/runtime.h> objc.h里面的
xcode8是这样(苹果原生的类库)
// Obsolete ARC conversions.
OBJC_EXPORT id objc_retainedObject(objc_objectptr_t obj)
OBJC_UNAVAILABLE("use CFBridgingRelease() or a (__bridge_transfer id) cast instead");
OBJC_EXPORT id objc_unretainedObject(objc_objectptr_t obj)
OBJC_UNAVAILABLE("use a (__bridge id) cast instead");
OBJC_EXPORT objc_objectptr_t objc_unretainedPointer(id obj)
OBJC_UNAVAILABLE("use a __bridge cast instead");
xcode7.3.1的情况(苹果原生的类库)
但是在xcode 7.3.1程序是正常的,并没有任何报错,
xcode7.3.1是这样
#if __has_feature(objc_arc)
# define objc_retainedObject(o) ((__bridge_transfer id)(objc_objectptr_t)(o))
# define objc_unretainedObject(o) ((__bridge id)(objc_objectptr_t)(o))
# define objc_unretainedPointer(o) ((__bridge objc_objectptr_t)(id)(o))
#else
# define objc_retainedObject(o) ((id)(objc_objectptr_t)(o))
# define objc_unretainedObject(o) ((id)(objc_objectptr_t)(o))
# define objc_unretainedPointer(o) ((objc_objectptr_t)(id)(o))
#endif
最后通过谷歌,将代码改成以下之后,完美没有任何问题
NSMutableDictionary * info = (NSMutableDictionary *) (CFDictionaryGetValue( _selectionColorInfo, (__bridge void *)(view) ));可见苹果去掉了宏,
objc_unretainedObject也被废弃,转而使用了(__bridge void *)来代替,通过网络查询得到(__bridge void*)和objc_unretainedPointer,objc_unretainedObject区别
/*
* ARC有效时三种类型转换:
*/
1、__bridge // 转换
2、__bridge_retained // 转换
3、__bridge_transfer // 转换
// __bridge 转换 //////////////////////
// ARC无效时 对应的代码
id obj = [[NSObject alloc] init];
void *p = obj;
id o = p;
[o release];
// 在 ARC 有效时 通过 __bridge转换 id 和 void * 就能够相互转换
id obj = [[NSObject alloc] init];
void *p = (__bridge void *)obj;
id o = (__bridge id)p;
void *p = (__bridge void *)obj;
id o = (__bridge id)p;
/*
* 通过 __bridge 转换, id 和 void * 就能够相互转换。
* 但是转换为 void * 的 __bridge 转换,其安全性与赋值给 __unsafe_unretained 修饰符相近,
* 甚至会更低。如果管理时不注意赋值对象的所有者,就会因悬垂指针而导至程序崩溃。
*/
// __bridge 转换 //////////////////////
so,这些xcode8的新特性,你应该了解!!!
1.快捷键 command + / 注释失效; 解决方法1: Xcode -> preferences -> key bindings 中的comment selection 是否设置上快捷键了 解决方法2:http://blog.csdn.net/jnbbwyth/article/details/52576169 第四个问题详解
2.真机测试不在支持ios8.0以下版本; (已解决)追加:xcode8支持ios8以下真机测试方法:1.应用程序-xcode 显示包内容-Contents-Developer-Platforms-iPhoneOS.platform-DeviceSupport 把里边 6.0 6.1 7.0 7.1 的文件夹粘贴到xcode8 对应的文件夹内 2. 应用程序-xcode 显示包内容-Contents-Developer-Platforms-iPhoneOS.platform-Developer-SDKs-iPhoneOS.sdk-SDKSettings.plist 文件下DefaultProperties - DEPLOYMENT_TARGET_SUGGESTE... 该数组中添加 6.0 6.1 7.0 7.1 对应的测试版本,(注意:如果你的文件是只读模式的,那么是不能修改的,你需要把Contents-Developer-Platforms-iPhoneOS.platform-Developer-SDKs-iPhoneOS.sdk-SDKSettings.plist 这些文件的只读模式都改成读写模式)这个版本排序一定要是从小到大,直接把小的添加到下面是不管用的,必须把小的拖到最上边.这个时候退出你的Xcode,然后重新启动,你就会发现ios8.0以下的真机 也可以正常测试了 非常感谢ID:84447879 的建议方法.分享给大家.
3.如果项目中包含证书,证书内包含的Id 必须与 bundle Id 保持一致才行,开发者team账号必须创建了 该 bundle Id 对应的证书,就是说不是所有的苹果账号都能真机测试了(这里说的是项目中有 证书的前提下)
4.使用Xcode 8创建新项目的时候,会让你选择开发者team为了自动生成对应的证书。在新老项目的General中也可以对签名进行设置,勾选自动管理证书(可选的),Xcode会自动替你生成调试证书和描述问题,证书与描述文件有效期为6天,避免了大量的垃圾冗余证书占用问题。
5.- (void)webView:(UIWebView *)webView didFailLoadWithError:(nullable NSError *)error; 变成了- (void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error
6.版本target 从8.0 起步了,但是老代码的7.1 用xcode8 打开还是显示7.1 ,就是不知道起不起作用了.追加:可以手写输入7.1,仍然管用.
7.之前两个汉字占用24宽度,现在占用27了,导致部分UI可能需要重新适配; 或者判断下当前系统版本,如果>=10.0,就让需要适配的控件调用 sizetofit 方法.
8.麦克风权限: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 我们需要通过您的地理位置信息获取您周边的相关数据
9.引用:45楼:Dcook -> MJRefresh iOS10的系统上每次下拉刷新后没办法完全恢复Normal 状态 Y轴距离上总是相差20左右...(楼主个人也使用的MJ,表示暂时没有发现这个问题)
解决方案 http://www.cnblogs.com/dev1024/p/5889865.html
10.引用:雨季的雾 ItunesConnect上传遇到问题,ERROR ITMS-90682: "Invalid Bundle. The asset catalog at 'Payload/ElitePlus.app/Assets.car' can't contain 16-bit or P3 assets if the app is targeting iOS releases earlier than iOS 9.3." 解决方法:http://www.cnblogs.com/zyonbao/p/5872943.html http://www.jianshu.com/p/b13e1e441116
11.iOS 10 因苹果健康导致闪退 crash 原文链接:http://www.jianshu.com/p/545bd1bf5a23
Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'NSHealthUpdateUsageDescription must be set in the app's Info.plist in order to request write authorization.'
12.引用79楼:新增了CAAnimationDelegate ,之前使用CAAnimation的文件需要强制添加代理
好文章推荐1: http://blog.csdn.net/jnbbwyth/article/details/52576169 (内含:1.证书管理 2.xib注意事项 3.代码及Api注意 4.代码注释不能用的解决办法 5.权限以及相关设置 6.字体变大,原有frame需要适配 7.推送 8.屏蔽杂乱无章的bug)
好文章推荐2:转自 舞小月 http://www.cocoachina.com/bbs/read.php?tid-1695563.html
iOS10相册相机闪退bug
http://www.jianshu.com/p/5085430b029f
iOS 10 因苹果健康导致闪退 crash
http://www.jianshu.com/p/545bd1bf5a23
麦克风、多媒体、地图、通讯录
ios10相机等崩溃
http://www.jianshu.com/p/ec15dadd38f3
iOS10 配置须知
http://www.jianshu.com/p/65f21dc5c556
iOS开发 适配iOS10以及Xcode8
http://www.jianshu.com/p/9756992a35ca
iOS 10 的适配问题
http://www.jianshu.com/p/f8151d556930
问题汇总:(待解决)
1.引用36楼:状态栏隐藏失效了
- (BOOL)prefersStatusBarHidden{
return YES;
}
2.引用37楼:APP切到后台 然后从后台切回APP就闪退了 升级到IOS10各种莫名其妙的闪退怎么回事
3.引用44楼:xcode8使用source control 中git提交代码也有点不正常,远端存在一个master分支和一个dev分支,我这边本地有master dev 再多一个coder1的分支,当切换到coder1分支上无法拉取dev或者master上的代码,只有切换到master或者dev上才能拉取
4.引用27楼:nslog信息打印不全
5.引用50楼:请问ImagePickerController.cameraViewTransform这个属性在iOS10是不是不能用了?
6.引用57楼:app在iOS10上无法访问网络,打开app不弹出是否允许使用网络弹窗,在设置-无线局域网-使用无线局域网与蜂窝移动的应用里也无法看到该app,有些机子重启或者还原网络设置可以解决,这是系统BUG么?
7.引用35,64楼:Xcode8 + iOS8 进入断点很卡,何解?
持续更新中...
xcode8.0升级之后公司项目遇到的问题的更多相关文章
- xcode7.3 升级 xcode8.0 后权限设置问题(升级xcode 8.0 后构建版本不显示问题)
xcode7.3 升级 xcode8.0 后权限设置问题(升级xcode 8.0 后构建版本不显示问题) 前两天为了适配 iOS10 的系统 我将xcode 7.3 升级到了 xcode 8.0 但是 ...
- UiAutomator2.0升级填坑记
UiAutomator2.0升级填坑记 SkySeraph May. 28th 2017 Email:skyseraph00@163.com 更多精彩请直接访问SkySeraph个人站点:www.sk ...
- 我是如何在公司项目中使用ESLint来提升代码质量的
ESLint:你认识我吗 ESLint是一个语法规则和代码风格的检查工具. 和学习所有编程语言一样,想要入门ESLint,首先要去它的官网看看:https://eslint.org/. ESLint的 ...
- 【开源】SpringBootNetty聊天室V1.2.0升级版本介绍
前言 SpringBoot!微服务微架构的基础,Netty通信框架的元老级别框架,即之前的SpringBoot与Netty的实现聊天室的功能后已经过了不到一周的时间啦,今天我们更新了项目版本从V1.0 ...
- Spring Boot 2.0 版的开源项目云收藏来了!
给大家聊一聊云收藏从 Spring Boot 1.0 升级到 2.0 所踩的坑 先给大家晒一下云收藏的几个数据,作为一个 Spring Boot 的开源项目(https://github.com/cl ...
- react-router 4.0 升级攻略
react-router 4.0 出来好9了,项目在4月份的时候对react-router进行了升级,升级耗费了3天,一个坑一个坑踩了过来. 按照公司项目情况说下升级改了哪些,项目使用的是hashHi ...
- jackson2.5.0升级到2.7.0
开发环境:spring-mvc4.1.7.jackson2.7.0 问题描述:项目中将原来的jackson2.5.0升级到2.7.0,导致服务调用出错. mvc相关的配置文件如下: <?xml ...
- Java进阶(二十六)公司项目开发知识点回顾
公司项目开发知识点回顾 前言 "拿来主义"在某些时候并不是最佳选择,尤其是当自己遇到问题的时候,毫无头绪. 在一次实验过程中,需要实现数据库的CRUD操作.由于之前项目开发过程中, ...
- Spring Boot 2.0 升级指南
Spring Boot 2.0 升级指南 前言 Spring Boot已经发布2.0有5个月多,多了很多新特性,一些坑也慢慢被填上,最近有空,就把项目中Spring Boot 版本做了升级,顺便整理下 ...
随机推荐
- CYQ.Data V5 分布式自动化缓存设计介绍
前方: 其实完成这个功能之前,我就在思考:是先把想法写了来,和大伙讨论讨论后再实现,还是实现后再写文论述自己的思维. 忽然脑后传来一个声音说:你发文后会进入发呆阶段. 所以还是静下心,让我轻轻地把代码 ...
- 从零开始,DIY一个jQuery(2)
在上篇文章我们简单实现了一个 jQuery 的基础结构,不过为了顺应潮流,这次咱把它改为模块化的写法,此举得以有效提升项目的可维护性,因此在后续也将以模块化形式进行持续开发. 模块化开发和编译需要用上 ...
- EQueue文件持久化消息关键点设计思路
要持久化的关键数据有三种 消息: 队列,队列中存放的是消息索引信息,即消息在文件中的物理位置(messageOffset)和在队列中的逻辑位置(queueOffset)的映射信息: 队列消费进度,表示 ...
- Visual Studio Code 使用Git进行版本控制
Visual Studio Code 使用Git进行版本控制 本来认为此类教程,肯定是满网飞了.今天首次使用VS Code的Git功能,翻遍了 所有中文教程,竟没有一个靠谱的.遂动笔写一篇. 请确保你 ...
- 领域驱动设计实战—基于DDDLite的权限管理OpenAuth.net
在园子里面,搜索一下“权限管理”至少能得到上千条的有效记录.记得刚开始工作的时候,写个通用的权限系统一直是自己的一个梦想.中间因为工作忙(其实就是懒!)等原因,被无限期搁置了.最近想想,自己写东西时, ...
- Thinking in Unity3D:材质系统概览
关于<Thinking in Unity3D> 笔者在研究和使用Unity3D的过程中,获得了一些Unity3D方面的信息,同时也感叹Unity3D设计之精妙.不得不说,笔者最近几年的引擎 ...
- ABP(现代ASP.NET样板开发框架)系列之3、ABP分层架构
点这里进入ABP系列文章总目录 基于DDD的现代ASP.NET开发框架--ABP系列之3.ABP分层架构 ABP是“ASP.NET Boilerplate Project (ASP.NET样板项目)” ...
- Linux网络编程-tcp缓存设置
最近发现服务的逻辑完成时间很短,但是上游接收到的时间比较长,所以就怀疑是底层数据的序列化/反序列化.读写.传输有问题,然后怀疑是TCP的读写缓存是不是设置太小.现在就记录下TCP缓存的各配置项以及缓存 ...
- Error on line -1 of document : Premature end of file. Nested exception: Premature end of file.
启动tomcat, 出现, ( 之前都是好好的... ) [lk ] ERROR [08-12 15:10:02] [main] org.springframework.web.context.Con ...
- Spark 运行架构核心总结
摘要: 1.基本术语 2.运行架构 2.1基本架构 2.2运行流程 2.3相关的UML类图 2.4调度模块: 2.4.1作业调度简介 2.4.2任务调度简介 3.运行模式 3.1 standalo ...