阿里技术参考图册(研发类)
https://102.alibaba.com/downloadFile.do?file=1523962960197/AliTech101_RD.pdf阿里技术参考图册(算法类)
https://102.alibaba.com/downloadFile.do?file=1523848064814/AliTech101_Algorithms.pdfFB大规模重构React Native,Airbnb宣布回归原生,前端巨变来临?
https://mp.weixin.qq.com/s/xbVNGGoH6mlmx6T0YL-r1w
React Native面临挑战,重构求变。
RN在跨平台开发并没有做到完全抽象,不同平台仍会有些差异性存在。
Airbnb放弃RN,回归原生。
Flutter跨平台开发框架,媲美Native的性能,发布release版本,我们可能会为同一类型的公司构建相同类型的Web应用。
经济学规律告诉我们,在这种环境下,我们将从“探索”——
尝试新的实践、范式、技术——转向“开发”:以更快的速度、
更低的成本构建相似的东西。
我想说的是,在接下来的几年里,我们已经发展起来的微型库架
构将逐渐被那些单体框架所取代。它们将采用一种约定配置
(convention-over-configuration)的方式,用透明度
换取生产力的提升。
- 提现到支付宝
绑定支付宝 https://docs.open.alipay.com/218/ 单笔转账到支付宝 https://docs.open.alipay.com/309/ 
RN
- 优势:跨平台、动态性、性能媲美原生、Web开发人力
 - 劣势:兼容性问题(也许花在处理多端不一致、兼容性等问题上的时间比使用原生方案实现业务所花的时间更多)、包大小、与原生数据的异步交互等等
 
开发笔记2
数据
看了下自己app的友盟统计,还有6%的iOS 8.x设备。等iOS 11出来后,再考虑放弃iOS 8.x用户吧。
OC稳住呀~
文章推荐(转)
最近看到Lottie项目,一个iOS,Android和React Native库,可以实时渲染After Effects动画,并且允许本地app像静态资源那样轻松地使用动画。回过头又把这篇图片格式调研的文章看了一遍,哈。这篇文章把移动开发常用的几种静态、动态图片做了详细的比较。
WKWebView不支持NSURLProtocol,导致基于UIWebView+NSURLProtocol并做了一些深度优化的,很难一下子就迁移到WKWebView。WKWebView内部使用了NSURLProtocol,但没有对外开放,不知道出于什么考虑。这篇文章以比较hack的方式让WKWebView支持NSURLProtocol。
另一种Native动态化的方案,在OC编译器上动手脚,将OC代码自动编译成可动态下发的JS代码。
有些特性需要配合ios 10设备使用,比如内存循环引用、DYLD_PRINT_STATISTICS(打印应用预加载时间)等。
在Scheme的Environment Variables添加DYLD_PRINT_STATISTICS=YES,可以打印应用预加载时间。从打印出来的日志看,dylib loading time占用了不少时间,应该是跟加载的系统库和三方库有关。
The loading of Apple system frameworks is highly optimized but loading your embedded frameworks can be expensive.  当三方库不采用Framework形式打包,加载时间是少了不少。
// 三方库以Frameworks形式打包
Total pre-main time: 392.25 milliseconds (100.0%)
         dylib loading time: 336.73 milliseconds (85.8%)
        rebase/binding time:  10.88 milliseconds (2.7%)
            ObjC setup time:  15.91 milliseconds (4.0%)
           initializer time:  28.65 milliseconds (7.3%)
           slowest intializers :
             libSystem.B.dylib :   4.63 milliseconds (1.1%)
                  AFNetworking :  12.03 milliseconds (3.0%)
// 三方库以.a静态链接库形式链接
Total pre-main time:  93.71 milliseconds (100.0%)
         dylib loading time:  11.46 milliseconds (12.2%)
        rebase/binding time:  27.05 milliseconds (28.8%)
            ObjC setup time:  13.16 milliseconds (14.0%)
           initializer time:  41.94 milliseconds (44.7%)
           slowest intializers :
             libSystem.B.dylib :   5.47 milliseconds (5.8%)
   libBacktraceRecording.dylib :   4.48 milliseconds (4.7%)
                        Fanmei :  54.14 milliseconds (57.7%) 
