刚刚在线

分享iOS开发技术经验的自媒体网站

非常棒的特效-MBMotion

随便实现的特效,正在不断丰富中…

目前实现的效果列表

MBMotionActionSheet

设计效果如下:

master

实现效果如下:

MBMotion

地址:

https://github.com/mmoaay/MBMotion

半年的iOS代码生活

在高考大军中拼杀过,也在大学校园中荒芜过,曾经低迷消沉,也常满怀壮志…… 但是最多的还是被称为小伙子以及自称为iOS工程师!博主就是这种喜闻乐见的这类人,实习一年后在2015年的毕业季顺利拿到了自己向往的一家创业公司的offer,也许相比很多毕业季的同学职场上顺利许多,但当深夜来临,显示器熄灭后望着荧幕出神的时候,毕业季我错过了很多也许一辈子都不会再相见的同学们的合影。半年里真正领略到了企业项目的开发的艰辛,以及团队协作的魅力,有太多太多的要说,终将其汇成一句话:哥加班半年后终于回来了!

1

半年时间,反正撸啊撸段位已经是万劫不复了,iOS9一发布加班的觉悟早有了,潜伏的XCodeGhost也被拎出来了,各种被脱裤的同行大佬们也是尿了一地,哥也被吓了一哆嗦,赶忙修改了1024的账号密码…… 2015年就是伴随这些琐事发展着,但是博主作为一个初入职场半年的工作总结当然不会是简单地流水账。

我知道你们都惦记着什么是1024,1024就是,呵呵,就是一款妈妈都说好玩的游戏啊~。

学习

干挨踢的学会学习远比你死背一个功能的代码来的有用。

在iOS学习中去尝试体会Cocoa模式,多留意Cocoa中的框架的类,他们的命名都有规范,相似抽象的对象会有相似的方法或者写法,比如:Mutable的类可能都有addXX、appendXX方法,Set、Array类型的类可能都会有enumerateXX的遍历方法……,又比如一个类的功能如果注重过程的话,苹果会选择使用delegate的方式,注重结果的话则会使用block ,学会总结比较、触类旁通、举一反三!

如果你能做到对Cocoa模式很熟悉的话,那么最新的3DTouch功能直接看类的头文件就会用了。

并且,第三方优秀的、热门的库都会遵循这一套编写规范,所以使用起来或者修改起来也才能够游刃有余!除了ReactiveCocoa之流除外。。

学习时候看一本书远没有敲一个项目来的有效果。

看书的时候总是会犯一个毛病,就是一看就懂,一写就懵。所以学习技术,我更推荐的是实践检真知!敲出来的代码才是学习到的,因为你在电脑前,你遇到不懂的你可以立刻Google,看到感兴趣的新类可以直接option+左键查看文档或者command+左键直接摆出头文件一览无遗!

当然WWDC别忘了看看,这是iOS最前沿的技术教学,即使听不懂也没关系,把音频外放,同事问你:哇,你听得懂呀。你微微一笑答道:听不懂。留下认真聆听却似享受的一道背影给同事,那可是满满的逼格。。呵呵,其实不然,视频中有大量PPT,有关键字,拿出来Google一番,再敲打一番,肯定你心中会觉得不虚此举哈,这样也锻炼了英文水平,这样的一波绝逼不亏呀。

说到英文,这个是技术进阶的基础,不要畏惧,刚开始看一篇英文文档可能花费你一天的时间,但是这才是第一手资料!国内译者的水平毕竟参差不齐,谬误在所难免,而且二手的资料,对于充满处女情结的你能接受么?能忍么?所以百度还是用来搜搜绯闻、床照之流就好,技术索引真不是它的强项,搜出来的东西都是deprecated的,实在浪费感情。

NSHipsterObjc.io ……都是不错的去处,大量的紧巴巴的干货,他们都有中文版,但是最新的资料的中文版还是会相对滞后。

再一个就是大婶们的博客,一天不读都浑身难受!

