0%

前端时间公司在AppStore上架了Flutter的App,起步阶段是通过Xcode人手打包IPA给测试同学进行测试,随着迭代速度加快,这种方式非常不便,遂接入到现有的Jenkins平台进行持续发布,以此文记录一些关键点。

阅读全文 »

如何适配

暗黑模式的适配应该是iOS13适配工作中工作量最大的,下面看看App需要做什么改动才能支持dark mode。

颜色的适配

用户打开/管理暗黑模式后,APP无需重启即可自动切换

System color

官方推荐使用系统颜色进行适配,打开暗黑模式时会自动切换对应颜色,下面只是简单演示,系统提供的对应黑暗模式颜色还有很多,基本能满足各种需求,更详细的可以查看UIInterface.h这个头文件,会有更详细的说明

1
2
3
4
self.label.textColor = [UIColor labelColor];
self.secondLabel.textColor = [UIColor secondaryLabelColor];
self.thirdLabel.textColor = [UIColor tertiaryLabelColor];
self.fourthLabel.textColor = [UIColor quaternaryLabelColor];
阅读全文 »

仅做备份

i386 : iPhone Simulator
x86_64 : iPhone Simulator
iPhone1,1 : iPhone
iPhone1,2 : iPhone 3G
iPhone2,1 : iPhone 3GS
iPhone3,1 : iPhone 4
iPhone3,2 : iPhone 4 GSM Rev A
iPhone3,3 : iPhone 4 CDMA
iPhone4,1 : iPhone 4S
iPhone5,1 : iPhone 5 (GSM)
iPhone5,2 : iPhone 5 (GSM+CDMA)
iPhone5,3 : iPhone 5C (GSM)
iPhone5,4 : iPhone 5C (Global)
iPhone6,1 : iPhone 5S (GSM)
iPhone6,2 : iPhone 5S (Global)
iPhone7,1 : iPhone 6 Plus
iPhone7,2 : iPhone 6
iPhone8,1 : iPhone 6s
iPhone8,2 : iPhone 6s Plus
iPhone8,4 : iPhone SE (GSM)
iPhone9,1 : iPhone 7
iPhone9,2 : iPhone 7 Plus
iPhone9,3 : iPhone 7
iPhone9,4 : iPhone 7 Plus
iPhone10,1 : iPhone 8
iPhone10,2 : iPhone 8 Plus
iPhone10,3 : iPhone X Global
iPhone10,4 : iPhone 8
iPhone10,5 : iPhone 8 Plus
iPhone10,6 : iPhone X GSM
iPhone11,2 : iPhone XS
iPhone11,4 : iPhone XS Max
iPhone11,6 : iPhone XS Max Global
iPhone11,8 : iPhone XR
iPhone12,1 : iPhone 11
iPhone12,3 : iPhone 11 Pro
iPhone12,5 : iPhone 11 Pro Max

阅读全文 »

iPaintBoard
下载链接:https://apps.apple.com/cn/app/id373079426
iPaintBoard是我刚开始学iOS不久写的一个App,新系统打开会闪退,其实也没想处理,只是看儿子小时候玩我这个App还挺欢的,心里就埋了种子要找时间重构一版,但因为工作和生活的原因实在忙不过来,就这样拖了N年。前段时间空闲了一点,也想熟练下swift,就花了几天完全重写了。

阅读全文 »

背景

随着业务的迭代,iOS工程中定义的埋点数量越来越多,新旧交替,但老埋点却一直没清理过,导致埋点定义的头文件代码数达到一万多行,而通过人工方式去一个个全局搜索移除不太现实,基于此,想到通过python书写脚本的方式把未使用的宏定义和变量声明查找出来并自动删除。

阅读全文 »

简介

在使用Flutter开发的过程总要调用到原生的一些能力,这里以实现一个Flutter的推送plugin作为例子进行说明

iOS端

plugin注册

直接贴代码好了,关键点是

  1. [registrar addApplicationDelegate:instance]:注册plugin的appdelegate回调,不然无法注册和接受推送;
  2. [registrar addMethodCallDelegate:instance channel:channel]:注册Flutter跟原生方法的信道,这里的信道名为:apns;
  3. FlutterBasicMessageChannel:注册Flutter跟原生互操作的通讯信道,这里是用于把推送消息回调给Flutter端,信道名为:com.chh.plugin/apns;
  4. handleMethodCall:override方法,Flutter触发信道通讯时会回调此方法,调用方法名以字符串方法传入,参数以对应的互操作类型传入,可能是NSString、NSNumber、NSDictionary etc.,这里判断是setupAPNS后会进行推送服务的初始化;
  5. 这里特别要注意:[application: didReceiveRemoteNotification:],这个delegate方法我是注释掉了,因为Flutter的iOS SDK并没有实现此回调,实际是会回调了[application: didReceiveRemoteNotification: fetchCompletionHandler:],这里调试花了一点时间;
阅读全文 »