IOS9 适配

公司Xcode 升级到了7.0之后,项目出现了各种问题,下面就对这些问题做个总结,给出解决方案.

一 app启动结束之前没有RootViewController

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

IOS9里面,不允许在didFinishLaunchingWithOptions协议结束之前没有rootViewController,最快得解决方法:
Window创建之后, 新建一个ViewController 名字可以随便, 把新建的这个ViewController 设置为WindowrootViewController,已做测试可以完美解决这个问题

    self.window =  [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];
    [self.window makeKeyAndVisible];
    [self.window addSubview:self.bigPlaceholderView];
   
    DefaultRootViewController * defaultRootVC = [[DefaultRootViewController alloc]init];
    self.window.rootViewController = defaultRootVC;

二 HTTP网络请求失败

IOS9要求App内访问的网络必须使用HTTPS协议。为了强制增强数据访问安全, iOS9 默认会把所NSURLConnectionCFURLNSURLSession发出的 HTTP 请求,都改为 HTTPS 请求:iOS9.x-SDK编译时,默认会让所有从NSURLConnectionCFURLNSURLSession发出的 HTTP 请求统一采用TLS 1.2 协议。因为 AFNetworking 现在的版本底层使用了 NSURLConnection ,众多App将被影响(基于iOS8.x-SDK的App不受影响)。服务器因此需要更新,以解析相关数据。如不更新,可通过在 Info.plist 中声明,倒退回不安全的网络请求。而这一做法,官方文档称为ATS,全称为App Transport Security,是iOS9的一个新特性。

方法一: 让公司服务端升级使用TLS 1.2
方法二: 可通过在info.plish中声明,倒回到不安全的网络请求,依然能让App访问指定http,甚至任意的http

1.在info.plist中添加 NSAppTransportSecurity类型Dictionary
2.在NSAppTransportSecurity下添加NSAllowsArbitraryLoads类型Boolean,值设为YES

IOS9 适配_第1张图片
demo.png
IOS9 适配_第2张图片
demo2.png

三 升级Xcode7 cocoapod管理的第三方出现各种报错

解决办法将cocoapod升级到最新的版本(如果你不是一个人写代码请让你同事的也升级了),或者把cocoapod里面的第三方都删除掉,然后重新安装一遍,简单说就是清空podfile里面的内容,然后依次执行pod install --no-repo-update,pod update --no-repo-update,然后再把你用的第三方粘贴到podfile里面再次依次执行 pod install --no-repo-update,pod update --no-repo-update,亲测可用

四 语言国际化

IOS9之后我发现,项目里面的国际化文字都不显示了,之前国际化那一行代码被我写成了宏,但是我把宏全局替换成了系统API#define NSLocalizedString(key, comment) \ [[NSBundle mainBundle] localizedStringForKey:(key) value:@"" table:nil]就没有任何事情了 , 后来我发现 这条代码本来 就是个宏定义...

其他太大的问题还没有发现,大家have Fine

你可能感兴趣的