sprite 发布的文章

基于最近考虑着手iOS 安卓 双平台的开发,整理了一下现存的一些跨平台开发思路。

为了让自己更直观的感受不同跨平台思路的差异,我简单的做了几个图示。

跨平台开发图示1

跨平台开发图示2

套壳模式

微信公众号H5(相当于) , jQuery Mobile ?

套壳模式是开发APP可以说是最简单快捷的(对于web开发者来说),基本上只要有一个正常能用的手机端可以UI适应的web就可以通过套一个壳完成APP开发。 套壳的问题主要有2个

  1. 体验不好,完全通过套壳的webapp 从性能以及UI交互上来说都会比原生app差,通过对js、css的优化,可以解决一部分,比如说click事件在手机端应当用tap事件(封装tap事件),另一部分解决不了,比如说iOS端的侧滑返回或侧滑删除功能,这个体验如果要靠js来实现,效果当然是可以写出来的,但是流畅度、细节表现大大不如原生,而且会花费比较多的时间,而且没有什么这一块比较好的库可以用。
  2. 没有原生功能支持,在微信公众号h5中,还可以通过微信的JSAPI调用部分微信提供的功能,譬如说存储图片。但是套壳在app里的时候,就完全没有办法支持了。

Web 框架模式

Dcloud H5 plus (SDK)

除了Dcloud h5 目前没有发现明确的web框架模式,这里的web框架模式主要是指以web形式开发,通过特定的SDK或者插件api访问app原生功能,不需要使用该框架特定的打包流程,支持以sdk嵌入等方式构建app的。

Web框架模式相对来说简单,快速。不用深入学习原生的内容即可快速使用原生平台的能力,通过插件的扩展也能提高一定程度上的体验效果。

- 阅读剩余部分 -

参考:

如何利用阿里云在PC端快速接入直播功能?

由于现在已经是2020年了,所以具体细节部分也有一定的改变。 今天做一下快速搭建的笔记:

配置推流、播流域名

在阿里云后台 “视频云直播控制台” 首先进行域名的配置。 分别添加 推流域名,播流域名 如 live-push.xxx.com, live.xxx.com 配置需要在域名解析中添加对应的CNAME记录。

配置鉴权

以上面的推流地址为例,参数设置为:

FMS URL / URL: rtmp://http://video-center.alivecdn.com/AppName

播放路径/串码流(如果存在)/ 流秘钥: StreamName?vhost=http://live.aliyn.com

appname 和 stream 是两个可变参数 其中stream参数在直播推流软件中,需要放置到推流码中。而不是紧跟着推流地址。

鉴权秘钥可以在阿里云后台生成,测试时可以这样使用。 但是在实际业务使用时,应该在后台请求对应的API来获取临时的鉴权秘钥

- 阅读剩余部分 -

7plus买回来之后,后置摄像头就一直处于一种不稳定的状态,时而会出现黑屏的现象。 而在一个多月前的某天,终于他辞职不干了。再也不工作了。

由于疫情的原因,我也只能掏出我的压箱SE来使用,因为没有相机的手机在中国太难用了(相机=二维码),但是太久没有用过小屏幕手机,突然用回来,即使是我这个曾经对大屏嗤之以鼻的人来说,也还是太不适应了。

最近快递也逐渐可以有了,所以盘算着通过淘宝买一个镜头组件自己换一下,就和之前换SE的电池一样。 就在今天,镜头总算到货了,迫不及待的想要恢复我的手机拍照功能!

换完之后果然好使了,结果才没合上盖几分钟,摄像头附近就发烫的不行,用了一会相机也和之前一样不能打开了。 震惊之余去淘宝问商家是什么情况,商家只是表示排线没接好,让我重装,但是重装之后依然是这样的问题,甚至发烫死机。继续询问商家,此时商家的奸商本质暴露无遗,重复说让我去维修店检查,言外之意就是肯定和他摄像头无关了。

那这时候商家已经没有意义了,还是自己排查一下问题吧。

我首先想到,如果后置摄像头坏了影响机器,那我不使用后置摄像头呢? 于是拆除后置摄像头排线,开机检测,正常。 相机可以切换到前置,微信扫一扫会自动调用前置摄像头,并且扫码,识别功能都是正常的。

如果单独前置没有问题,那么再测试一下单独后置摄像头吧,遂拆除前置摄像头组排线,开机测试,竟然一样正常。 到了这一步,我突然想到,如果刚才不能使用的后置摄像头恢复了使用,何不把我的原装摄像头单独放上去试一试呢?