之前拜阅唐巧Boy的新书的时候,有一个博客列表非常不错,强势插入我的Feedly列表,我自己也有一些关注的大婶也加入了列表当中,这里给出分享OPML拿去玩。

沙龙、研讨什么的可以适当参加,看看荧幕外的世界,不要老说没有搞iOS的姑娘。

团队

讲一个故事:从前有个产品经理,他修改了3次需求,第二天他死了。

博主只想说的是,若不是博主心慈,我想我公司的产品经理已经死完后投胎又死一百次了。

我们都知道项目完成的水平直接由团队中是否有高效的协作而决定,也许有很多程序员长期的孤高冷艳惯了,他们说自己不需要团队!自己一个人就可以搞定一切,自己是UI、UE、产品、编码、测试甚至后端一条龙拿下,但是你将没有女朋友!!!

团队协作远比个人的英雄主义更有魅力,个人认为!

当下的快速迭代的大环境下,企业级开发下英雄主义是不太可取也不太可行的,所以融入团队,学会交流是工作顺利进展的保证;

当然团队协作中是否高效是否愉快就需要交流技巧了,每个人都有自恋的情节,即使是自己的工作技能也是如此,所以世界上存在着各种鄙视链

2

举一个简单地例子吧

公司常见撕逼的三个部门:研发部、产品部、市场部

研发的看不起产品、市场,觉得他们都不懂技术,只是天马行空,遇到Bug还大惊小怪……

产品的觉得自己的设计是天才的设定,参考了社会伦理学,色彩心理学,严格的人体工学设计……反驳自己的都是傻逼……

市场的觉得自己深入客户,自己才是最了解这个产品市场的,所产品应该按自己的市场为导向,颜色不对,字体客户肯定不喜欢,改改改……

在排除消极因素,投机倒把的极个别人存在,团队中的成员还是希望共同的目标能够完美的实现的,也就是说其实我们的“争吵”也是为了更好的产品,但是“争吵”的度确实很难把握,难免就因为工作却伤了私下的感情,这也是离职中众多原因之一,频繁的离职却会使得你的职业生涯成长增加时间成本,所以更好的工作方式是“学会交流”。

“学会交流”不单单是工作中用到,这也是我们的一生的学问!

例如有时候,产品部门不是很负责任的频繁变更需求,这可苦了研发的成员,你便可以玩笑似的给他讲一个故事:从前有个产品经理,他修改了3次需求……,我想这样的诙谐即会是的工作氛围愉悦许多也可能让产品的同事知道自己不负责任行为的影响。

但是需求变更,这个是研发一直要面对课题,所以你必须学会“预置性开发”,预置性包括使用一些优秀的设计模式的使用降低模块间的耦合,增加系统维护的灵活性,也可以有类似Placeholder的编码技巧,来随时应对不期而遇的需求变更,具体的做法,这也许需要另开一篇博文来讲述。

健康

如果还没有升职加薪,当上总经理,出任CTO,迎娶白富美,走向人生巅峰。却出师未捷身先死,这个都不太好玩,身边的同事以及博主自己都有或多或少的职业病产生了,博主躬亲力行地验证了一个道理:樯橹灰飞烟灭!别说撸代码还真的很带感,根本停不下来,所以最后颈椎,肩膀就是各种不适。说多都是泪,不过后来博主秉承了国人”先污染后治理”的方针,总算把身子调过来了,秘笈如下:

  • 练此功,不强制自宫
  • 好吧,这才是第一条,”不可久坐”x循环3次!!很重要,久坐流入脑子的血液会增加,从而造成下肢浮肿。由于久坐只限于局部肌肉活动,缺乏全身较大肌群动作,时间一长,久不动作的肌肉会逐步萎缩,机能衰退,还会使心、肺的后备能力降低,不能适应肌肉活动对血液循环和氧气供应的要求,一动就会心跳气急。肌肉长期不活动,热量消耗少,会加重脂肪和糖的代谢障碍,导致身体过分肥胖、动脉硬化及糖尿病。而且久坐一般皮肤质量较差,长时间静坐,受压血液流通不畅,易引起臂部瘙痒和隐痛,伏案工作者更甚,长期下去易导致颈椎炎,肩周炎,腰椎突出,脊柱变弯……我编不下去了,就问你怕不怕!!!所以多起身活动往非技术部走走,不然就会生病的哟(认不出雌性生物了)。
  • 坐姿

