前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >ios9 http请求失败的问题

ios9 http请求失败的问题

作者头像
用户1219438
发布于 2018-02-01 07:08:32
发布于 2018-02-01 07:08:32
2.1K00
代码可运行
举报
文章被收录于专栏:AliceAlice
运行总次数:0
代码可运行

最近做项目的时候 将电脑版本升级到10.11.3  xcode'升级到 7.2  但是在模拟器上边进行数据请求的时候告诉我说网路哦有问题

截图如下

通过网络终于找到了解决的办法  原来是ios9 采用了https

所以需要进行配置一下下就可以了。

推荐网址:http://segmentfault.com/a/1190000002933776  

最终找到以下解决办法:

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

看到很多同学修改后还是不能用添加一下截图:

  1. 在Filter中搜索Info.plist,选择Info.plist进行编辑
  1. 按照上面提到的方式添加信息,正确的修改会看到下图这个样子,注意类型NSAppTransportSecurityDictionaryNSAllowsArbitraryLoadsBoolean,复制粘贴的时候,不要多了空格,segment fault 页面上直接复制,经常会多一个出空格!
  1. 注意⚠️,单元测试下面也有一个Info.plist,修改那个文件是没有作用的!

补充说明

上面介绍的方法虽然解决了网络访问的问题,但是苹果提供的安全保障也被关闭了。 不过,按照国内的现状,关闭这个限制也许是更实际的做法。 至于原因就太多了,第三方SDK(几乎都是访问HTTP),合作伙伴接入(不能要求它们一定要支持HTTPS)。 如果你的App没有受到这些原因的限制,还是更建议你增加HTTPS支持,而不是关闭限制。 请大家根据项目的实际情况作调整。

出于安全考虑我们提倡使用HTTPS,退而求其次,优先考虑使用例外:将允许访问的域加入到配置列表中

@banxi1988 补充了配置的方法 对于实在不支持HTTPS的应该首先考虑添加例外

添加例外的方式也很简单: 左键Info.plist选择open with source code 然后添加类似如下的配置:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    <key>NSAppTransportSecurity</key>
    <dict>
        <key>NSExceptionDomains</key>
        <dict>
            <key>qq.com</key>
            <dict>
                <key>NSIncludesSubdomains</key>
                <true/>
            </dict>
            <key>sina.com.cn</key>
            <dict>
                <key>NSIncludesSubdomains</key>
                <true/>
            </dict>
           </dict>
   </dict>

根据自己需要的域名修改, NSIncludeSubdomains 顾名思义是包括子域的意思。

最近又看到了一些问题  就写到一块吧

 注册 登录

 添加关注

作者 勤奋的笨老头 2015.09.18 11:00*

写了10616字,被471人关注,获得了365个喜欢

项目适配iOS9遇到的一些问题及解决办法(更新两个小问题)原文链接http://www.jianshu.com/p/631bd7f12a38

1.网络请求报错。 升级Xcode 7.0发现网络访问失败。 输出错误信息

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

2.Scheme白名单问题(无法判断手机是否安装微信等)

-canOpenURL: failed for URL: "weixin://app/wxdaae92a9cfe5d54c/" - error: "This app is not allowed to query for scheme weixin"

搜索后得知

近期苹果公司iOS 9系统策略更新,限制了http协议的访问,此外应用需要在“Info.plist”中将要使用的URL Schemes列为白名单,才可正常检查其他应用是否安装。

受此影响,当你的应用在iOS 9中需要使用微信SDK的相关能力(分享、收藏、支付、登录等)时,需要在“Info.plist”里增加如下代码:

注意:截图来自微信开放平台,里面已经包含第一个问题的解决

完成后需使用Xcode 7编译。

如果你在模拟器上运行可以能还会有以下报错:

-canOpenURL: failed for URL: "weixin://app/wxdaae92a9cfe5d54c/" - error: "(null)"

这是因为模拟器上并没有安装微信,如果运行到真机上就不会有报错了。

请注意:未升级到微信客户端6.2.5及以上版本的用户,在iOS 9下使用到微信相关功能时,仍可能无法成功。

下面整理一些常用的白名单

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<key>LSApplicationQueriesSchemes</key>
<array>
    <string>mqqOpensdkSSoLogin</string>
    <string>mqzone</string>
    <string>sinaweibo</string>
    <string>alipayauth</string>
    <string>alipay</string>
    <string>safepay</string>
    <string>mqq</string>
    <string>mqqapi</string>
    <string>mqqopensdkapiV3</string>
    <string>mqqopensdkapiV2</string>
    <string>mqqapiwallet</string>
    <string>mqqwpa</string>
    <string>mqqbrowser</string>
    <string>wtloginmqq2</string>
    <string>weixin</string>
    <string>wechat</string>
</array>

qq登录绑定,qq支付,qq分享 微信支付,微信登录绑定 新浪登录绑定 支付宝支付,支付宝登录绑定

3.Bitcode问题(通俗解释:在线版安卓ART模式) 报错如下

