一篇搞定iOS 9适配--系列教程

iOS9以来,提交应用到AppStore审核遇到的坑 iOS9的升级无疑是一次大的变动,加入了许多的元素,让应用有了更多拓展的空间. 耳熟能详的就是 3D Touch. 还有HTTPS请求.这是议论最多的点! 但是还有好多变动的细节,只有真正开发中才能了解到这是时期 要快速适配iOS的那种不能言语的痛苦,那么就来说说iOS9 向我这样的开发者带来的巨大风波吧! 最近赶上公司要融资,提升App的比格,所以设计了牛逼的首页, 阅读详情

转载自:http://www.08kan.com/gwk/MjM5OTM0MzIwMQ/208621604/1/e6c8e5eba85d48e7c6b7229d711b6165.html

Demo1_iOS9网络适配_改用更安全的HTTPS


iOS9把所有的http请求都改为https了:iOS9系统发送的网络请求将统一使用TLS 1.2 SSL。采用TLS 1.2 协议,目的是 强制增强数据访问安全,而且 系统 Foundation 框架下的相关网络请求,将不再默认使用 Http 等不安全的网络协议,而默认采用 TLS 1.2。服务器因此需要更新,以解析相关数据。如不更新,可通过在 Info.plist 中声明,倒退回不安全的网络请求。


在讨论之前,跟往常一样,先说下iOS程序猿们最关心的问题:


跟我有毛关系?需要我加班吗?!


首先咱们来看下业内对Apple这一做法的评论:

这是某社交App上讨论,看来业内还是吐槽声和肯定声同在。


结论是:


跟你很有关系,加班吧,少年!


书归正传【严肃脸】,我们正式讨论下 WHAT,WHY,HOW:


  1. WHAT(什么是SSL/TLS?跟HTTP和HTTPS有什么关系)

  2. WHY(以前的HTTP不是也能用吗?为什么要用SSL/TLS,闲得慌?!Apple是不是又在反人类?)

  3. HOW(如何适配?---弱弱地问下:加班要多久?)


WHAT(什么是SSL/TLS?跟HTTP和HTTPS有什么关系)


跟往常一样,先说结论:


HTTP+SSL/TLS+TCP = HTTPS


TLS 是 SSL 新的别称。举个例子:


“TLS1.0”之于“SSL3.1”,犹“公元2015”之于“民国104”,或者是“一千克”之于“一公斤”,或者是“半斤”之于“八两”:称呼不同,但意思相同。


SSL 3.0版本之后的迭代版本被重新命名为TLS 1.0,


也就是说:


TLS 1.0 = SSL 3.1


所以他们是一个东西,我们平常也经常简单见到 “SSL/TLS” 这种说法。


常用的是下面这些:


  • SSL 2.0

  • SSL 3.0

  • TLS 1.0 (SSL 3.1)

  • TLS 1.1 (SSL 3.1)

  • TLS 1.2 (SSL 3.1)


那为什么标题是“使用HTTPS”而没有提及SSL和TLS什么事? 要理解这个,要看下一个公式:


HTTP+SSL/TLS+TCP = HTTPS


打个比方:如果原来的 HTTP 是塑料水管,容易被戳破;那么如今新设计的 HTTPS 就像是在原有的塑料水管之外,再包一层金属水管。一来,原有的塑料水管照样运行;二来,用金属加固了之后,不容易被戳破。


目前,应用最广泛的是TLS 1.0,接下来是SSL 3.0。但是,主流浏览器都已经实现了TLS 1.2的支持。


Apple让你的HTTP采用SSL/TLS协议,就是让你从HTTP转到HTTPS


WHY(以前的HTTP不是也能用吗?为什么要用SSL/TLS,闲得慌?!Apple是不是又在反人类?)


不使用SSL/TLS的HTTP通信,就是不加密的通信!


所有信息明文传播,带来了三大风险:


  1. 窃听风险(eavesdropping):第三方可以获知通信内容。

  2. 篡改风险(tampering):第三方可以修改通信内容。

  3. 冒充风险(pretending):第三方可以冒充他人身份参与通信。


SSL/TLS协议是为了解决这三大风险而设计的,希望达到:


  1. 所有信息都是加密传播,第三方无法窃听。

  2. 具有校验机制,一旦被篡改,通信双方会立刻发现。

  3. 配备身份证书,防止身份被冒充。


HOW(如何适配?---弱弱地问下:加班要多久?)