3

  • 尝试全键盘操作,多记记几个快捷键世界就安静了,反正博主的magic mouse干电池已扣,什么你的是最新款的鼠标没干电池?那为了你的健康着想拿给博主用吧,可减少手腕以及肩膀劳损的风险。这里分享一个Mac屏幕效率工具SizeUp 可减少鼠标的使用!
  • 运动运动运动!不要在被人黑了,老是被黑码农,油头垢面,肾虚患者……有意思么?我们是改变世界的工程师!不要再穿拖鞋上班了!!大家薪水都不低,穿得体面点吧。你可以和博主一样帅的。
  • 努力陪伴回你身边一直陪伴着你的人,那使你的精神最远是最佳的状态!什么?那就多打打电话给你妈妈吧,那是最美的人。

追求

不要担心30岁要转行,不要认为30K就是终点,不要一天工作30个小时。保持初心。

O ever youthful,O ever weeping.

后记

博主新开了一个博客系统,托管在了Github.io上,喜闻乐见的Jekll加借鉴(抄袭)的精美主题构建而成,反正样子应该还看得过去,如果有朋友有兴趣想了解iOS程序员为何日撸万行代码?数百奇巧淫技如何施展?无数干货为何频频送出?究竟编译器背后又隐藏着什么?这一切的背后是技术与生活的碰撞还是高效与投机的权衡?我真TM编不下去了,欢迎前往 [任意门]围观。

严肃地,如果你刚开始学习iOS开发或许可以从博主这里得到一些半干货。

生活愉快!

来自戴伟来的投稿

博客地址:http://daiweilai.github.io/

程序员的幽默你一定懂得

以下是关于程序员的一些笑话,据说看懂的人都还在加班中。

  1. 老婆给当程序员的老公打电话:下班顺路买十个包子,如果看到卖西瓜的,买一个。当晚老公手捧一个包子进了家门。老婆怒道:你怎么只买一个包子?!老公甚恐,喃喃道:因为我真看到卖西瓜的了。”

  2. 一程序员去面试,面试官问:“你毕业才两年,这三年工作经验是怎么来的?!”程序员答:“加班。”

  3. 某程序员对书法十分感兴趣,退休后决定在这方面有所建树。于是花重金购买了上等的文房四宝。一日,饭后突生雅兴,一番磨墨拟纸,并点上了上好的檀香,颇有王羲之风范,又具颜真卿气势,定神片刻,泼墨挥毫,郑重地写下一行字:hello world。