ld: warning: directory not found for option '-F/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.0.sdk/Developer/Library/Frameworks' ld: -bundle and -bitcode_bundle (Xcode setting ENABLE_BITCODE=YES) cannot be used together clang: error: linker command failed with exit code 1 (use -v to see invocation)

Bitcode报错

原因:Xcode7 及以上版本会默认开启 bitcode 。 bitcode具体是什么就不解释了。

解决方法: 1.更新library使包含Bitcode,否则会出现以上的警告。 2.关闭Bitcode,简单粗暴。

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

4.项目运行报错如下

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<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就报了警告。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[[UIApplication sharedApplication]setStatusBarStyle:UIStatusBarStyleLightContent];

以前我们通过上面代码改变状态了颜色,iOS9以后点进去看api发现如下说明

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// Setting the statusBarStyle does nothing if your application is using the default UIViewController-based status bar system.
@property(readwrite, nonatomic) UIStatusBarStyle statusBarStyle NS_DEPRECATED_IOS(2_0, 9_0, "Use -[UIViewController preferredStatusBarStyle]");
- (void)setStatusBarStyle:(UIStatusBarStyle)statusBarStyle animated:(BOOL)animated NS_DEPRECATED_IOS(2_0, 9_0, "Use -[UIViewController preferredStatusBarStyle]");

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
- (UIStatusBarStyle)preferredStatusBarStyle;
- (UIViewController *)childViewControllerForStatusBarStyle;
- (void)setNeedsStatusBarAppearanceUpdate

2015.09.21更新 5 directory not found for option问题

警告如下:

ld: warning: directory not found for option '-F/Applications/Xcode 7.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator9.0.sdk/Developer/Library/Frameworks'

问题原因:Xcode7将framworks位置改变了。

解决方法: 点击项目,选择 Targets->xxxTests 选择build setting ,找到 Frameworks Search Path 或者 Library Search Paths 删除$(SDKROOT)/Developer/Library/Frameworks, 或者使用$(PLATFORM_DIR)/Developer/Library/Frameworks替换

framworks位置改变

暂时就这些,还有其他问题会继续更新 如果你们还有其他问题请参考:https://github.com/ChenYilong/iOS9AdaptationTips

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2016-01-21 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
iOS12、iOS11、iOS10、iOS9常见适配
Xcode10是默认选中的最新的New Build System(Default),在这个编译系统的环境下,不允许多个info.plist
conanma
2021/09/02
2.1K0
微信iOS9适配总结
每年iOS升级,都会带来一些坑,这次iOS9也不例外。本文总结了微信在适配iOS9上遇到的问题和解决方案。 一、iOS9问题汇总 1. 编译问题(Bitcode) 大部分人升级到Xcode7后,首先遇到的问题是编译不过,错误提示大致是 xxx does not contain bitcode. You must rebuild it with bitcode enabled (Xcode setting ENABLE_BITCODE), obtain an updated libra
微信终端开发团队
2018/01/29
2.2K0
微信iOS9适配总结
iOS适配
首先,需要在Info.plist配置文件中,增加键:UIViewControllerBasedStatusBarAppearance,并设置为YES;
码客说
2019/10/22
9810
【iOS开发】canOpenURL: failed for URL
如图是在我启动一个 Xcode 7 + iOS 9 的 App 之后,控制台的输出。
KyXu
2019/04/11
1.3K0
【iOS开发】canOpenURL: failed for URL
iOS开发之iOS10适配
公司的项目,临上线之前做了一下iOS10的适配,发现一大堆的坑,瞬间觉得苹果不友好了。 一、证书问题 打开xcode8.0时编译运行时出现下面问题:
s_在路上
2018/09/11
1.5K0
iOS开发之iOS10适配
iOS开发--使用友盟快速分享与第三方登录注意事项
在info.plist中加入安全域名白名单(右键info.plist用source code打开)
孙寅
2020/06/02
1.9K0
iOS开发--使用友盟快速分享与第三方登录注意事项
兼容-iOS9 适配 添加应用白名单及解除对http的访问限制
       iOS 9系统更新后限制了http协议的访问,此外第三方应用需要在“Info.plist”中列为白名单,才可正常检查其应用是否安装。受此影响,当你的应用在iOS 9中需要使用QQ/QQ空间/支付宝/微信SDK的相关能力(分享、收藏、支付、登录等)时,需要适配iOS 9 才行,否则会发现无法调取第三方应用。