正如文章开头所说:


TLS 1.2 协议 强制增强数据访问安全 系统 Foundation 框架下的相关网络请求,将不再默认使用 Http 等不安全的网络协议,而默认采用 TLS 1.2。服务器因此需要更新,以解析相关数据。如不更新,可通过在 Info.plist 中声明,倒退回不安全的网络请求。


方案一:立即让公司的服务端升级使用TLS 1.2


方案二:虽Apple不建议,但可通过在 Info.plist 中声明,倒退回不安全的网络请求依然能让App访问指定http,甚至任意的http,


具体做法见gif图,示例Demo见 Demo1

正如 Apple官方文档 所说 :

Info.plist 配置中的XML源码如下所示:


NSAppTransportSecurity NSExceptionDomains yourserver.com 

NSIncludesSubdomains 

NSTemporaryExceptionAllowsInsecureHTTPLoads 

NSTemporaryExceptionMinimumTLSVersion TLSv1.1


If your application (a third-party web browser, for instance) needs to connect to arbitrary hosts, you can configure it like this:


NSAppTransportSecurity 

NSAllowsArbitraryLoads


声明:目前Apple的官方文档并未提及如何在 Info.plist 配置,我将密切关注官方文档,如有提及,再来更新本文 .



Demo2_iOS9新特性_更灵活的后台定位

Demo:GitHub地址


【iOS9在定位的问题上,有一个坏消息一个好消息】坏消息:如果不适配iOS9,就不能偷偷在后台定位(不带蓝条,见图)!好消息:将允许出现这种场景:同一App中的多个location manager:一些只能在前台定位,另一些可在后台定位,并可随时开启或者关闭特定location manager的后台定位。


如果没有请求后台定位的权限,也是可以在后台定位的,不过会带蓝条:

如何偷偷在后台定位:请求后台定位权限:


// 1. 实例化定位管理器

_locationManager = [[CLLocationManager alloc] init];

// 2. 设置代理

_locationManager.delegate = self;

// 3. 定位精度

[_locationManager setDesiredAccuracy:kCLLocationAccuracyBest];

// 4.请求用户权限:分为:?只在前台开启定位?在后台也可定位,

//注意:建议只请求?和?中的一个,如果两个权限都需要,只请求?即可,

//??这样的顺序,将导致bug:第一次启动程序后,系统将只请求?的权限,?的权限系统不会请求,只会在下一次启动应用时请求?

if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 8) {

//[_locationManager requestWhenInUseAuthorization];//?只在前台开启定位

[_locationManager requestAlwaysAuthorization];//?在后台也可定位

}

// 5.iOS9新特性:将允许出现这种场景:同一app中多个location manager:一些只能在前台定位,另一些可在后台定位(并可随时禁止其后台定位)。

if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 9) {

_locationManager.allowsBackgroundLocationUpdates = YES;

}

// 6. 更新用户位置

[_locationManager startUpdatingLocation];


但是如果照着这种方式尝试,而没有配置Info.plist,100%你的程序会崩溃掉,并报错:


*** Assertion failure in -[CLLocationManager setAllowsBackgroundLocationUpdates:], /BuildRoot/Library/Caches/com.apple.xbs/Sources/CoreLocationFramework_Sim/CoreLocation-1808.1.5/Framework/CoreLocation/CLLocationManager.m:593


要将 Info.plist 配置如下:

对应的 Info.plist 的XML源码是:

Bitcode(通俗解释:在线版安卓ART模式)


未来Watch应用须包含Bitcode,iOS不强制,但Xcode7默认会开启Bitcode。


如何适配?


方法一:更新library使包含Bitcode,否则会出现以下中的警告;


(null): URGENT: all bitcode will be dropped because '/Users/myname/Library/Mobile Documents/com~apple~CloudDocs/foldername/appname/GoogleMobileAds.framework/GoogleMobileAds(GADSlot+AdEvents.o)' was built without bitcode. You must rebuild it with bitcode enabled (Xcode setting ENABLE_BITCODE), obtain an updated library from the vendor, or disable bitcode for this target. Note: This will be an error in the future.


方法二:关闭Bitcode,方法见下图

更多信息,请移步 bitcode 苹果官方文档

,和 WWDC 2015 Session 102: "Platforms State of the Union"

企业级分发


iOS9之前,企业级分发十分方便:点击App出现“信任按钮”,