https

  1. 问:程序员最讨厌康熙的哪个儿子。答:胤禩。因为他是八阿哥(bug)

  2. 程序猿要了3个孩子,分别取名叫Ctrl、Alt 和Delete,如果他们不听话,程序猿就只要同时敲他们一下就会好的。

  3. 今天在公司听到一句惨绝人寰骂人的话:“你TM就是一个没有对象的野指针!”

  4. 程xx遭遇车祸成植物人,医生说她活下来的希望只有万分之一,唤醒更为渺茫。她的同事和亲人没放弃,并根据程xx对testing痴迷的作风,每天都在她身边念:“你测的模块上线后回滚了。”奇迹发生了,程xx醒来第一句话:确认那模块是我测的?

  5. 一个程序员在海滨游泳时溺水身亡。他死前拼命的呼救,当时海滩上有许多救生员,但是没有人救他。因为他一直大喊“F1!”“F1!”,谁都不知道“F1”究竟是什么意思。

  6. 世界上最远的距离,是我在if里你在else里,虽然经常一起出现,但却永不结伴执行。

  7. 正在码代码ing,医院回来的同事一脸的苦逼样子,问他怎么了?他回答:得了类风湿性关节炎了,我怕会遗传给下一代啊。我一脸的问号:谁说类风湿性关节炎能遗传的?丫一脸诧异:类不是继承的吗?

  8. 我很奇怪客栈这个词,难道后入住的必须先退房吗?

  9. 话说,决定一个程序员跳槽与否的关键因素是他前同事的现工资。

  10. 程序员最憋屈的事情就是:你辛辛苦苦熬夜写了一个风格优雅的源文件,被一个代码风格极差的同事改了且没署名,以至于别人都以为你是写的。

  11. 前端工程师说,我去交友网站找女朋友去了。朋友问,找到了么?工程师说,找到了他们页面的一个bug。

  12. C程序员看不起C++程序员, C++程序员看不起Java程序员, Java程序员看不起C#程序员,C#程序员看不起美工,周末了,美工带着妹子出去约会了,一群程序员还在加班!

  13. 据说一老外年轻的时候,立志要当一名伟大的作家。怎么才算伟大呢?他说:我写的东西全世界都要看到!看完他们必定会歇斯底里!会火冒三丈!会痛苦万分!结果,他成功了,他在微软公司负责写系统蓝屏时的报错提示信息。

  14. 程序员应聘必备词汇:了解=听过名字;熟悉=知道是啥;熟练=用过;精通=做过东西。

  15. 两程序员聊天,程序员甲抱怨:“做程序员太辛苦了,我想换行……我该怎么办?”程序员乙:“敲一下回车。”

  16. 程序员最讨厌的四件事:写注释、写文档、别人不写注释、别人不写文档……

  17. 假如生活欺骗了你,找50个程序员问问为什么编程;假如生活让你想死,找50个程序员问问Bug改完了没有;假如你觉得生活拮据,找50个程序员问问工资涨了没有;假如你觉得活着无聊,找50个程序员问问他们一天都干了什么!

  18. 男人要记住,与女人吵架的要领是,要像在安装软件或注册网站时阅读“服务条款”那样,直接忽略所有的内容,到最后面勾选“我同意”,然后点击“确定”。

  19. 朋友今天遇到的真事:客户说我们设备卡,死活找不到原因,工程师赶到现场,给客户换了个鼠标垫,故障排除……

  20. 产品经理:“你明白吧,这里向右划可以出菜单,然后需要一个闪烁的动画,还有,我想这个tab可以拉下来,你懂吧? 设计师:“别废话,把你要抄的产品给我看下。”

  21. 百度研发的无人驾驶汽车,你会发现有些地方你是去不了的。腾讯研发的无人驾驶汽车,你会发现很多地方你要去是要黄钻会员的。当然,谷歌研发的无人驾驶汽车,你会发现查无此车。

  22. 话说昨天是周日,程序猿跟产品经理一起看电视。每个节目看到一半程序猿就换台,看到一半就换台,几次之后产品经理终于忍无可忍的咆哮:老子刚看出点意思你就换、刚看出点意思你就换,到底还让不让人看啦?!程序猿淡定的盯着电视道:你半路改需求的时候我可没吱过声!

  23. “为什么删除手机上的图标的时候它们会抖?” “它们怕被删除呗。” “那为什么电话短信之类系统自带的删不掉的也在抖呢?” “那是它们在得瑟…”

  24. 有时候觉得,电脑就像一个高贵冷艳的妹纸。

400,是她冷冰冰地说:“我听不懂你在说什么”;

401,是她无情地转身:“我不认识你,别说那些奇怪的话”;

403,是她残酷的拒绝:“我听懂你的话,也认出你的脸,可我不爱你”;

404,是她紧闭心门:“我这儿没有你想要的东西”;