项目
After Effects动画的渲染引擎。
A library for converting Adobe AE shape based animations to a data format and playing it back on Android and iOS devices.
跟Lottie类似,也是After Effects动画的渲染引擎。
A data-driven UICollectionView framework for building fast and flexible lists.
An in-app debugging and exploration tool for iOS
iOS设备调试工具,可以查看沙盒,抓包,查看视图信息等。
仿android的meterial design风格的控件
开发笔记3
数据
主要是针对Crash和ANR的统计。
文章推荐
监控先于优化。没有数据支撑的优化,往往没有说服力,也很难衡量优化的效果如何。
大部分App或多或少都会涉及到存储(持久化或缓存)。ibireme/YYCache,支持在硬盘持久化和在内存中缓存,从功能、性能和接口易用性上都不错,目前项目中也在用,推荐。
老文章了,视图布局机制在iOS、Android、Html CSS是相通的,可以互相借鉴。youngsoft/MyLinearLayout实现很多布局机制。
MyLinearLayout is equivalent to: UIStackView of iOS and LinearLayout of Android.
MyRelativeLayout is equivalent to: AutoLayout of iOS and RelativeLayout of Android.
MyFrameLayout is equivalent to: FrameLayout of Android.
MyTableLayout is equivalent to: TableLayout of Android and table of HTML.
MyFlowLayout is equivalent to: flexbox of CSS3.
MyFloatLayout is equivalent to: float of CSS.
借鉴Android的LinearLayout以及Html CSS的FlexBox,自己写了FMLayouts,对iOS的布局机制做补充。
Android
项目
SnapKit/Masonry的Swift版本
开发笔记1
文章推荐
徐川大神对2016年移动技术发展的概述,以及对2017年的展望。总结了各种技术,热补丁、组件化、动态化、跨平台、直播、AR/VR等等。自己在项目实践中,也尝试了热补丁、动态化、组件化等技术,比较有体会。推荐他的博客移动开发前线,还是相当不错的。
对于往往存在大量异构元素的app首页或集合页,该方案的思路还是可以借鉴下的。
为满足大部分动态化需求,在App中内嵌一个WebView支持H5页,这是比较常见的做法。iOS上就UIWebView和WKWebView,WKWebView相比较UIWebView,性能更优,但也多了不少限制。目前自己项目中也是直接使用WKWebView,好在H5和Native的交互比较少,对WKWebView也没有做多少优化。
异步编程,特别是多层嵌套的情况,即使用了GCD&Block回调方式去写,代码仍会过于凌乱,可读性也大打折扣。我会通过以下两种方法去处理,将每个异步回调的处理逻辑封装在一个函数内,或将每个异步过程封装起来(即Future/Promise的做法)。无论哪种,也都会额外增加些成本,结合自己项目内的代码风格和使用成本再选择一个合适的。
知识点比较基础,罗列得比较多,可以结合项目多看看。
代码推荐
收集了大量的iOS开源项目、网页等等
移动三方应用分享
iOS原生分享控件
    NSString *textToShare = @"要分享的文本内容";
    UIImage *imageToShare = [UIImage imageNamed:@"shop"];
    NSURL *urlToShare = [NSURL URLWithString:@"http://blog.csdn.net/hitwhylz"];
    NSArray *activityItems = @[textToShare, imageToShare, urlToShare];
    
    UIActivityViewController *vc = [[UIActivityViewController alloc]initWithActivityItems:activityItems applicationActivities:nil];
    [self presentViewController:vc animated:YES completion:nil];
