xcode8.0升级之后公司项目遇到的问题

xcode8升级之后项目遇到了问题,由于这个项目是我中途接手的,遇到的第三方也是自己没有用过的,

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(_selectionColorInfoobjc_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 转换 //////////////////////

可见在ARC有效的时候是使用__bridge  来进行类型的转换想要了解自己可以往上面查一下

升级xcode8已是必然,升级ios10的用户不能说大有人在,应该也不会少,楼主听说,如果不升级xcode8,上架最新的包,那么可能应用在ios10 上是不支持的.
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 进入断点很卡,何解?

持续更新中...

[ 此帖被wo709128079在2016-09-26 10:57重新编辑 ]

图片:屏幕快照 2016-09-20 上午11.10.23.png

时间: 2024-10-21 05:26:53

xcode8.0升级之后公司项目遇到的问题的相关文章

xcode7.3 升级 xcode8.0 后权限设置问题(升级xcode 8.0 后构建版本不显示问题)

前两天为了适配 iOS10 的系统 我将xcode 7.3 升级到了 xcode 8.0 但是在给项目升级的时候用xcode8.0打包并且上传构建的版本后,在新建版本里看不到新上传的 构建版本 并且在"活动"里也找不到新版本的信息,上传多次还是不行如下图 经查阅资料是 iOS10的权限兼容问题,现有如下解决办法 打开 info.plist 文件添加一下 权限设置(原则上只添加在你的项目中需要的权限设置就可以了) 1.访问麦克风权限:Privacy - Microphone Usage

升级android sdk到5.0时,创建项目出现错误:No resource found that matches the given name &#39;android:Widget.Material.A

升级sdk 到5.0时,创建项目时会多创建一个库项目,叫appcompat_v7. 创建完成后,这个项目可能会报错,诸如出现:No resource found that matches the given name 'android:Widget.Material.ActionButton'等错误. 下面是一些解决方案: 解决方案1: 使用sdk manager下载以下内容: 解决方案2: 如果你不想创建appcompat_v7,你可以在创建项目时将minimum Required SDK设置

UiAutomator2.0升级填坑记

UiAutomator2.0升级填坑记 SkySeraph May. 28th 2017 Email:[email protected] 更多精彩请直接访问SkySeraph个人站点:www.skyseraph.com 啰嗦 Google Android Developers 在2015年3月就发布了UiAutomator 2.0版本(下文简称U2),而公司的核心产品中用到还是UiAutomator老版本(下文简称U1),业界用U2的也不是很多,虽然有诸多问题和不便(如高版本OS中不支持Remo

react-router 4.0 升级攻略

react-router 4.0 出来好9了,项目在4月份的时候对react-router进行了升级,升级耗费了3天,一个坑一个坑踩了过来. 按照公司项目情况说下升级改了哪些,项目使用的是hashHistory,(BrowserHistory 的情况就不清楚了) 中文文档  https://reacttraining.cn/  好像https签名出问题了,打不开,可以 gtihub项目  下载在,npm 安装 start下 1.  package.json 配置修改 "react-router&

day04_oracle版本升级--10.2.0.1.0升级到10.2.0.4.0

软件升级 1.oracle很少升级,除非你要用什么新的功能.因为升级要停库,好多和库相关的组件可能全要升级.升级前一定要开会研究很长时间. 2.一些大公司定期委托第三方公司做<系统安全防护评测>,扫描出一些漏洞时,会要求升级并打补丁[联通] 神州数码信息服务股份有限公司.绿盟科技 如下形式的漏洞: 漏洞详细信息 Oracle数据库Network Foundation组件远程拒绝服务漏洞 详细描述 本次扫描是通过版本进行的,可能发生误报. Oracle Network Foundation是 O

OkHttpUtils-2.0.0 升级后改名 OkGo,全新完美支持 RxJava,比 Retrofit 更简单易用。

okhttp-OkGo 项目地址:jeasonlzy/okhttp-OkGo 简介:OkHttpUtils-2.0.0 升级后改名 OkGo,全新完美支持 RxJava,比 Retrofit 更简单易用.该库是封装了 okhttp 的网络框架,支持大文件上传下载,上传进度回调,下载进度回调,表单上传(多文件和多参数一起上传),链式调用,可以自定义返回对象,支持 Https 和自签名证书,支持 cookie 的持久化和自动管理,支持四种缓存模式缓存网络数据,支持 301 和 302 重定向,扩展了

MetroUICSS 2.0到3.0升级细节记录

Metro UI CSS 是一套用来创建类似于Windows 8 Metro UI风格网站的样式 其官网地址:http://metroui.org.ua/ 中文地址:http://www.bootcss.com/p/metro-ui-css/ 源码地址: https://github.com/olton/Metro-UI-CSS 这种前端框架没有Bootstrap.YUI流行,网上资料也不多.现在项目中用的这框架要从2.0升级到3.0,我在这里记录下各种细节. js包的替换,url的替换 but

Oracle升级_oracle 10g版本由 10.2.0.4.0升级为10.2.0.4.4(即PSU升级)

***************************************************************************************************** 续借上篇:Oracle升级_oracle 10g版本由 10.2.0.1.0升级为10.2.0.4.0(即CPU升级) ***********************************************声明***************************************

jackson2.5.0升级到2.7.0

开发环境:spring-mvc4.1.7.jackson2.7.0 问题描述:项目中将原来的jackson2.5.0升级到2.7.0,导致服务调用出错. mvc相关的配置文件如下: <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.