503,是“呵呵我去洗澡”。

  1. 问:为何软件正在占领全世界,而程序员得不到尊重?答曰:遍身罗绮者,不是养蚕人。

  2. 她来例假了肚子疼,他坐着她旁边,看了她一眼,拿出手机玩游戏,她看在眼里,心里凉了半截。两分钟后,她实在坐不下去了,正准备离开,只见他默默地递过来他的小米手机说:拿去捂着。

  3. 惊闻微软要裁员1.8万人。他们就不能让这些员工们“在后台运行”吗?

  4. 今天看到我同事在笔记本电脑上实现“滑动解锁”!真的,看到我当场就震精了,异常碉堡……你知道吗?!他的电脑开机解锁密码是“ASDFGHJKL;’”,然后唰得一下过去最后一个键落在回车上,就,就解锁了!

  5. 骗子网站太特么多了,你一打开,必定跳出一个很下流的游戏广告!——但这还不是最关键的,关键是如果你忍不住点击进入游戏之后,就会发现这些下流的元素全都不见了!这也太没有职业道德了吧!

  6. 最近发现自己陷入了一种状态,叫开机迷失。开电脑前,该做什么清清楚楚。但只要一登录,随手开个网页,刷下新闻微博甚至仅仅是音乐网站,然后再回过神来, 已经到了深夜,要做的事一项没做。而最痛苦的是,在睡前闭眼的时候,整个被浪费的白天和那些被耽误的正事,总会掺杂着负罪感,无比清晰地浮现。

  7. 我要设计一个新的智能机应用程序叫做”惊慌”,只要你一说 老婆 这两个字, 它就会关闭所有网页, 隐藏所有跟女性的聊天以及怪怪的文件夹, 并且把我老婆的照片设为墙纸。

  8. 我从苹果手机的背面知道了一个好地方叫做加利福尼亚,据说那里有阳光和沙滩,还有Google和Tesla。据说那里的人经常讨论怎么创业,而不是怎么移民。我虽然在中国,但也去过那里,不是在梦中,而是通过VPN。

  9. 边上工位的妹纸叫柳依依,她的爸爸也是位程序员,依依的大姐叫玲玲,二姐叫玲依,三姐叫依玲。

整理自网络

关于启用 HTTPS 的一些经验分享

https

随着国内网络环境的持续恶化,各种篡改和劫持层出不穷,越来越多的网站选择了全站 HTTPS。HTTPS 通过 TLS 层和证书机制提供了内容加密、身份认证和数据完整性三大功能,可以有效防止数据被查看或篡改,以及防止中间人冒充。本文分享一些启用 HTTPS 过程中的经验,重点是如何与一些新出的安全规范配合使用。至于 HTTPS 的部署及优化,之前写过很多,本文不重复了。

理解 Mixed Content

HTTPS 网页中加载的 HTTP 资源被称之为 Mixed Content(混合内容),不同浏览器对 Mixed Content 有不一样的处理规则。

早期的 IE

早期的 IE 在发现 Mixed Content 请求时,会弹出「是否只查看安全传送的网页内容?」这样一个模态对话框,一旦用户选择「是」,所有 Mixed Content 资源都不会加载;选择「否」,所有资源都加载。

比较新的 IE

比较新的 IE 将模态对话框改为页面底部的提示条,没有之前那么干扰用户。而且默认会加载图片类 Mixed Content,其它如 JavaScript、CSS 等资源还是会根据用户选择来决定是否加载。

现代浏览器

现代浏览器(Chrome、Firefox、Safari、Microsoft Edge),基本上都遵守了 W3C 的 Mixed Content 规范,将 Mixed Content 分为Optionally-blockable 和 Blockable 两类:

Optionally-blockable 类 Mixed Content 包含那些危险较小,即使被中间人篡改也无大碍的资源。现代浏览器默认会加载这类资源,同时会在控制台打印警告信息。这类资源包括:

通过  标签加载的图片(包括 SVG 图片);

