iOS开发月报#12|201906

这里记录过去一个月,我看到的值得分享的内容,包含但不限于iOS知识,每个月的最后一天发布。 欢迎推荐内容,可以前往zhangferry/iOSMonthlyReport提交issue。

Tips

闪光动画

图片上的闪光动画,类似这种效果: 分析拆解可知这是一个带透明的白色渐变移动产生的效果。渐变+移动,我们可以使用CAGradientLayer + CABasicAnimation实现:

func showGradientAnimation() {
    let gradient = CAGradientLayer()
    gradient.frame = canvasView.bounds
    //左上角到右下角的渐变
    gradient.startPoint = CGPoint(x: 0, y: 0)
    gradient.endPoint = CGPoint(x: 1, y: 1)
    gradient.locations = [0.0, 0.0, 0.0]
    //调透明度渐变要使用白色
    gradient.colors = [UIColor.init(white: 1, alpha: 0.0).cgColor,
                           UIColor.init(white: 1, alpha: 0.3).cgColor,
                           UIColor.init(white: 1, alpha: 0.0).cgColor]
    
    canvasView.layer.addSublayer(gradient)

    let animation = CABasicAnimation.init(keyPath: "locations")
    //从0位置开始从1位置结束
    animation.fromValue = [0, 0, 0.3]
    animation.toValue = [0.7, 1, 1]
    animation.duration = gradientAnimationDuration
    animation.repeatCount = 1
    animation.isRemovedOnCompletion = true
    gradient.add(animation, forKey: nil)
}

集成Universal Links时的几点注意事项

这个是onlink总结对于各个平台对应用间跳转的支持情况,其中deeplink指Universal Links:

跳转至facebook指定页面

如果是facebook某一主页,可以通过:

//这里可以替换成自己的主页id
let url = URL(string: "fb://page?id=**")! 
UIApplication.shared.open(url, options: [:], completionHandler: nil)

这是使用了app scheme的方式进行跳转的,要求本机安装了facebook才能跳转成功。

如果是跳转到某一个主页的某一个帖子,可以通过:

//这里替换成固定的帖子链接
let url = URL(string: "https://www.facebook.com/**/posts/**")! 
UIApplication.shared.open(url, options: [:], completionHandler: nil)

这是通过Universal Links方式跳转的,该链接可以通过苹果的验证。如果未安装应用会跳转到网页端,如果安装了就直接跳到指定页面。

那正常来说,facebook主页也应该可以通过支持deep link的https链接跳转才对,但实际测试来看是不行的。所以如果要加上是否安装的逻辑的话,就是:

let url = URL(string: kFacebookHomePageSchemeUrl)!
if UIApplication.shared.canOpenURL(url) {
    UIApplication.shared.open(url, options: [:], completionHandler: nil)   
} else {
    UIApplication.shared.open(URL(string: kFacebookHomePageUrl)!, options: [:], completionHandler: nil)
}

测试:

推荐:将连接复制到便签,邮件,短信,或者使用二维码的形式使用。

不要将链接粘贴到 Safari 中 - iOS 目前阻止从任何浏览器的地址栏进行深度链接。

验证apple-app-site-association的连接,可以苹果的验证工具

lottie动画效果在安卓和网页端正常在iOS端不正常

在一次使用lottie调用设计提供的动画时,该动画是一个放烟花,然后散开的动画。用网页预览可以完美展示效果,但是放到客户端运行时,却只展示一部分即烟花上飞过程,而没有散开效果。最后仔细查看文档,找到这个: 经设计确认,烟花绽放的效果使用了AE中的Repeater(中继器)控件,而该控件在lottie的3.0版本还不支持,但是在2.5.2版本是支持的,回退版本至2.5.2解决了动画确认问题。

PS:一些古怪问题,第一反应要从官网文档说明、Issues、QA中找答案

几个产品相关概念

ROI(return on investment):投资回报率 反应产品的盈利情况,用百分比表示。 市场营销、运营活动,都是企业获利为出发点,通过利润/投资量化目标。利润的计算涉及财务,很多时候用更简单的收入作分子。当运营活动的ROI大于1,说明这个活动是成功的,能赚钱。 ecpm(effective cost per mille):每千次展示可以获得的广告收入 这是广告主预估自身收益的指标。 arpu(Average Revenue Per User):每用户平均收入 ARPU注重的是一个时间段内运营商从每个用户所得到的利润。很明显,高端的用户越多,ARPU越高。 LTV(life time value):生命周期总价值 意为客户终生价值,是公司从用户所有的互动中所得到的全部经济收益的总和。