iOS9以后,企业级分发ipa包将遭到与Mac上dmg安装包一样的待遇:默认不能安装,也不再出现“信任按钮”

必须让用户进行gif图中的设置(相关Demo:https://github.com/ChenYilong/iOS9AdaptationTips/ )

URL scheme


在iOS9中,如果使用URL scheme必须在"Info.plist"中将你要在外部调用的URL scheme列为白名单,否则不能使用。key叫做LSApplicationQueriesSchemes ,键值内容是


LSApplicationQueriesSchemes urlscheme urlscheme2 urlscheme3 urlscheme4


推荐一篇博客: http://awkwardhare.com/post/121196006730/quick-take-on-ios-9-url-scheme-changes


其中最关键的是以下部分:


If you call the “canOpenURL” method on a URL that is not in your whitelist, it will return “NO”, even if there is an app installed that has registered to handle this scheme. A “This app is not allowed to query for scheme xxx” syslog entry will appear.

If you call the “openURL” method on a URL that is not in your whitelist, it will fail silently. A “This app is not allowed to query for scheme xxx” syslog entry will appear.


更多信息请移步:WWDC 2015 Session 703: "Privacy and Your App" 时间在30:18左右

iPad适配Slide Over 和 Split View

【iPad适配Slide Over 和 Split View】 若想适配multi tasking特性,唯一的建议:弃纯代码,改用storyboard、xib,纵观苹果WWDC所有Demo均是如此:


  1. Mysteries of Auto Layout, Part 1

  2. What's New in Storyboards

  3. Implementing UI Designs in Interface Builder

  4. Getting Started with Multitasking on iPad in iOS 9

  5. Optimizing Your App for Multitasking on iPad in iOS

安卓夏娜桌宠开发:小米17pro背屏适配与交互实现 Android桌面应用开发涉及UI绘制、触摸事件处理和动画调度等核心技术。通过View系统实现界面渲染,利用MotionEvent处理用户交互,结合属性动画框架创建流畅视觉效果。这些技术能够为移动设备带来丰富的个性化体验,特别是在副屏等特殊显示场景下具有重要应用价值。本文以夏娜桌宠项目为例,详细介绍如何在安卓平台实现虚拟角色交互,特别是针对小米17pro背屏的适配方案,涵盖触摸响应、语音反馈等核心功能的工程实践。 阅读详情

相关推荐

别再盲调PID了!手把手教你用VOFA+实时可视化电机速度曲线(附STM32F4源码)

本文详细介绍了如何使用VOFA+工具实现PID参数的可视化调试,帮助开发者从盲调转向精准调优。通过实时可视化电机速度曲线,结合STM32F4源码示例,展示了如何高效调试Kp、Ki、Kd参数,解决响应慢、超调等常见问题,大幅提升电机控制系统的性能。

weixin_28366475的博客 129

LSApplicationQueriesSchemes

从iOS9之后,引入了白名单的概念。 1、在iOS9之后,如果使用 canOpenURL:方法,该方法所涉及到的 URL Schemes 必须在"Info.plist"中将它们列为白名单,否则不能使用。key叫做LSApplicationQueriesSchemes ,键值内容是对应应用程序的URL Schemes; 2、在iOS9.0后,涉及到平台客户端的跳转,系统会自动到info.plist下...

heqiang2015的博客 1万+

手把手教你用CMake和MinGW64编译libuvc:静态链接与动态链接的选择

本文详细指导如何在Windows平台上使用CMake和MinGW64编译libuvc库,并深入探讨静态链接与动态链接的选择策略。通过对比两种链接方式在部署复杂度、内存占用和版本管理等方面的差异,帮助开发者根据项目需求做出最优决策,实现高效的USB摄像头开发。

weixin_29171087的博客 255

iOS9 URLScheme白名单

常见URL Scheme LSApplicationQueriesSchemes wechat weixin sinaweibohd sinaweibo sinaweibosso weibosdk weibosdk2.5 mqqapi mqq mqqOpensdkSSoLogin

Tudouyang的专栏 1290

Python实战:基于PyG和Stable-Baselines3复现柔性车间调度算法(附数据集)

本文提供了一份基于图神经网络与深度强化学习的柔性车间调度实战指南。通过PyTorch Geometric构建异构图表示车间状态,并利用Stable-Baselines3中的PPO算法训练调度智能体,详细介绍了从环境建模、网络设计到训练评估的完整代码实现,帮助开发者构建可复用的工业级智能调度系统。

ansible6ops的博客 608

从零开始做题:big_zip

内容为:You_know_the_bed_feels_warmer_Sleeping_here_alone_You_know_I_dream_in_color_And_do_the_things_I_want_You_think_you_got_the_best_of_me_Think_you_had_the_last_laugh_Bet_you_think_that_everything_good_is_gone。查看压缩包内容,发现有五字节长度的文件,用crc碰撞攻击破解明文。

weixin_44626085的博客 1242

LSApplicationQueriesSchemes--关于info.plist 第三方登录 添加URL Schemes白名单

近期苹果公司iOS 9系统策略更新,限制了http协议的访问,此外应用需要在“Info.plist”中将要使用的URL Schemes列为白名单,才可正常检查其他应用是否安装。 当你的应用在iOS 9中需要使用 QQ/QQ空间/支付宝/微信SDK 的相关能力(分享、收藏、支付、登录等)时,需要在“Info.plist”里增加如下代码: key>LSApplicationQuerie

xinxinNoGiveUp的博客 1万+

Raspberry Pi 4 ARM Trusted Firmware 技术解析

摘要: 本文详细介绍了在树莓派4(Raspberry Pi 4)上移植ARM可信固件(TF-A)的实现方案与安全考量。该移植专注于BL31功能,作为非安全世界(如Linux内核)的启动桥梁,支持加载EL2级别程序。文章分析了启动流程、内存映射设计,并对比了RPi3与RPi4的关键差异,指出当前版本缺乏硬件级安全内存保护的局限性。此外,提供了构建指南、配置说明及设备树自动修补的实现细节,强调通过config.txt简单配置即可启动64位内核。该方案充分利用树莓派原有GPU固件流程,兼顾兼容性与简易性。

Linux内核架构师 932

xcode8.0以上设置应用白名单,找不到LSApplicationQueriesSchemes

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34194087的博客 4233

华为OD机试真题2026双机位C卷 C语言 实现【主次关联成环警告】

在ICT运维领域,现网运维工程师面向对设备上报的众多告警,往往需要筛选出最主要的告警优先处理,次等级的告警或许为同一个根因导致的告警,处理优先级会放后或者不处理,这样就诞生出主次关联告警的概念。给定一系列告警的主次关联关系,判断是否存在如下情况:

MISAYAONE的博客 172

我的世界进阶模组开发教程——制作机械动力附属模组

摘要: Create是Minecraft的机械动力模组,其代码结构分为多个关键模块: 数据生成系统:通过CreateRecipeProvider基类实现配方自动化生成,支持多步骤序列化装配配方(SequencedAssemblyRecipeGen),采用建造者模式链式调用; 注册管理:CreateRegistrate扩展了Registrate库,统一管理方块、流体、实体等注册,集成标签页分类和工具提示定制; 伤害系统:DamageTypeTagGen为机械伤害(如钻头、风扇火焰)定义原版兼容的标签; 客户端

qq_24992377的博客 2083

即学即用- URL Scheme、Universal Links

在实际开发过程中,我们常会遇到微信分享、QQ分享、微博分享、微信支付、支付宝支付等诸如此类的需要唤醒第三方App的需求。但是在接入这些第三方SDK时,常见的两种手段,一种是使用URL Scheme,另外一种是使用Universal Links。

烂笔头 4849

一张微服务地图的十年演进:Spring Cloud 核心、扩展与工具组件的定位、原理与选型

本文把 Spring Cloud 当作一张微服务地图来读:先说明它是由 Commons 抽象层、实现层和 Boot 装配层构成的发行版,再沿一次请求梳理注册发现、负载均衡、声明式调用、容错限流、网关、配置、追踪与总线七类核心组件的原理与换代,并扩展到云平台、服务网格、消息流、批处理、安全与周边生态。仿真实测:默认参数下实例宕机平均 242 秒才被感知,优雅下线降到 47 秒;一个慢实例让轮询的 P99 达 49 秒,P2C 仅 203 毫秒。最后给出退场替代表、技术栈组合、升级路线和决策树。

曾经“等你生日那天”都遥远得像未来,如今却可欢愉的挥手说“下个十年见” 169万+

微信 iOS9 适配总结

每年iOS升级,都会带来一些坑,这次iOS9也不例外。本文总结了微信在适配iOS9上遇到的问题和解决方案。 一、iOS9问题汇总 1. 编译问题(Bitcode) 大部分人升级到Xcode7后,首先遇到的问题是编译不过,错误提示大致是 xxx does not contain bitcode. You must rebuild it with bitco

MIRAGE086的专栏 1674

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

搞定iOS9适配--系列教程

内容来源:http://www.china-7.net/view-155058.html Demo1_iOS9网络适配_改用更安全的HTTPS iOS9把所有的http请求都改为https了:iOS9系统发送的网络请求将统一使用TLS 1.2 SSL。采用TLS 1.2 协议,目的是 强制增强数据访问安全,而且 系统 Foundation 框架下的相关网络请求,将不再默认使

jijiji000111的专栏 1208

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

微信iOS 9适配总结

一、iOS9问题汇总 1. 编译问题(Bitcode) 大部分人升级到Xcode7后,首先遇到的问题是编译不过,错误提示大致是 xxx does not contain bitcode. You must rebuild it with bitcode enabled (Xcode setting ENABLE_BITCODE), obtain an updated libr

MingGe0107的博客 1011

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

iOS屏幕适配方案详解

xcode6之后只有一个,并且是正方形的,也就是说不管你做那种屏幕尺寸的app(无论是ipad还是iphone),都只用这一个storyboard就可以了;这一部分相当于是一个autoResizing,强大之处在于可以是任意两个view的相对布局,可以设置距离父控件的上下左右位置(红色框),还有自身的宽高,还可以相对其他控件设置宽高(蓝色框)autoresizing是苹果早期的ui布局适配的解决办法,所有的ui控件只要相对父控件布局就可以了,没错autoResizing就是一个相对于父控件的布局解决方法;

liuxinzhongliubin的博客 1674

iOS9 的HTTPS适配

iOS9发布之后,公司在App Store上的应用能否在iOS9上正常运行,为了证实这个东西,我特地在虚拟机上把开发环境升级到Xcode7和iOS9,当然电脑操作系统是需要 相应升级的,升级完之后,果断发现,之前公司的应用在iOS9上竟然无法连接网络获取数据了。     暂时没时间去升级接口,只能先补漏了,至少让整个App到时候能正常使用,当然先不去说所谓的安全性怎样怎样的问题。修改方法

ynynynynx4的博客 323

转 微信iOS 9适配总结

每年iOS升级,都会带来一些坑,这次iOS9也不例外。本文总结了微信在适配iOS9上遇到的问题和解决方案。 一、iOS9问题汇总 1. 编译问题(Bitcode) 大部分人升级到Xcode7后,首先遇到的问题是编译不过,错误提示大致是 xxx does not contain bitcode. You must rebuild it with bitcode enabl

ZWQ0325的博客 995

iOS9适配总结

每年iOS升级,都会带来一些坑,这次iOS9也不例外。本文总结了微信在适配iOS9上遇到的问题和解决方案。 一、iOS9问题汇总 1. 编译问题(Bitcode) 大部分人升级到Xcode7后,首先遇到的问题是编译不过,错误提示大致是 xxx does not contain bitcode. You must rebuild it with bitcode enabled...

weixin_33894992的博客 126

ios 语言适配默认语言_iOS开发之多国语言国际化适配经验浅谈

12.jpgiOS多国语言国际化由于我个人也是第一次做,所以遇到了很多问题,在此我把我所遇到的一些问题分享给大家。最基础的怎么进行多国语言国际化在此就不老生常谈了,有兴趣的朋友可自行百度。1.首先我们说下翻译的格式:"你好" = "hello";我们可以把需要翻译的文档制作成"你好" = "";这种Word文档每一种语言一个Word文档,这样你会发现,你做国际化的时候会快很多,不必到处找啊找的,我...

weixin_31458015的博客 437

ios9 jsonkit

升级到iOS9之后,使用XCode7编译时,发现JSONKit不幸的又出现问题了,那么如何解决呢? 解决方案1:等待JSONKit更新,同时等待所有使用JSONKit的第三方SDK更新(好吧这方法是逗你玩的) 解决方案2:使用系统的!!但是使用系统JSON解析很麻烦,项目改动又比较多,怎么办? 这时候可以试试我之前写的小库,完美兼容JSONKit的常用方法,并且采用系...

dazunqu2481的博客 138
上一篇: 自定义控件触控方法的调整,解决对应的触控事件没有调用的BUG
下一篇: cocos2dx 多个精灵执行同一个动作
harryptter
博客等级 码龄18年 370粉丝 184原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值