三方开放平台
- 新浪微博 http://open.weibo.com
 - 腾讯微博 http://dev.t.qq.com
 - QQ空间,朋友网 http://connect.qq.com/intro/login/
 - QQ分享(QQ好友,QQ群等)http://mobile.qq.com/api/
 - 豆瓣社区 http://developers.douban.com
 - 人人网 http://dev.renren.com
 - 微信好友 微信朋友圈 http://open.weixin.qq.com
 - 友盟U-Share
 - 用过友盟Share,但是遇到友盟ShareSDK中使用的微信SDK版本与官方不同步的问题,后来放弃了友盟ShareSDK,全部采用原生官方SDK,如微信(好友、朋友圈)、QQ、微博,在国内,这三个分享渠道已经能覆盖80%了。
 
URL Schemes
- iOS应用间可以通过
URL Schemes解决相互通信的问题。 - DemoA通过
openURL唤起DemoB,并带上参数。 
DemoA
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"demob://page?sourcescheme=demoa"]];
- DemoB收到并解析参数并作逻辑处理,然后同样通过
openURL返回到DemoA,并带上参数。 
DemoB
- (BOOL)handleUrl:(NSURL *)url {
    NSArray *querys = [url.query componentsSeparatedByString:@"&"];
    
    NSMutableDictionary *queryDict = [[NSMutableDictionary alloc] init];
    for (NSString *q in querys) {
        NSArray *kv = [q componentsSeparatedByString:@"="];
        if (kv.count == 2) {
            queryDict[kv[0]] = kv[1];
        }
    }
    
    NSString *returnScheme = queryDict[@"sourcescheme"];
    
    UIAlertController *vc = [UIAlertController alertControllerWithTitle:@"url"
                                                                message:url.absoluteString
                                                         preferredStyle:UIAlertControllerStyleAlert];
    [vc addAction:[UIAlertAction actionWithTitle:@"返回原应用"
                                           style:UIAlertActionStyleDefault
                                         handler:^(UIAlertAction * _Nonnull action) {
                                             [[UIApplication sharedApplication] openURL:[NSURL URLWithString:[NSString stringWithFormat:@"%@://", returnScheme]]];
                                         }]];
    
    [vc addAction:[UIAlertAction actionWithTitle:@"留在当前应用"
                                           style:UIAlertActionStyleCancel
                                         handler:^(UIAlertAction * _Nonnull action) {
                                         }]];
    
    [self.window.rootViewController presentViewController:vc animated:YES completion:nil];
    
    return YES;
}
- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url NS_DEPRECATED_IOS(2_0, 9_0, "Please use application:openURL:options:") __TVOS_PROHIBITED {
    return [self handleUrl:url];
}
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(nullable NSString *)sourceApplication annotation:(id)annotation NS_DEPRECATED_IOS(4_2, 9_0, "Please use application:openURL:options:") __TVOS_PROHIBITED {
    return [self handleUrl:url];
}
- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<NSString*, id> *)options NS_AVAILABLE_IOS(9_0) {
    return [self handleUrl:url];
}


三方分享或认证
- 三方应用分享或认证都会用到
URL Schemes流程,实际过程和参数会更复杂点,还需要考虑安全性。 如微信三方登录认证,除了三方应用通过URL Scheme跳转微信拿到code,再通过https请求微信后台拿到access_token,后续用https带上access_token可以请求各种资源。

三方分享则是通过
URL Schemes带上不同格式的数据(文本、图片、链接等)。
Deep Linking
概念理解
Deep Link深度链接,打破APP沙盒壁垒,链接到App内具体的内容。另外,iOS9CoreSpotlight.framework提供了些APP内容搜索的API,也可以认为是深度链接。Defferred Deep Link延迟深度链接,在深度链接基础上改进,如果链接的App未安装,则先跳转到应用中心或AppStore提示安装App。Universal Link,iOS9上提供了Associated-Domain关联域名,用于在网页或App内唤起其他App。Universal Links通用链接应用跳转总结以及坑Custom URL Scheme,iOS提供的App间跳转的协议。
产品
参考
Copyright © 2015 Powered by MWeb, Theme used GitHub CSS.

