iOS HotPatch的选择(Weex, React Native, JSPatch)--2016.6.24GMTC后感

作者:JerryXia | 发表于 , 阅读 (0)
weex依赖一点点React Native不依赖JSPatch依赖这个问题来自于JSPatch场的提问。作者本人表示,没有runtime是搞不定swift的。有一天Apple强推Swift不支持OC,JSPatch就用不了了。weex可以很容易移除OC runtime的依赖的,而JSPatch是不可能做到不依赖runtime的。
但是讲道理的话这个风险比较小。也有可能Swift之后的版本提供了强大的反射。
学习曲线RN>weex>JSPatch
RN的react.js就比较难以理解,再加上flux,reflux,redux这些,可能就更难了。
weex很多核心代码就是直接借鉴的vue.js。vue相对于react来说还是比较容易的。
JSPatch直接就是用JS映射原生对象,除了语法不一样,其实就相当于写OC。稍微有一点JS基础的就能写。另外作者提供了强大的辅助工具JSPatchX(JS写oc代码自动补全),使得写JS变的更容易。
与Native交互从方便性和灵活度的角度考虑,应该是:JSPatch>weex>RN
RN的方式是通过新建一个manager包装调用真正对象,...阅读全文

iOS CocoaPods组件平滑二进制化解决方案及详细教程二之subspecs篇

作者:JerryXia | 发表于 , 阅读 (0)
在App中Pods/YTXAnimations文件目录下它是这样的:
在CocoaPods项目开发时是这样的:
在podspec里是这样的:
YTXAnimateCSS   = { :spec_name => "AnimateCSS" }YTXCSShake   = { :spec_name => "CSShake" }YTXMagicCSS   = { :spec_name => "MagicCSS" }$animations = [YTXAnimateCSS, YTXCSShake, YTXMagicCSS]$animations.each do |sync_spec|s.subspec sync_spec[:spec_name] do |ss|specname = sync_spec[:spec_name]sources = ["Pod/Classes/UIView+YTX#{specname}.*", "Pod/Classes/YTXAnimationsUtil.{h,m}"]ss.source_files = sourcesif sync_spec[:dependenc...阅读全文

使用tesseract在移动端上做OCR的一些小优化

作者:JerryXia | 发表于 , 阅读 (0)
业务需求通过用户的股票App中的自选股截图,使用OCR来识别图中的股票名字和股票编码。通过这样的方式,让用户方便地迁移他的自选股。而且我们希望做到离线的识别。
通过选型,我们最后选择了tesseract。它是一款开源的OCR;更重要的是它在移动端有现成的轮子:Tesseract-OCR-iOS和tess-two。
优化提升速度使用了chi_sim+eng两个训练集来识别,发现识别速度不够快。怎么样优化呢?tesseract利用了机器学习,机器学习这个方式是拟人的。我们就想到了如果是人的话,会怎么办?
我们发现,绝大多数(几乎所有)国内股票App自选股名字和代码都在左侧,而且大多数都是这样的布局:status-bar navigation-bar tab-bar。所以优化方案呼之欲出。那就是减少识别区域,加快了识别速度。具体就是在横向,只识别从最左侧到中线。纵向,去掉3个bar的高度和位置。和人一样,人在看到自选股的时候,他所关心的是股票代码和名字,自然而然他会把视线集中在左侧,加快识别速度和准确率。
这样做不仅加快了速度,也提高了准确率,对于tesseract干扰更少了。因为干...阅读全文

我所理解的组件化之路

作者:JerryXia | 发表于 , 阅读 (0)
为什么会有这篇文章呢?和之前的同事"我是你爸爸"讨论了关于组件化的事,对我有很大的启发。在此特别感谢"我是你爸爸"。
最近写了关于组件二进制化的文章的文章,有点感触。
一些朋友来问我关于CocoaPods的问题提到了组件化。
自己一开始准备写《组件化之路》的博文的,但是后来发现我的理解是有偏差的。
以上,所以我想写一篇关于《我所理解的组件化之路》的博文来阐述自己的观点。
先提出一个新词,我自己想的。叫做“CocoaPods化”或叫做“library化”什么叫做CocoaPods化?
CocoaPods化也就是我们公司正在做的。随着业务的扩展,有了多个App,有了多个Team,我们希望把一些代码重用。使用CocoaPods把他们做成library是个很好的选择。也可以说是CocoaPods化之路。
1.和业务无关。 
开始做这件事的时候,我们会容易的想要把那些Util、Category、JSBrige等等这些和业务无关的源码搞在一起做成一个一个CocoaPods库。它们变成了YTXUtilCategory、YTXWebViewJavaScriptBridge、YTXNib...阅读全文

Carthage和iOS组件二进制化

作者:JerryXia | 发表于 , 阅读 (0)
那么我们来讲讲Carthage。
Carthage翻译过来就是“迦太基”(Qart-ḥadašt,该词源于腓尼基语,意为“新的城市”,英语:Carthage)的意思。我猜取这个名字大概取“新的城市”这个寓意吧。
Carthage是个后起之秀,从2014年10月开始。而CocoaPods资格更老一些,从2011年8月就开始了。从start来看,CocoaPods是8262;Carthage是7397。他们已经在一个数量级了。说明Carthage相比CocoaPods并不差。Carthage肯定是为了解决CocoaPods的某些问题而生。
查看Carthage的README。首先看到的是workflow。1.Create a Cartfile that lists the frameworks you’d like to use in your project.
2.Run Carthage, which fetches and builds each framework you’ve listed.
3.Drag the built .framework binaries in...阅读全文