星的天空的博客

种一颗树,最好的时间是十年前,其次是现在。

0%

独立开发经历

第一个小程序项目

我在17年的时候买人生的第一套房,是一套二手房,当时对二手房的各项交易费用一知半解,感觉自己就像一头屠宰桌上的猪,任人宰割。刚好那个时候微信小程序开始兴起,基于学习兴趣和需求,做了一个计算购房费用的小程序(在微信上搜索“首付款计算器”可以看到)。做出来后找了一个中介朋友,让他以激活码的方式帮我销售,收入五五分成,他帮我销售了几份后反馈有的客户没法安装(微信版本异常),有的客户有异常问题(非技术问题)。那个时候刚好工作比较忙,又觉得整这些事情太麻烦了(收益低),就没有更新和维护这个项目了。

第二个跨平台项目

在20年的时候,由于年龄的逐渐增长,开始考虑去扩展一些额外的收入点。那个时候刚好在学习Flutter,就想用Flutter对之前的项目进行重构,做市面上最专业的购房费用计算器。当时的初衷是想从开发到发布,系统的学习一项新技能,另外就是看能不能赚点钱。但是实际情况和我预想的有点偏差,我增加了很多预想之外的需求。

阅读全文 »

技术选型

项目中需要定制一个基于Gif图片的下拉刷新功能,调研发现
Flutter支持上下拉刷新的框架很多,其中有两个比较有名的有flutter_easyrefreshpull_to_refresh,两个框架功能都很强大,都能满足需求,其中flutter_easyrefresh在github的star更多,lib包大小为644KB,pull_to_refresh在pub.dev的评分更高,lib包大小为172KB,综合考虑后,选择基于pull_to_refresh来实现框架功能。

阅读全文 »

前言:开发效率和质量是每位开发人员永恒的追求,而Xcode的模板功能可以帮助你更好的达成这个目标,更难能可贵的是它还能在一定程度上帮助你统一实现逻辑和开发规范。

阅读全文 »

什么是plugin

FlutterDart生态系统的软件包有两种模板,分别是packagesplugin,其中plugin包含AndroidiOS平台特定实现,一般需要Flutter端与Android或iOS进行通讯交互(类比Hybrid或RN中JS与Native的交互),以实现特定功能。

创建plugin

一般使用命令创建Plugin:flutter create —-org com.example —-template=plugin hello,执行命令后,会在当前目录下生成一个hello文件夹,里面是一个plugin的简单demo实现。iOS可以使用OC和Swift,Android可以使用Java和kotlin进行代码编写,命令默认使用swift及kotlin,如需修改,使用-i-o命令。例如要创建一个使用OC及java的plugin,命令为:flutter create --org com.example --template=plugin --platforms=android,ios -a java -i objc hello

平台通道数据类型及编解码器

在平台通道进行数据传输时,Flutter它会自动对这些值进行序列化和反序列化。 下表展示了如何在平台端接收 Dart 值,反之亦然:

创建一个样例Demo

为了更好的说明流程,这里创建一个禁用截屏功能的plugin进行说明,plugin提供三个功能:全局添加水印截屏监控禁用截屏。其中全局添加水印为在Flutter当前页面栈的最上层添加一个半透、有水印、穿透触摸事件的全遮盖页面,为纯dart实现,不需要与平台进行交互; 截屏监控为当平台监听到截屏行为后,立即通知Flutter端,是一个持续通讯的过程;禁用截屏为Flutter端通知平台执行禁用操作(只支持Android平台)。
此plugin已经开发完成并发布到官方pub,可以在GitHub - disable_screenshots下载并查看源码。

阅读全文 »

WKWebView与App不在同一个进程运行,不会从App的标准Cookie容器NSHTTPCookieStorage读取Cookie。跨进程的数据同步是一个麻烦及容易出现问题的场景,Apple在iOS11之前没有专门的API用于Cookie操作,在iOS11之后提供了WKHTTPCookieStore,但是自测发现存在一些奇怪的bug,无法使用,此部分后续会做说明。

网上关于WKWebView的Cookie同步我有查到多种方案,但是均无法解决跨域请求的Cookie问题,后来发现使用WKProcessPool可以解决跨域问题。

阅读全文 »

carsh文件符号化需要symbolicatecrash脚本、.crash文件、产生crash的app对应的.dSYM文件。脚本可以通过.dSYM文件对.crash文件进行格式化。

阅读全文 »

Hexo是一个快速、简洁且高效的博客框架。Hexo 使用 Markdown(或其他渲染引擎)解析文章,在几秒内,即可利用靓丽的主题生成静态网页。本文基于Hexo进行说明。

环境搭建

安装

  • 确保电脑中是安装有Node.jsGit
  • hexo安装:npm install -g hexo-cli

建站

执行下列命令,Hexo 将会在指定文件夹中新建所需要的文件。

1
2
3
$ hexo init <folder>
$ cd <folder>
$ npm install
阅读全文 »

日常开发中,我们需要一个Apple账号用于发布App到AppStore,一个企业账号用于内部发布测试及给客户演示。但是Apple限制Bundle Identifier是不能重复的。所以我们有时候需要使用企业证书对个人证书发布的ipa包进行重签名。(注:当然你也可以用于其他用途,但是有被Apple封杀的风险)

模拟数据

为了能对整个流程进行更好的说明,这里设置一些模拟数据

  • App 在AppStore的Bundle Identifier:com.test.AppStore
  • 企业证书的名称:iPhone Distribution: Shenzhen Test Technology Co., Ltd.
  • 企业证书对应的Prefix:828E9CDH56
  • 企业账号用于发布的Provisioning Profiles文件名:TestDistributionForEnterprise.mobileprovision
  • 企业账号用于发布的Provisioning Profiles对应的Bundle Identifiercom.test.enterprise

注:如果重签名后需要支持消息推送服务,需要把对应的Identifiers勾选Push Notifications服务

阅读全文 »