通过 <img> 标签加载的图片(包括 SVG 图片);

通过 <video> / <audio> 和 <source> 标签加载的视频或音频;

预读的(Prefetched)资源;

预读的(Prefetched)资源;

除此之外所有的 Mixed Content 都是 Blockable,浏览器必须禁止加载这类资源。所以现代浏览器中,对于 HTTPS 页面中的 JavaScript、CSS 等 HTTP 资源,一律不加载,直接在控制台打印错误信息。

移动浏览器

前面所说都是桌面浏览器的行为,移动端情况比较复杂,当前大部分移动浏览器默认都允许加载 Mixed Content。也就是说,对于移动浏览器来说,HTTPS 中的 HTTP 资源,无论是图片还是 JavaScript、CSS,默认都会加载。

一般选择了全站 HTTPS,就要避免出现 Mixed Content,页面所有资源请求都走 HTTPS 协议才能保证所有平台所有浏览器下都没有问题。

合理使用 CSP

CSP,全称是 Content Security Policy,它有非常多的指令,用来实现各种各样与页面内容安全相关的功能。

block-all-mixed-content

前面说过,对于 HTTPS 中的图片等 Optionally-blockable 类 HTTP 资源,现代浏览器默认会加载。图片类资源被劫持,通常不会有太大的问题,但也有一些风险,例如很多网页按钮是用图片实现的,中间人把这些图片改掉,也会干扰用户使用。

通过 CSP 的 block-all-mixed-content 指令,可以让页面进入对混合内容的严格检测(Strict Mixed Content Checking)模式。在这种模式下,所有非 HTTPS 资源都不允许加载。跟其它所有 CSP 规则一样,可以通过以下两种方式启用这个指令:

HTTP 响应头方式:

Content-Security-Policy: block-all-mixed-content 

标签方式:

<meta http-equiv="Content-Security-Policy" content="block-all-mixed-content"> 


upgrade-insecure-requests

历史悠久的大站在往 HTTPS 迁移的过程中,工作量往往非常巨大,尤其是将所有资源都替换为 HTTPS 这一步,很容易产生疏漏。即使所有代码都确认没有问题,很可能某些从数据库读取的字段中还存在 HTTP 链接。

而通过 upgrade-insecure-requests 这个 CSP 指令,可以让浏览器帮忙做这个转换。启用这个策略后,有两个变化:

页面所有 HTTP 资源,会被替换为 HTTPS 地址再发起请求;

页面所有站内链接,点击后会被替换为 HTTPS 地址再跳转;

跟其它所有 CSP 规则一样,这个指令也有两种方式来启用,具体格式请参考上一节。需要注意的是 upgrade-insecure-requests 只替换协议部分,所以只适用于 HTTP/HTTPS 域名和路径完全一致的场景。

合理使用 HSTS

在网站全站 HTTPS 后,如果用户手动敲入网站的 HTTP 地址,或者从其它地方点击了网站的 HTTP 链接,依赖于服务端 301/302 跳转才能使用 HTTPS 服务。而第一次的 HTTP 请求就有可能被劫持,导致请求无法到达服务器,从而构成 HTTPS 降级劫持。

HSTS 基本使用

这个问题可以通过 HSTS(HTTP Strict Transport Security,RFC6797)来解决。HSTS 是一个响应头,格式如下:

Strict-Transport-Security: max-age=expireTime [; includeSubDomains] [; preload] 

max-age,单位是秒,用来告诉浏览器在指定时间内,这个网站必须通过 HTTPS 协议来访问。也就是对于这个网站的 HTTP 地址,浏览器需要先在本地替换为 HTTPS 之后再发送请求。

includeSubDomains,可选参数,如果指定这个参数,表明这个网站所有子域名也必须通过 HTTPS 协议来访问。

preload,可选参数,后面再介绍它的作用。

HSTS 这个响应头只能用于 HTTPS 响应;网站必须使用默认的 443 端口;必须使用域名,不能是 IP。而且启用 HSTS 之后,一旦网站证书错误,用户无法选择忽略。

