一、iOS9bitcode首先最大的问题就是坑货xcode7,xcode7默认是打开bitcode的,bitcode是苹果为了解决他自己以后的应用可以随意更换硬件的处理做的准备也就是arm指令集和x64指令集的问题那么我们的工程如果你采用了别人封装的第三方库,那么好了,会爆以下错误ld:‘/UsersFramework/SDKs/PolymerPay/Library/mobStat/lib**SDK.a(**ForSDK.o)’doesnotcontainbitcode.Youmustrebuilditwithbitcodeenabled(XcodesettingENABLE_BITCODE),obtainanupdatedlibraryfromthevendor,ordisablebitcodeforthistarget.forarchitecturearm64上述这段文字说明了我们的第三方库不支持bitcode,如果你需要支持,就需要这个第三方库也支持bitcode。苹果目前给出的临时解决方案就好比当初MRC和ARC时候的解决法,当初xcode5更新时候默认是工程创建是ARC的,你可以关闭ARC改为MRC,经过了一段时间后,大家都开始使用了ARC,那么bitcode也一样,在xcode7时候默认是开启的,我们需要关闭,那么如何关闭我引用了一篇文章的gif图来做演示在targets里面选择BuildSetting中搜索bitcode,然后改为no就ok了二、iOS9https问题如果在Xcode9之前使用的时http请求,那么在XCode9上编译的App是不能联网的,会提示如下错误:AppTransportSecurityhasblockedacleartextHTTP(http://)resourceloadsinceitisinsecure.Temporaryexceptionscanbeconfiguredviayourapp‘sInfo.plistfile.修改方法是要么使服务器支持https访问,要么关闭https的使用。第一种方法对于个人开发者来说代价还是比较大的,因此推荐使用后面一种方法,具体的做法是:在工程的Info.plist文件里添加NSAppTransportSecurity字典类型的,添加一个元素:key为NSAllowsArbitraryLoads,值为YES。三、iOS9使用URLscheme必须将其加入白名单(摘抄)否则会提示类似如下错误:canOpenURL:failedforURL:"m opensdkapiV2:// app"-error:"Thisappisnotallowedtoqueryforschemem opensdkapiV2”修正方法是,Info.plist文件中添加一个key为LSApplicationQueriesSchemes的数组值,里面包含需要添加白名单的string类型的scheme。特酷吧在项目中使用了 , 等分享登录功能,需要添加的值为:m opensdkapiV2m OpensdkSSoLoginm mqzoneopensdkapiV2mqzoneopensdkapi19mqzoneopensdkapimqzoneopensdkmqzoneweixinwechat三、新浪微博的jsonkit在部分机型上面导致崩溃(群友Gemini提供问题是程序会奔溃到jsonkit.mvoidkeyObjectISA=((void**)keys[idx]);这行代码,因为在osx10.10中,NSString采用了TaggedPointer这项技术,此类型不使用解应用isa来获取其所属类,而是通过接下来的三位来查找类表索引的类型,且对象指针最低位置为1。如何解决:解决方法由群友sun提供参考地址如下.apple.xbs/Sources/UIKit_Sim/UIKit-3505.16/UIApplication.m:3294(群友sun提供)在Info.plist中,可以找到:“Mainstoryboardfilebasename”String“Main”,删掉这个条目,再启动,屏幕变成了黑屏手动添加window-(BOOL)application:(UIApplication*)applicationdidFinishLaunchingWithOptions:(NSDictionary*)launchOptions{//Overridepointforcustomizationafterapplicationlaunch.self.window=[[UIWindowalloc]initWithFrame:[[UIScreenmainScreen]bounds]];//全屏windowself.window.backgroundColor=[UIColorwhiteColor];//白色背景[self.windowmakeKeyAndVisible];//returnYES;}ok,这个由于更新xcode7报错已解决!如果按照上面修改完,发现还在报错,那么去看看你的项目是不是加了引导页把上面的add方法,变成下面的就好。这个add方法在xcode7之前是没有问题的,在xcode7后不能这样写了!六、找不到(丢失).dylib文件,换成.tbd文件而又无法运行,请用下面的方式来解决。GotoBuildPhases>LinkBinarywithLibrairies>+>AddotherOnceinthefileselectionwindowdo"CMD"+Shift+G(Gotofolder)andtype/usr/lib/From/user/libyoucanadd:libz.dylibandmoreCompileandhavefun简书Xcode7的常见问题/p/ef7bbe1c8393一.Xcode7,iOS9之后传出来的什么Xcode有鬼,被植入代码片段什么的,可以看看,了解一下8864二.bitcode问题--未正确设置可能导致编译问题。适配iOS91、大部分社交平台接口不支持https协议。问题描述:在iOS9下,系统默认会拦截对http协议接口的访问,因此无法获取http协议接口的数据。对ShareSDK来说,具体表现可能是,无法授权、分享、获取用户信息等。还可能造成我们的编辑界面里传http之类的网络图片的时候,我们的编辑界面不会显示图片截图,解决的法或者全面关闭https,允许使用http请求;或者把图片的域添加;又或者选择使用https的图片解决方案(以下方法2选1):(1)、暂时退回到http协议。具体方法:在项目的info.plist中添加一个Key:NSAppTransportSecurity,类型为字典类型。然后给它添加一个Key:NSAllowsArbitraryLoads,类型为Boolean类型,值为YES;示例(2)、设置域。可以简单理解成,把不支持https协议的接口设置成http的接口。具体方法:1)、在项目的info.plist中添加一个Key:NSAppTransportSecurity,类型为字典类型。2)、然后给它添加一个NSExceptionDomains,类型为字典类型;3)、把需要的支持的域添加给NSExceptionDomains。其中域作为Key,类型为字典类型。4)、每个域下面需要设置3个属性:NSIncludesSubdomains、NSExceptionRequiresForwardSecrecy、NSExceptionAllowsInsecureHTTPLoads。均为Boolean类型,值分别为YES、NO、YES。示例2、大部分社交平台SDK不支持bitcode。问题描述:iOS9新建项目默认需要支持bitcode,而不支持bitcode的SDK会导致无法编译运行。解决方案:(1)、暂时关闭对bitcode的支持(建议),方法如下图(2)、移除不支持bitcode的平台SDK。示例3、添加Scheme白名单问题描述:在iOS9下涉及到平台客户端跳转,系统会自动到项目info.plist下检测是否设置平台Scheme。对于需要配置的平台,如果没有配置,就无法正常跳转平台客户端。因此要支持客户端的分享和授权等,需要配置Scheme名单。具体方法:1)、在项目的info.plist中添加一LSApplicationQueriesSchemes,类型为Array。2)、然后给它添加一个需要支持的项目,类型为字符串类型;示例三.ATS未正确设置可能导致一些网络请求出问题。WWDC2015上了解到iOS9将要求网络请求使用HTTPS协议。我们知道,Apple在安全及用户隐私方面做了很多工作,包括沙盒机制、代码签名、禁用私有API等。而在今年6月份的WWDC2015上,Apple又提出了AppTransportSecurity(ATS)的概念。这一特性的主要意图是为我们的App与服务器之间提供一种安全的通信方式,以防止中间人窃听、篡改传输的数据。这一特性在iOS9+和OSX10.11+中是默认的支持项。这一概念的提出,也将意味着Apple将会慢慢转向支持HTTPS,而可能放弃HTTP。AppTransportSecurity技术要求我们先来看看ATS的技术要求(参考AppTransportSecurityTechnote):1)TheservermustsupportatleastTransportLayerSecurity(TLS)protocolversion1.2.2)Connectionciphersarelimitedtothosethatprovideforwardsecrecy(seethelistofciphersbelow.)3)CertificatesmustbesignedusingaSHA256orbettersignaturehashalgorithm,witheithera2048bitorgreaterRSAkeyora256bitorgreaterElliptic-Curve(ECC)key.可以看到服务端必须支持TLS1.2或以上版本;必须使用支持前向保密的密码;证书必须使用SHA-256或者更好的签名hash算法来签名,如果证书无效,则会导致连接失败。Apple认为这是目前保证通信安全性的最佳实践,特别是使用TLS1.2和前向保密。当然,相信Apple也会与时俱进,不断的修正ATS,以保证网络通信的安全性。默认配置在iOS9+和OSX10.11+中,如果我们的App使用了NSURLConnection、CFURL或者NSURLSession相关的API来进行数据通信的话,则默认是通过ATS的方式来传输数据。在此配置下,如果我们使用HTTP来进行通信,则会导致请求失败,并报以下错误:TheresourcecouldnotbeloadedbecausetheAppTransportSecuritypolicyrequirestheuseofasecureconnection.这样意味着如果使用ATS,将无法支持HTTP协议(我们测试了一下,由于我们的登录服务是使用HTTP协议,目前在iOS9下已无法正常登录)。相信目前还有大量的应用是通过HTTP协议来访问服务器的。而要让所有的应用都转向支持HTTPS,显然是一件费时费力的事(与今年年头所有应用必须支持64位ARM不同,那次只是在客户端层面,而ATS涉及到服务端,影响面更大)。所以苹果提供了一种兼容方案,下面我们就来看看如何处理。