推荐阅读

23 位开发者告诉你这次 WWDC 最让他们兴奋的新事物

对23位iOS开发者的采访,一起来看下他们眼中这届WWDC什么最让人兴奋。

免费领取小专栏 — WWDC2019 内参

6月份的WWDC给我们开发者带来了很多东西,Dark Mode、Swift UI、Combine、iPad OS等等。也是我感觉近几年WWDC干货最多的一界了。干货太多不知道怎么学习怎么办?这里没故事的卓同学分享的WWDC2019 内参免费领取名额。可以看各位大佬对WWDC的最新解读分析,目前二十多天里已经更新了30篇文章!。

SwiftUI 的一些初步探索 (一)

这是一篇解读SwiftUI的文章,目前还有第二篇。而喵神也在计划写一本关于SwiftUICombine 的书籍

我已经计划写一本关于 SwiftUI 和 Combine 编程的书籍,希望能通过一些实践案例帮助您快速上手 SwiftUI 及 Combine 响应式编程框架,掌握下一代客户端 UI 开发技术。现在这本书已经开始预售,预计能在 10 月左右完成。如果您对此有兴趣,可以查看 ObjC 中国的产品页面了解详情及购买。十分感谢!

我发现喵神总能一下找到作为新概念最应该注意的问题,比如SwiftUI和Swift5.1的关系,为什么需要新系统才能预览以及ViewBuilder里接受那些条件语句等。想了解SwiftUI 这篇文章真是必读

Github

About-SwiftUI

WWDC当天开始建立的一个专门收集SwiftUI资料的仓库,应该是史上最全了。果然大家还是最爱SwiftUI!

MovieSwiftUI

使用 SwiftUI & Combine和MovieDB API实现的一款应用。 Talk is cheap, show me the code. 结合实践是最快速的了解一个概念的方式。这也是最近一段时间上升最快的SwiftUI&Combine相关仓库了。

CombineSwiftPlayground

一个帮助理解Combine概念的 Swift Playground。对于首次接触响应式编程的人来说具体事例是帮助理解概念很好的方式。

该Playgrounds要求Xcode11 beta2及以上版本才能查看。

rxswift-to-combine-cheatsheet

列举了CombineRxSwift之间的差别和一些概念上的对比,对于有一点RxSwift概念的人来说可以快速的理解Combine,也是对于想从RxSwift迁移至Combine的一份参考。

文摘

普通选民也开始意识到,民主机制已经不再能够为他们带来权力。世界正在变化,但他们摸不清变化的方式和原因。权力正在转移,但选民不知道权力去了哪儿。在英国选民的想象中,权力被欧盟夺走了,所以他们投票脱欧。而在美国选民的想象中,是既得利益者垄断了权力,所以他们支持反体制的候选人,比如伯尼·桑德斯和唐纳德·特朗普。但可悲的事实是,没有人知道所有的权力去了哪儿。就算英国离开欧盟、特朗普接掌白宫,权力也绝不会回到普通选民身上。 —未来简史

月度小结

关于WWDC

WWDC发布的信息里面最让我感兴趣的就是SwiftUICombine,目前从Github的活跃情况来看也是这两个技术相关仓亏最多。SwiftUI解决了写UI布局的痛点,而Combine的出现表明了苹果对响应式编程的认可,对于我这种使用了一年RxSwift的人来说简直是一种福音。还有一点是这两个大招都是对Swift的支持,这是一个很明显的信号:Swift已经很成熟了,很强大了,以后还会有更多更好的优化。

过去几年,你可以忽视 Swift,但是,未来几年,如果不拥抱 Swift,将无法紧跟着 Apple 生态圈。

关于生活

从上个月开始有规律的进行跑步,上个月跑步里程是60km,这个月是70km,距年初定的目标已经完成了56%。 跑步带来的一个好处是最近一段时间的睡眠质量有显著提高,睡得更香了。如果你有睡眠质量问题,可以考虑跑步这个方式尝试解决哦。

封面图来自于在公司园区跑道上的拍摄。