HSTS Preload List

可以看到 HSTS 可以很好的解决 HTTPS 降级攻击,但是对于 HSTS 生效前的首次 HTTP 请求,依然无法避免被劫持。浏览器厂商们为了解决这个问题,提出了 HSTS Preload List 方案:内置一份列表,对于列表中的域名,即使用户之前没有访问过,也会使用 HTTPS 协议;列表可以定期更新。

目前这个 Preload List 由 Google Chrome 维护,Chrome、Firefox、Safari、IE 11 和 Microsoft Edge 都在使用。如果要想把自己的域名加进这个列表,首先需要满足以下条件:

拥有合法的证书(如果使用 SHA-1 证书,过期时间必须早于 2016 年);

将所有 HTTP 流量重定向到 HTTPS;

确保所有子域名都启用了 HTTPS;

输出 HSTS 响应头:

max-age 不能低于 18 周(10886400 秒);

必须指定 includeSubdomains 参数;

必须指定 preload 参数;

即便满足了上述所有条件,也不一定能进入 HSTS Preload Lis。通过 Chrome 的 chrome://net-internals/#hsts 工具,可以查询某个网站是否在 Preload List 之中,还可以手动把某个域名加到本机 Preload List。

对于 HSTS 以及 HSTS Preload List,我的建议是只要你不能确保永远提供 HTTPS 服务,就不要启用。因为一旦 HSTS 生效,你再想把网站重定向为 HTTP,之前的老用户会被无限重定向,唯一的办法是换新域名。

CDN 安全

对于大站来说,全站迁移到 HTTPS 后还是得用 CDN,只是必须选择支持 HTTPS 的 CDN 了。如果使用第三方 CDN,安全方面有一些需要考虑的地方。

合理使用 SRI

HTTPS 可以防止数据在传输中被篡改,合法的证书也可以起到验证服务器身份的作用,但是如果 CDN 服务器被入侵,导致静态文件在服务器上被篡改,HTTPS 也无能为力。

W3C 的 SRI(Subresource Integrity)规范可以用来解决这个问题。SRI 通过在页面引用资源时指定资源的摘要签名,来实现让浏览器验证资源是否被篡改的目的。只要页面不被篡改,SRI 策略就是可靠的。

SRI 并不是 HTTPS 专用,但如果主页面被劫持,攻击者可以轻松去掉资源摘要,从而失去浏览器的 SRI 校验机制。

了解 Keyless SSL

另外一个问题是,在使用第三方 CDN 的 HTTPS 服务时,如果要使用自己的域名,需要把对应的证书私钥给第三方,这也是一件风险很高的事情。

CloudFlare 公司针对这种场景研发了 Keyless SSL 技术。你可以不把证书私钥给第三方,改为提供一台实时计算的 Key Server 即可。CDN 要用到私钥时,通过加密通道将必要的参数传给 Key Server,由 Key Server 算出结果并返回即可。整个过程中,私钥都保管在自己的 Key Server 之中,不会暴露给第三方。

CloudFlare 的这套机制已经开源,如需了解详情,可以查看他们官方博客的这篇文章:Keyless SSL: The Nitty Gritty Technical Details。

好了,本文先就写到这里,需要注意的是本文提到的 CSP、HSTS 以及 SRI 等策略都只有最新的浏览器才支持,详细的支持度可以去 CanIUse 查。切换到 HTTPS 之后,在性能优化上有很多新工作要做,这部分内容我在之前的博客中写过很多,这里不再重复,只说最重要的一点:既然都 HTTPS 了,赶紧上 HTTP/2 才是正道。

内容来源:Jerry Qu的小站

一个弹性侧滑菜单

地址:https://github.com/lilei644/LLSlideMenu

作者lilei644

LLSlideMenu

This is a spring slide menu for iOS apps
一个弹性侧滑菜单