進无尽
2018/09/12
2.3K0
兼容-iOS9 适配 添加应用白名单及解除对http的访问限制
iOS项目常用配置项
默认新建项目有两个文件LaunchScreen.storyboard和Main.storyboard
码客说
2019/10/21
1K0
iOS微信之登录授权(集成官方SDK)
前期准备工作:可以参考这篇博文http://www.jianshu.com/p/839dc30f2250 iOS版本只需要提供Bundle Id即可
专注APP开发
2019/11/07
2.8K0
iOS微信之登录授权(集成官方SDK)
iOS微信之简单文本分享(集成官方SDK)
前期准备工作:可以参考这篇博文http://www.jianshu.com/p/839dc30f2250 iOS版本只需要提供Bundle Id即可
专注APP开发
2019/11/07
2.1K0
iOS微信之简单文本分享(集成官方SDK)
iOS友盟社会化分享完全攻略
现如今几乎所有人都有社交账号和社交App,而分享功能也几乎随处可见。本文的目的在于介绍分享功能的基本实现。使用的是友盟的社会化分享组件,这样就不用一个一个对接各个平台的接口,可以使用一套接口来实现多个平台的分享功能。本文以分享到微信、QQ、微博为例。
Cloudox
2021/11/23
6970
iOS友盟社会化分享完全攻略
萝莉有话说:你的App真正适配了iOS 9吗?
时隔三月,如隔三秋。越过层层文档,穿过条条代码,小萝莉终于又和大家见面了!用户朋友们,我想死你们了!当然萝莉来此,并不是来和大家聊春晚的,我们的主题依旧是iOS。 Apple秋季产品发布会刚刚结束,iOS 9 GM版本也正式发布了。新的iPhone设备即将开售,iOS 9系统升级也将会在下周开始陆续进行推送。 在这之前,我们还可以为自己的App兼容适配做点什么,或者说,我们的App真的已经兼容适配好iOS 9系统了吗? 从7月份开始到现在,Apple已发布5个iOS 9的Beta版本,相信开发者在这段时间也
腾讯Bugly
2018/03/22
1.3K0
萝莉有话说:你的App真正适配了iOS 9吗?
​# iOS StatusBar 设置
StatusBar的全局设置,需要首先在info.plist中设置View controller-based status bar appearance为NO,关掉按界面设置status bar 显示。
莫空9081
2021/06/30
1.3K0
iOS9系列专题四——APP传输安全 原
        随着ios9的推出和Xcode的升级,apple将默认开发者使用https的传输方式,相比http的传输协议,这无疑会增加一些安全性,对于开发者而言,一下子将http协议全部升级为https协议,不是一件容易的事,我们可以通过Xcode的一些配置,使其支持http的传输协议。
珲少
2018/08/16
5280
iOS9系列专题四——APP传输安全
                                                                            原
iOS 9不能访问HTTP的解决方法
在iOS 9之后,苹果默认要求App访问的url必须为https的安全链接,http链接确实是不安全的,如果在开发过程中请求失败,控制台显示http不安全要用https之类的信息的话,那就是由于这个原因了。但是由于并非所有开发者都会去申请HTTPS证书来支持HTTPS访问,所以还是可以进行设置来正常访问HTTP的,方法如下:
Cloudox
2021/11/23
1.6K0
iOS 9不能访问HTTP的解决方法
iOS9系列专题6——iOS9其他适配注意点 原
        在iOS8中,APP的定位服务apple就做了一些修改,需要用户申请相应的权限,并在info.plist文件中添加对应的键值。具体的做法在这篇博客中有详细的讲解:http://my.oschina.net/u/2340880/blog/414760。
珲少
2018/08/16
4570
iOS9系列专题6——iOS9其他适配注意点
                                                                            原
ShareSDK第三方分享与登录遇到的问题
现在有闲写写之前我在使用 ShareSDK 第三方分享与登录遇到的问题,我在使用是官网版本:V3.2.0(现在版本:V3.2.1)的时候遇到问题,都是适配iOS9新特性的问题 Mob 官网有很详细文
LeeCen
2018/10/11
1.1K0
ShareSDK第三方分享与登录遇到的问题
1、大部分社交平台接口不支持https协议。
参考文献来自:http://wiki.mob.com/ios9-%E5%AF%B9sharesdk%E7%9A%84%E5%BD%B1%E5%93%8D%EF%BC%88%E9%80%82%E9%85%8Dios-9%E5%BF%85%E8%AF%BB%EF%BC%89/   问题描述:在iOS9下,系统默认会拦截对http协议接口的访问,因此无法获取http协议接口的数据。对ShareSDK来说,具体表现可能是,无法授权、分享、获取用户信息等。 还可能造成我们的编辑界面里传http之类的网络图片的时候,我
用户1219438
2018/02/01
1.1K0
1、大部分社交平台接口不支持https协议。
iOS常用代码段
控制器中代码设置 > storybord设置 > 全局设置 优先级高的会覆盖优先级低的配置,比如storybord中的设置了navigationbar的样式 那么全局设置就不生效
码客说
2019/10/22
8140
iOS 知识小集(Status Bar变换)
iOS 中经常会有需要在某个界面改变状态栏颜色或者某个界面隐藏状态栏的需求。而改变状态栏颜色和控制状态栏显示和隐藏的API,在iOS 的不同版本中也发生了很多变化。
Haley_Wong
2018/08/22
1.3K0
iOS 知识小集(Status Bar变换)
相关推荐
iOS12、iOS11、iOS10、iOS9常见适配
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验