Xcode7 iOS9的一些问题

董培杰 

标签:desclasslogcomhttp使用si代码it

一、iOS9 bitcode

首先最大的问题就是坑货xcode7,xcode7默认是打开bitcode的,bitcode是苹果为了解决他自己以后的应用可以随意更换硬件的处理做的准备也就是arm指令集和x64指令集的问题

那么我们的工程如果你采用了别人封装的第三方库,那么好了,会爆以下错误

ld: ‘/UsersFramework/SDKs/PolymerPay/Library/mobStat/lib**SDK.a(**ForSDK.o)’does not contain bitcode. You must rebuild it with bitcode enabled (Xcodesetting ENABLE_BITCODE), obtain an updated library fromthe vendor, or disablebitcode for this target. for architecture arm64

上述这段文字说明了我们的第三方库不支持bitcode,如果你需要支持,就需要这个第三方库也支持bitcode。苹果目前给出的临时解决方案就好比当初MRC和ARC时候的解决办法,当初xcode5更新时候默认是工程创建是ARC的,你可以关闭ARC改为MRC,经过了一段时间后,大家都开始使用了ARC,那么bitcode也一样,在xcode7时候默认是开启的,我们需要关闭,那么如何关闭

我引用了一篇文章的gif图来做演示

在targets里面选择BuildSetting中搜索bitcode,然后改为no就ok了

二、iOS9 https问题

如果在Xcode 9之前使用的时http请求,那么在XCode 9上编译的App是不能联网的,会提示如下错误:

App Transport Security has blocked a cleartext HTTP (http://) resource load since it is insecure. Temporary exceptions can be configured via your app‘s Info.plist file.

修 改方法是要么使服务器支持https访问,要么关闭https的使用。第一种方法对于个人开发者来说代价还是比较大的,因此推荐使用后面一种方法,具体的 做法是:在工程的Info.plist文件里添加NSAppTransportSecurity字典类型的,添加一个元素:key为 NSAllowsArbitraryLoads,值为YES。

三、iOS 9 使用URL scheme必须将其加入白名单(摘抄)

否则会提示类似如下错误:

canOpenURL: failed for URL: "mqqopensdkapiV2://qqapp" - error: "This app is not allowed to query for scheme mqqopensdkapiV2”

修正方法是,Info.plist文件中添加一个key为LSApplicationQueriesSchemes的数组值,里面包含需要添加白名单的string类型的scheme。特酷吧在项目中使用了qq,微信等分享登录功能,需要添加的值为:

mqqopensdkapiV2

mqqOpensdkSSoLogin

mqq

mqzoneopensdkapiV2

mqzoneopensdkapi19

mqzoneopensdkapi

mqzoneopensdk

mqzone

weixin

wechat

三、新浪微博的jsonkit在部分机型上面导致崩溃(群友Gemini提供

问题是 程序会奔溃到jsonkit.m void keyObjectISA = ((void **)keys[idx]);这行代码,因为在os x10.10中,NSString采用了TaggedPointer这项技术,此类型不使用解应用isa来获取其所属类,而是通过接下来的三位来查找类表索引的类型,且对象指针最低位置为1。

如何解决:解决方法由群友sun提供参考地址如下

http://blog.csdn.net/woainiliuwei007/article/details/48549103

由于taggedpointer类型不能用isa了,就必须修改为object_getClass(keyObject) ,而且在line:2601处也需要做修改

这里附一个修改过的jsonkit,可以正常使用

http://download.csdn.net/detail/woainiliuwei007/9123789

四 、原来的dylib后缀名的库全部修改为libz.tbd

五、报错 Assertion failure in -[UIApplication _runWithMainScene:transitionContext:completion:], /BuildRoot/Library/Caches/com.apple.xbs/Sources/UIKit_Sim/UIKit-3505.16/UIApplication.m:3294    (群友sun提供)

在Info.plist中,可以找到:“Main storyboard file base name”  String “Main”,删掉这个条目, 再启动,屏幕变成了黑屏

手动添加window

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

// Override point for customization after application launch.

self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; //全屏window

self.window.backgroundColor = [UIColor whiteColor]; //白色背景

[self.window makeKeyAndVisible]; //

return YES;

}

ok,这个由于更新xcode7报错已解决!

如果按照上面修改完,发现还在报错,那么去看看你的项目是不是加了引导页

把上面的add方法,变成下面的就好。

这个add方法在xcode7之前是没有问题的,在xcode7后不能这样写了!

六、找不到(丢失).dylib文件,换成.tbd文件而又无法运行,请用下面的方式来解决。

Go to Build Phases >Link Binary with Librairies > + > Add other

Once in the file selection window do "CMD"+Shift+G (Go to folder) and type /usr/lib/

From /user/lib you can add: libz.dylib and more...

Compile and have fun



简书Xcode7的常见问题

http://www.jianshu.com/p/ef7bbe1c8393

一.Xcode7,iOS9之后传出来的什么Xcode有鬼,被植入代码片段什么的,可以看看,了解一下http://drops.wooyun.org/news/8864

二.bitcode问题--未正确设置可能导致编译问题。适配iOS9

1、大部分社交平台接口不支持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。

问题描述:iOS 9新建项目默认需要支持bitcode,而不支持bitcode的SDK会导致无法编译运行。解决方案:

(1)、暂时关闭对bitcode的支持(建议),方法如下图

(2)、移除不支持bitcode的平台SDK。

示例

3、添加Scheme白名单

问题描述:在iOS 9下涉及到平台客户端跳转,系统会自动到项目info.plist下检测是否设置平台Scheme。对于需要配置的平台,如果没有配置,就无法正常跳转平台客户端。因此要支持客户端的分享和授权等,需要配置Scheme名单。

具体方法:

1)、在项目的info.plist中添加一LSApplicationQueriesSchemes,类型为Array。