结果出人意料,这个辞职了一个多月的摄像头竟然复工了! 考虑到不想在这件事上花费太多时间,于是将外壳装好,最后的最后,最让我惊讶的事情发生了。 拆除了前置摄像头组件排线的iPhone7plus 不再无端发热了!

目前单独后置摄像头功能一切正常。没有明显的无端发热情况。 等待后期继续考察。


在进行iOS应用开发的时候,经常会用到带有图标的按钮。

最近在更新账号小助手的时候,我发现xcode更新了一系列的系统图标,而且下拉一看都是十分规范而精美的,涵盖的内容也很丰富,这对于我们这样的独立的开发来说可以说是雪中送炭。

在网上搜一搜,不难发现这些系统图标是源自于2019WWDC大会的发布,并且苹果官方给了一套说明,甚至还有一个方便查找的mac app 传送门: Human Interface Guidelines - SF Symbols

Xcode system icon

而在具体的开发时,也还是能发现一些问题。

- 阅读剩余部分 -

``最早的时候博客是使用的WordPress搭建,基于一些原因( 使用Typecho搭建一个极简又好用的技术博客 ),去年选择了用typecho重做。

重构博客之后的很长一段时间都没有去看搜索引擎的收录状态,最近发现在百度、搜狗都只有一个首页收录,但是bing是有大量收录的。而这在以前WordPress搭建时不可能出现的,所以开始着手解决一下。

参考: 浅谈typecho百度收录问题

- 阅读剩余部分 -

在使用Xcode进行iOS手机APP开发的时候,最方便的方式就是数据线连接手机,这样无需任何设置就可以直接开启真机调试。

同样,在无需发布到App Store的一些临时用APP的安装也可以用这个方式!

由于最近数据线经常不好用,而且同时需要在不同分辨率的设备上调试,如果同时插多跟线亦或是一会换一个就会造成非常不方便的情况,那么基于网络进行真机调试就显得非常有必要了。

- 阅读剩余部分 -

1. tableView下方出现莫名的空白

  1. tableFooterView问题 一般来说,tableview会默认有一个footerview 解决:在视图加载时将这个footerview设为没有高度或者是空view就可以

    tableView.footerView = UIView()
    tableView.footerView.height = 0
  2. contentSize自动计算问题 tableView会有一个自动计算contentSize的功能 即我们改变dataSource里的数据刷新视图的时候,tableview的总高度是被改变的,而这时自动计算出来的,不像scrollview是需要手动指定的。这时如果系统计算的预估值出现误差就会出现空白的问题。 解决: 设置tableView的自动预估值为0

    tableView.estimatedRowHeight = 0

- 阅读剩余部分 -

最近刚更新 macOS 10.15 Catalina,写一个新的ios项目的时候发现,pod突然不能用了。提示找不到文件。 与此同时,打开bash的时候还在提示几行英文。 仔细一看,是推荐换一个命令行的工具,叫zsh。通过复制系统提示可以一键切换过去。

zsh: /usr/local/bin/pod: bad interpreter: /System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/bin: no such file or directory

切换完了之后尝试使用pod 依然提示找不到文件。于是在网上搜索。

- 阅读剩余部分 -

在使用SwiftyJSON做数据传输的时候,经常需要从JSON格式中取值到对象中,在开发ios应用时,对象的字段和类型通常也是固定的,如何在接口获取到数据的时候优雅的进行类型转换是一个很值得考虑的细节。

优雅不仅是在可读性上提高,同时也方便后期对于数据格式的管理维护。

否则每次做细节调整的时候,需要查找所用的工作量就不可小觑了。

在网上也有通过反射机制来实现所有类自动转换的,见参考1。逻辑上是成立的,没有仔细研究。实际测试发现无法转换(与语言版本等可能有关)。

这里我先用比较务实的方式,做一层封装。主要完成的是将JSON赋值操作,写入到对象的结构体中,这样的话我们就不用在业务流程中进行复杂的赋值操作了。

1. 设计一个用于支持JSON互转的接口

这里我设计了两种初始化的方式,实际上一种就够了 主要是调用的时候写法略有不同,且便捷初始化开销更小一点。 我个人会喜欢以函数名来区分不同的运作方式,所以额外增加了静态的fromJSON方法

- 阅读剩余部分 -

想要做好iOS的应用开发,深入的理解Cocoa框架是十分重要的。 今天做一下自上而下梳理,这样在开发的时候会更清晰,遇到问题也可以更容易的找到方向。

OS X架构中的Cocoa Cocoa in the architecture of OS X

iOS架构中的Cocoa Cocoa in the architecture of iOS

Cocoa

Mac OS X上五大API之一 Cocoa, Carbon, POSIX, X11, Java

- 阅读剩余部分 -