# 移动端提效报告

# 一、协作规范

# 产品协作
  • 熟悉原型,预判技术实现方案
  • 评估存在的技术风险和应对方案
# UI协作
  • 设计稿分辨率:Android/IOS 逻辑像素 375 x n
  • 资源格式:svg(优先)、png
  • 定义色卡编号:RGB 255,255,255 和十六进制颜色码 #FFFFFF
  • H5预留原生导航栏 navigation bar
# 后端协作
  • 接口输出模型Model(含嵌套模型)属性命名一致
# 组内协作
  • 组内不定期组织技术分享和代码审查(不增加工作量前提),养成大家对代码规范的习惯,通过学习交流,助于自身成长;

# 二、流程规范

# 技术选型规范
  • 软件架构:
    • Android:MVP、MVVM
    • IOS:MVC
  • 网络框架:开源中相对较成熟完善、活跃度高、持续处在维护状态;
    • Android:二次封装 retrofit2+okhttp3
    • IOS: 二次封装 oc-AFNetworking、swift-Alamofire
  • 图片加载框架
    • Android:Glide、Picasso、Fresco
    • IOS :SDWebImage、YYWebImage
  • 其它依赖库与SDK
    • 网易云信(有话说)、VODUpload(阿里云)、dsBridge(JS桥接)、MMKV(高效读写)等等
# 代码提交规范
# 版本管理规范
  • 版本格式:0.0.0(主版本.次版本号.修订号)
highCode = 1    // 主版本
lowCode = 0     // 次版本(最大99)
fixCode = 0     // 修订号(最大99)
testCode = 11   // 自增号(最大99)
// 版本计算规则 1000011
versionCode = highCode * 1000000 + lowCode * 10000 + fixCode * 100 + testCode
// 外部显示版本 1.0.0
versionName = highCode + "." + lowCode + "." + fixCode

# 三、开发规范

# 代码规范
# 安全规范
  • 数据安全,使用 HTTPS 协议,信息传输加密验证防止被篡改
  • 本地数据,存储关键数据必须加密
  • 日志泄露,使用一套日志工具类
  • 防止反编译,打包时引入代码混淆和加固
  • 组件安全,控制标准组件(ActivityServiceReceiverProvider)的访问权限,使用安全高效的LocalBroadcastManager发送内部广播
# 适配规范
  • 工程资源适配**(推荐)** drawable-xxhdpi 1920x1080Assets.xcassets 2X3X
  • Android字号采用dp单位(sp单位会跟随系统大小变化)
  • Android多使用约束布局ConstraintLayout(推荐)
  • IOS字号采用pt单位
  • IOS使用第三方自动布局Masonry,原理与Android一致
  • iPhone X以上设备在顶部状态栏高度、Tabbar高度、底部安全区域与iPhone X之前的设备不同
# API兼容规范
  • 兼容版本范围:Android 5.0~11.0 、IOS 11.0~15.0

    在Android 11版本上,系统会根据App targetSdkVersion决定运行模式; targetSdkVersion >= 30,默认为分区存储,并且无法取消; targetSdkVersion < 29,默认为分区存储,可通过requestLegacyExternalStorage更改;

  • 兼容高低版本的API;

    private val map = object : LinkedHashMap<Long, Data>() 
    fun get(key: Long): Data? {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { 
            return map.getOrDefault(key, null) // Android N 开始支持的API
        } else {
            return map.get(key)
        }
    }
    
    if ([self isKindOfClass:UIWindow.class]) {
        if (@available(iOS 13.0, *)) { // IOS 13 开始支持的API
            return !!((UIWindow *)self).windowScene;
        } else {
            return YES;
        }
    }
    
# 全局常量规范
  • 建立全局存储常量Key,避免出现覆盖, 命名规则 业务线_功能名称
  • 使用 MMKV 替换 SharedPreferencesNSUserDefaultsSQLite 提升读写性能; SPManager 除了统一管理读写操作外也能无缝对接任何其它读写库;
object LocalSPConstant {
    const val LOCAL_PREFIX = "tl_"
    const val SYSTEM_VERSION_UPDATE = "${LOCAL_PREFIX}system_version_update"
    const val POPUP_PRIVACY = "${LOCAL_PREFIX}popup_privacy"
}

object SPManager {
    @JvmStatic
    fun putString(key: String, value: String) {
        MMKV.defaultMMKV()?.encode(key, value)
    }
    
    @JvmStatic
    fun getString(key: String): String? {
        return MMKV.defaultMMKV()?.decodeString(key)
    }
}

// 例.SPManager.putString(LocalSPConstant.SYSTEM_VERSION_UPDATE, "1.0.0")
# 核对原型并自测
  • 符合原型设计逻辑
  • 符合UI设计图效果
  • 数据边界值自测

# 四、应用监控

以第三方SDK接入为主,如. 友盟统计、百度统计、360、腾讯;

  • 埋点
  • 性能监控
  • 异常监控

# 五、成效总结

良好的代码规范

  • 可以促进团队合作
  • 提高代码可读性和BUG修复率
  • 有助于代码审查
  • 有助于自身成长
  • 降低维护成本

评估依据:主要是以以往的个人经验进行评估

场景 维度 普通开发 遵守规范
版本迭代 开发工期 14天 11天
问题修复 3天 2天
AB岗位 工作交接 7天 3天
团队协作 代码复用
工程质量 臃肿、杂乱 一致性、清晰
业务沟通
协作风险
最后更新时间: 7/13/2023, 9:07:24 AM