2)、然后给它添加一个需要支持的项目,类型为字符串类型;

示例

三.ATS  未正确设置可能导致一些网络请求出问题。

WWDC 2015上了解到iOS 9将要求网络请求使用HTTPS协议。我们知道,Apple在安全及用户隐私方面做了很多工作,包括沙盒机制、代码签名、禁用私有API等。而在今年6月份的WWDC 2015上,Apple又提出了App Transport Security(ATS)的概念。这一特性的主要意图是为我们的App与服务器之间提供一种安全的通信方式,以防止中间人窃听、篡改传输的数据。这一特性在iOS 9+和OS X 10.11+中是默认的支持项。这一概念的提出,也将意味着Apple将会慢慢转向支持HTTPS,而可能放弃HTTP。

App Transport Security技术要求

我们先来看看ATS的技术要求(参考App Transport Security Technote):

1)The server must support at least Transport Layer Security (TLS) protocol version 1.2.

2)Connection ciphers are limited to those that provide forward secrecy (see the list of ciphers below.)

3)Certificates must be signed using a SHA256 or better signature hash algorithm, with either a 2048 bit or greater RSA key or a 256 bit or greater Elliptic-Curve (ECC) key.

可以看到服务端必须支持TLS 1.2或以上版本;必须使用支持前向保密的密码;证书必须使用SHA-256或者更好的签名hash算法来签名,如果证书无效,则会导致连接失败。

Apple认为这是目前保证通信安全性的最佳实践,特别是使用TLS 1.2和前向保密。当然,相信Apple也会与时俱进,不断的修正ATS,以保证网络通信的安全性。

默认配置

在iOS 9+和OS X 10.11+中,如果我们的App使用了NSURLConnection、CFURL 或者NSURLSession相关的API来进行数据通信的话,则默认是通过ATS的方式来传输数据。在此配置下,如果我们使用HTTP来进行通信,则会导致请求失败,并报以下错误:

The resource could not be loaded because the App Transport Security policy requires the use of a secure connection.

这样意味着如果使用ATS,将无法支持HTTP协议(我们测试了一下,由于我们的登录服务是使用HTTP协议,目前在iOS 9下已无法正常登录)。相信目前还有大量的应用是通过HTTP协议来访问服务器的。而要让所有的应用都转向支持HTTPS,显然是一件费时费力的事(与今年年头所有应用必须支持64位ARM不同,那次只是在客户端层面,而ATS涉及到服务端,影响面更大)。所以苹果提供了一种兼容方案,下面我们就来看看如何处理。

自定义配置

考虑到现实因素,我们可能并不想使用默认配置,或者至少需要一个过渡时期。为此,Apple允许我们在Info.plist文件中来自行配置以修改默认设置(Exceptions),下表是一些键值及对应的类型和说明:

示例

示例

示例

示例

示例

四.Scheme未正确设置可能导致应用程序间跳转会有问题

同一中的白名单

五.Requires full screen 未正确设置可能导致应用程序上传会失败 提示ITMS-90474 ITMS-90475

示例

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,390评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,821评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,632评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,170评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,033评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,098评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,511评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,204评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,479评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,572评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,341评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,213评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,576评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,893评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,171评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,486评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,676评论 2 335

推荐阅读更多精彩内容

  • 很可能你的应用是与一个支持HTTPS传输数据的服务器交互,但是并没有使用TLS 1.2或更高。在这种情况下,你定义...
    Www刘阅读 3,033评论 0 5
  • 因为要结局swift3.0中引用snapKit的问题,看到一篇介绍Xcode8,swift3变化的文章,觉得很详细...
    uniapp阅读 4,364评论 0 12
  • 在你的眼中,爱情该是有着什么样子,披着什么的面目呢? 如果要将爱情物化的话,你会怎么形容它? 轻烟?可望不可即...
    Cyufi阅读 1,039评论 0 0
  • 网络主播欧阳海水生活?现在大家都离不开网络,都是网络生活,是为了获取信息或网上购物,但也有不少人将网络作为一种生财...
    abby066阅读 238评论 0 0
  • 第一章 神圣妓院 降临 地球新历29年(第四次世界大战结束人类步入扬升后的第一个新世纪)地球消灭了种族差异,所有的...
    九吉阅读 739评论 0 5