zoukankan      html  css  js  c++  java
  • 项目适配iOS9遇到的一些问题及解决办法(持续更新)

    网络请求报错。

    升级Xcode 7.0发现网络访问失败。
    输出错误信息
    #warning: 获取app配置信息失败: The resource could not be loaded because the App Transport Security policy requires the use of a secure connection.
    原因:iOS9引入了新特性App Transport Security (ATS)。
    详情:App Transport Security (ATS)
    新特性要求App内访问的网络必须使用HTTPS协议。
    但是现在公司的项目使用的是HTTP协议,使用私有加密方式保证数据安全。现在也不能马上改成HTTPS协议传输。
    最终找到以下解决办法:
    在Info.plist中添加NSAppTransportSecurity类型Dictionary。 在NSAppTransportSecurity下添加NSAllowsArbitraryLoads类型Boolean,值设为YES


    2F5721B6-2C74-4B59-84B3-7D77C541038F.png

    Bitcode问题

    原因:Xcode7 及以上版本会默认开启 bitcode 。
    bitcode具体是什么就不解释了。
    解决方法:
    1.更新library使包含Bitcode,否则会出现以上的警告。
    2.关闭Bitcode,简单粗暴。

    Build Settings”->”Enable Bitcode”改成"NO"。


    20150917113544983.jpg

    项目运行报错如下

    <Error>: CGContextSaveGState: invalid context 0x0. If you want to see the backtrace, please set CG_CONTEXT_SHOW_BACKTRACE environmental variable.
    <Error>: CGContextTranslateCTM: invalid context 0x0. If you want to see the backtrace, please set CG_CONTEXT_SHOW_BACKTRACE environmental variable.
    <Error>: CGContextRestoreGState: invalid context 0x0. If you want to see the backtrace, please set CG_CONTEXT_SHOW_BACKTRACE environmental variable.
    出错原因:设置app的状态栏样式的使用使用了旧的方式,在info.plist里面设置了View controller-based status bar appearance为NO,默认为YES,一般式iOS6的时候使用这种方式,iOS7,8也兼容,但是到了iOS9就报了警告。

    解决办法:

    删除 原先的设置代码
    //设置状态栏的白色 [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];

    修改方式将View controller-based status bar appearance设置为YES,然后使用新的方式来实现状态栏的样式。


    2F5721B6-2C74-4B59-84B3-7D77C541038F.png

    在你的 自定义导航控制器里面 写上如下方法:
    //设置状态栏的(亮色)白色
    -(UIStatusBarStyle)preferredStatusBarStyle { return UIStatusBarStyleLightContent; }
    记住要clean 或者删除应用程序 重新运行

    升级Xcode 7 之后 ios 9 模拟器 一启动程序 就直接报错

    报错如下
    ***** Assertion failure in -[UIApplication _runWithMainScene:transitionContext:completion:], /BuildRoot/Library/Caches/com.apple.xbs/Sources/UIKit_Sim/UIKit-3505.16/UIApplication.m:3294**

    原因:

    新的SDK不允许在设置rootViewController之前做过于复杂的操作,导致在didFinishLaunchingWithOptions 结束后还没有设置rootViewController
    Xcode7需要所有UIWindow必须立即先设置一个rootViewController

    解决办法:
    先设置个rootVIewController 之后重新赋值
    UIWindow *window = [[UIWindowalloc] initWithFrame:[UIScreenmainScreen].bounds]; window.rootViewController = [UIViewController new];

  • 相关阅读:
    白手起家的亿万富翁马克·库班,既是球队老板又是知名投资人
    放弃事业单位工作,他投身智能产品研发,开办三百家线下体验店
    从一名资深“吃货”到成为59家餐饮店老板,看他怎么成功转变的
    从餐厅的小小服务员成长为中式快餐创始人,看他如何逆袭的
    从摆摊开始,发展成坐拥十多家分店的企业家,看他如何蜕变的
    perl 2维数组转json
    获取 指定pool的成员状态,返回2维数组
    民生银行牛新庄:大数据及分布式技术在银行系统中实践应用
    Mockjs+Ajax实践
    Mockjs+Ajax实践
  • 原文地址:https://www.cnblogs.com/Sucri/p/4952942.html
Copyright © 2011-2022 走看看