弹性动画原理借鉴该项目中阻尼函数实现

VIP群福利:Git使用教程(视频+PPT)

天才帝一步应用源代码分享到iOS开发实战交流VIP群,已经有不少朋友下载。这个APP也是一个小小的想法,希望能激发大家的灵感,做出更多有意义的属于自己的APP。

iOS开发实战交流VIP群已经有几百位朋友加入,这里是一个非常不错的交流平台,欢迎更多朋友加入!详情点击这里。

愿大家除了思维上、技术上有所提高,更能成为网络上无话不谈的知心朋友!

今天给大家分享Git使用教程:

Git是什么?

Swift开源一天Github收获15000多star

快,快,快!动动您的小手,分享给更多朋友!

苹果去年推出了全新的编程语言Swift,试图让iOS开发更简单,也承诺开源Swift代码。

昨天,苹果宣布:开源Swift,引起不少轰动,短短一天不到得时间,github上就有9000多star。对于广大开发者来说,真是一大福利!大家快取看看吧,一睹真容!

swift开源地址:https://github.com/apple/swift

官方Linux版本:https://swift.org/blog/swift-linux-port/

苹果官方github地址:https://github.com/apple

https://swift.org 是苹果官方的开发者社区,这里有Swift开发教程和指南。是个学习的好地方!

升级Xcode7之后VVDocumenter-Xcode不能用的解决办法

VVDocumenter-Xcode是Xcode上一款快速添加标准注释,并可以自动生成文档的插件。有了VVDocumenter-Xcode,规范化的注释,只需要输入三个斜线“///”就可以搞定,非常方面实用,目前已经支持Swift。

Objective-C效果图:

VVDocumenter1

Swift效果图:

VVDocumenter1

从Xcode 5开始,苹果要求加入UUID证书从而保证插件的稳定性。因此Xcode版本更新之后需要在VVDocumenter-Xcode的Info.plist文件中添加Xcode的UUID。

步骤如下:

一、查看Xcode的UUID

方式1

在终端执行

defaults read /Applications/Xcode.app/Contents/Info DVTPlugInCompatibilityUUID

VVDocumenter1

拷贝选中的字符串。

方式2

在/Applications目录中找到Xcode.app,右键”显示包内容”,进入Contents文件夹,双击Info.plist打开,找到DVTPlugInCompatibilityUUID,拷贝后面的字符串。

二、添加Xcode的UUID到VVDocumenter-Xcode的Info.plist文件

方式1–插件已经安装完成

1、打开xcode插件所在的目录:~/Library/Application Support/Developer/Shared/Xcode/Plug-ins;

2、选择已经安装的插件例如VVDocumenter-Xcode,右键”显示包内容”;

3、找到info.plist 文件,找到DVTPlugInCompatibilityUUIDs的项目,添加一个Item,Value的值为之前Xcode的UUID,保存。

VVDocumenter1

方式2–插件还未安装/重新安装

1、从GitHub克隆仓库到本地,在Xcode中打开项目,选择项目名称,在TAGETS下选中VVDocumenter-Xcode;

2、选择Info,找到DVTPlugInCompatibilityUUIDs的项目,添加一个Item,Value的值为之前Xcode的UUID;

3、Build项目,VVDocumenter-Xcode会自动安装。

三、重启Xcode

Xcode 6之后,重启Xcode时会提示“Load bundle”、 “Skip Bundle”,这里必须选择“Load bundle”,不然插件无法使用。

iOS开发之如何跳到系统设置里的各种设置界面

昨天的文章《iOS开发之如何跳到系统设置里的WiFi界面》介绍了如何从APP里跳到WiFi设置界面,很多朋友非常喜欢这样的小功能,还有朋友正想做这个功能刚好看见啦!

跳到更多设置界面

除了跳到WiFi设置界面,能不能跳到其他的设置界面呢?比如:定位服务、FaceTime、音乐等等。都是可以的,一起来看看如何实现的!