阅读视图

发现新文章,点击刷新页面。

uni-app 组件库 Wot UI 2.0 发布了,我们带来了这些改变!

大家好,我是不如摸鱼去,好久不见。

进入 2026 以来,大家可以感受到 wot-ui 的迭代速度明显放缓了,我们最近也接到了无数催更的消息。很多人以为我们是在偷懒或者放弃更新了,其实不是,我们是在偷偷写代码然后准备惊艳所有人!(其实是苦苦码了好几个月,来点点赞吧)

接下来看看我们带来了哪些东西吧!

V2

如今已经是 AI 编程时代了,Wot UI 的 slogan 也调整成了「轻量、美观、AI 友好」。我们的目标很直接,就是为大家带来更高效、更易用,也更适合和 AI 协作的 uni-app 开发实践。

主要变化

对比 v1,v2 这一版我们带来了不少更新:

  1. 全新的设计系统。 在 v2 版本,我们基于基础变量、语义变量和组件变量三层 design token 搭建全新的设计系统,使修改组件样式和自定义主题变得随心所欲,同时升级了 UI 视觉体验。
  2. 简化 form 及相关组件 我们简化了 form 相关组件的用法,提供基于 zod 的校验引擎以及支持自定义校验引擎,使用 form-item 替换 cell 作为表单项,优化各表单组件与非表单组件结合 form-item 使用的写法,不再区分「表单组件」和「非表单组件」。
  3. 优化文档体验 重新整理文档结构,统一组件文档结构,将 @wot-ui/vitepress-theme 提取后发布为 vitepress 主题,统一多个 wot-ui 多个库的文档 UI,同时在每个组件文档中增加 css 变量的展示。
  4. 优化 AI 支持
  • 提供 cli 工具 @wot-ui/cli,其内部提供 cli 与 mcp,以优化 wot-ui 组件库的 AI 编程体验。
  • 提供多个 skills 与 LLMs.txt。
  1. 提供 Unocss 预设 提供了 Unocss 预设 @wot-ui/unocss-preset,内置主题变量、语义色、间距、圆角、字重、透明度、描边和排版相关原子类规则,把 wot-ui 的设计 token 和主题变量映射成可直接使用的原子类。

CLI

很多同学在用 AI 写 wot-ui 页面时,问题其实不在于模型不会写,而在于它总爱“凭感觉”写。比如 props 名字记错了、事件猜错了、slot 用法写得像对的,结果一跑就炸。

所以在 v2 里,我们专门提供了 @wot-ui/cli。它不是一个单纯的脚手架工具,而是把 wot-ui v2 的组件知识整理成一套可查询、可校验、可给 AI 调用的能力。

你可以把它理解成一个本地离线知识库,既能给开发者自己查,也能给 AI 客户端通过 MCP 调用。常见能力包括:

  • 查询组件的 props、events、slots 和 CSS 变量
  • 查看组件 demo,减少 AI 瞎猜用法
  • 扫描本地项目,检查不合理或错误的组件写法
  • 通过 MCP 接入 AI 工具链,让 Agent 先查再写

比如以前你让 AI 写一个表单页,它可能先吐出一份“看起来很像 wot-ui”的代码。现在更合理的流程是,先查组件约束,再生成代码,最后再跑一遍检查。这样出来的结果会稳很多。

简单来说,@wot-ui/cli 想解决的不是“怎么让 AI 更会猜”,而是“怎么让 AI 少猜一点”。这也是我们这次把「AI 友好」放进 v2 里的一个重点。

Starter

如果说组件库解决的是“页面怎么写”,那 Starter 解决的就是“项目怎么开”。所以这次我们也没有把它当成一个单纯的 demo 仓库来维护,而是持续把它往一套更适合真实开发、也更适合 AI 协作的 uni-app 起手方案去打磨。

1.5 之后,Starter 先补上了 skills,开始把项目里常用的开发约定、页面结构和组件使用方式整理出来,让 AI 在这个模板里写代码时不再完全靠猜。到了 2.0,Starter 进一步完成了对 wot-ui v2 的适配,示例、主题能力、反馈组件文档以及整体开发链路也一起升级。

你可以把现在的 Starter 理解成:它不只是“集成了 wot-ui 的模板”,而是一个默认就站在 v2 体系上的起点。新项目拉下来之后,从主题定制、页面组织到后续和 AI 配合开发,整个体验都会比 1.x 时代更顺手一些。

CSS 插件

再往下一层看,组件和模板之外,样式这一层我们也往前推了一步,提供了 @wot-ui/unocss-preset。它本质上是一个基于 UnoCSS 的预设,用来把 wot-ui v2 的设计 token 直接映射成可用的原子类。

这件事的价值在于,你在写页面时不需要一边翻设计变量、一边手写一堆样式映射了。像颜色、间距、圆角、字重、排版这些能力,现在都可以直接通过统一的 wot- 前缀类名来组织,主题切换时也能更自然地跟着整套 token 体系走。对于喜欢原子化 CSS 的同学来说,这一层会让 wot-ui v2 真正从“组件好用”变成“整套样式开发都更顺手”。

VSCode 插件

如果说前面这些更多是在补工具链和工程体验,那再落回到日常写代码,我们也补上了 VS Code 插件这一层,也就是 VS Code 插件 wot-ui-intellisense

这个插件主要解决的是写页面时那些很碎、但又很烦的事情。比如组件名记不全、属性名老要回头翻文档、事件到底叫什么总要试一下。现在在 .vue.html 文件里,输入 <wd-、空格、:@ 这些常见场景时,都可以直接拿到补全提示。

除了补全之外,它还支持组件、属性、事件的悬停文档展示,以及一部分属性值校验和错误诊断。也就是说,很多以前要切出去查文档、或者运行后才发现的问题,现在在编辑器里就能先拦一层。

如果说 CLI 更像是给 AI 和工程化链路准备的,那 VS Code 插件就是给开发者日常写代码准备的。一个负责让模型少猜,一个负责让人少翻文档,配合起来,整个 wot-ui v2 的开发体验就会完整很多。

最后

回过头来看,这次 wot-ui v2 对我们来说并不只是一次常规升级。

它一边在补齐设计系统、表单体系、文档体验这些基础能力,一边也在认真回应这两年越来越明显的变化:大家写代码的方式,确实已经和以前不太一样了。

所以你会看到,这一版里不只有组件本身,也有 Starter、CLI、UnoCSS 预设、VS Code 插件这些围绕开发体验的配套。我们想做的,不只是一个“能用”的组件库,而是一套更顺手、更现代,也更适合和 AI 一起协作的 uni-app 开发方案。

v2 还有很多东西会在后面陆续展开,这篇文章先带大家看一个整体。如果你也在关注 wot-ui v2,或者也在想组件库怎么更好地拥抱 AI 编程,欢迎继续关注我们后面的更新。

参考资料

uni-task - 轻量级团队任务管理系统

痛点:团队协作工具太贵了

作为一个小团队的负责人,你是否也有过这样的困扰:

  • Tower、Teambition、Worktile 这些工具确实好用,但每人每月数十块,一年下来团队开支上千甚至上万
  • 免费版功能受限,人数受限,总是用得不痛快
  • 数据存在别人的服务器上,总觉得不踏实
  • 想要个简单的任务管理,结果给你塞一堆用不到的功能

今天给大家介绍一个我开源的项目 uni-task —— 一个基于 uni-app + uniCloud 的轻量级团队任务管理系统,完全开源,自己部署,成本趋近于零


先看效果

PC端

项目列表:

任务列表:

支持子任务和评论:

任务动态自动记录:

快捷查看“我的任务“:

微信小程序


为什么选择 uni-task?

1. 完全开源,永久免费

项目采用 MIT 协议开源,你可以:

  • 免费用于个人或商业项目
  • 自由修改和定制
  • 不用担心哪天涨价或停服

GitHub 地址github.com/hbcui1984/u…

2. 成本极低

来算一笔账:

方案 10 人团队年费用
Tower 专业版 ¥39.9元/人/月
Teambition 企业版 ¥399元/人/月
uni-task 按量计费,低于 1.0元/人/月

uni-task 基于 uniCloud 云开发,使用支付宝云/阿里云/腾讯云的 Serverless 服务:

  • 开发测试阶段:完全免费
  • 小团队日常使用:基本在免费额度内
  • 即使超出免费额度:按量付费,一年可能也就几十块钱

对比一下:Tower 专业版 10 人团队一年 4788 元,uni-task 可能一年只要一杯奶茶钱。

3. 一套代码,全端运行

基于 uni-app 开发,一套代码搞定:

  • H5 网页版
  • 微信小程序
  • 支付宝小程序
  • iOS App
  • Android App
  • 甚至 HarmonyOS

团队成员用什么设备都能用,不用单独开发多个版本。

4. 功能够用,不臃肿

专注于任务管理的核心功能,不搞花里胡哨:

项目管理

  • 创建、编辑、归档项目
  • 成员管理(管理员/普通成员)
  • 邀请码快速加入

任务管理

  • 任务增删改查
  • 状态流转(待处理 → 进行中 → 已完成)
  • 优先级设置(高/中/低)
  • 截止日期与逾期提醒
  • 任务分组与拖拽排序
  • 子任务支持
  • 附件上传

团队协作

  • 任务分配
  • 操作日志自动记录
  • 项目动态实时展示
  • 「我的任务」个人视图

5. 数据完全自主可控

  • 数据存储在你自己的云服务空间
  • 随时可以导出和备份
  • 不用担心第三方服务商跑路
  • 符合企业数据安全合规要求

6. 易于部署和二次开发

技术栈主流且成熟:

类别 技术
前端框架 uni-app (Vue 3)
状态管理 Vuex
UI 组件库 uni-ui
后端服务 uniCloud
用户认证 uni-id

有 Vue 基础的开发者可以轻松上手,根据自己团队的需求进行定制。


快速部署指南

整个部署过程大概 3 分钟搞定。

1. 导入项目

从DCloud插件市场下载,地址:ext.dcloud.net.cn/plugin?id=2…

或者从github上下载源码:

git clone https://github.com/hbcui1984/uni-task.git

2. 关联云服务空间

  1. 右键点击 uniCloud-alipay 目录
  2. 选择「关联云服务空间」
  3. 如没有云服务空间,请先创建一个

3. 上传云函数

  1. 右键点击 uniCloud-aliyun/cloudfunctions 目录
  2. 选择「上传所有云函数、公共模块及 actions」

4. 初始化数据库

  1. 右键点击 uniCloud-aliyun/database 目录
  2. 选择「初始化云数据库」

5. 运行项目

在 HBuilderX 中直接运行到浏览器/模拟器/真机。

搞定!


进阶:个性化定制

更换主题色

项目默认使用 Vue 绿(#42b983),想换成你公司的品牌色?改两行代码:

// common/theme.js
colors: {
    primary: '#你的品牌色',
}

预设主题色供参考

主题 色值 效果
Vue 绿(默认) #42b983 清新专业
天空蓝 #2979ff 科技感
珊瑚橙 #ff6b6b 活力热情
薰衣紫 #7c4dff 优雅神秘

[截图占位:不同主题色效果对比]

功能扩展

项目架构清晰,方便二次开发:

  • 云对象在 uniCloud-alipay/cloudfunctions/ 目录
  • 页面在 pages/ 目录
  • 组件在 components/ 目录

适合谁用?

  • 初创团队:资金有限,但需要正规的项目管理
  • 小型工作室:几个人的团队,不想为工具花太多钱
  • 独立开发者:自己或小团队协作使用
  • 企业内部项目组:对数据安全有要求
  • 技术团队:想要可定制的任务管理工具
  • 学生团队:课程项目、毕设协作

与 Tower 等产品的对比

特性 uni-task Tower/Teambition
价格 开源免费 按人按月付费
数据归属 完全自主 存储在服务商
功能复杂度 轻量够用 功能丰富但可能用不到
定制能力 源码可改 无法定制
多端支持 全端覆盖 主要是 Web
部署方式 自有云空间 SaaS

写在最后

uni-task 不是要取代 Tower 这类成熟产品,它们功能更全面,服务更完善。

但如果你:

  • 预算有限
  • 只需要核心的任务管理功能
  • 希望数据掌握在自己手里
  • 有一定的技术能力进行部署和维护

那 uni-task 可能是个不错的选择。

开源地址github.com/hbcui1984/u…

欢迎 Star、Fork、提 Issue 和 PR!

如果觉得有用,也欢迎分享给你身边有需要的朋友。


Q&A

Q: 需要什么技术基础?

A: 会基本的前端开发即可。如果只是部署使用,跟着文档操作就行。

Q: uniCloud 收费吗?

A: 有免费额度,小团队日常使用基本够了。超出按量计费,价格很便宜。

Q: 支持私有化部署吗?

A: 支持,但需购买uni云开发软件版的商业授权,详见


uni-app 全能日历组件,支持农历、酒店预订、打卡签到、价格日历多种场景

一、uView Pro 的 Calendar 组件

在 uni-app 开发中,日期选择是一个高频需求场景。无论是酒店预订的入住离店时间选择、电商平台的商品预约、还是日常应用的打卡签到,一个功能完善、体验优秀的日历组件都是必不可少的。

uView Pro 作为 uni-app 生态中备受关注的 Vue3 组件库,其 Calendar 日历组件 经过了多个版本的迭代优化,从最初的基础日期选择,逐步演进为支持农历显示、打卡签到、节假日标记、自定义价格日历等丰富功能的综合型组件。

本文将深入解析 uView Pro Calendar 组件的核心特性、实现原理以及实际应用场景,帮助你快速掌握这个强大的日期选择利器。

二、组件概览:功能特性总览

0.png

uView Pro 的 Calendar 日历组件具有以下核心特性:

基础功能

  • ✅ 支持单日期选择和日期范围选择两种模式
  • ✅ 底部弹窗和页面嵌入两种展示方式
  • ✅ 年月切换导航,支持自定义年份范围
  • ✅ 日期范围限制,防止选择无效日期

进阶功能

  • ✅ 农历显示支持,自动计算农历日期
  • ✅ 打卡签到模式,支持已打卡/未打卡状态展示
  • ✅ 节假日和加班日标记,显示"休"/"班"标识
  • ✅ 内置中国传统节日,支持自定义节日配置
  • ✅ 自定义日期内容插槽,适用于价格日历等场景

交互优化

  • ✅ 默认选中今天,支持指定默认日期
  • ✅ 只读模式,禁止日期选择
  • ✅ 选中效果可配置,适应不同视觉需求

三、基础使用:快速上手

3.1 单日期选择模式

单日期选择是最常用的场景,比如选择生日、预约日期等。

1.png

<template>
    <view>
        <u-calendar v-model="show" mode="date" @change="onChange"></u-calendar>
        <u-button @click="show = true">选择日期</u-button>
    </view>
</template>

<script setup lang="ts">
import { ref } from 'vue'
import type { CalendarChangeDate } from 'uview-pro/types/global'

const show = ref(false)

function onChange(e: CalendarChangeDate) {
    console.log('选择的日期:', e.result)
    console.log('星期:', e.week)
    console.log('是否今天:', e.isToday)
}
</script>

回调参数说明:

属性 说明 类型
year 选择的年份 number
month 选择的月份 number
day 选择的日期 number
result 格式化的日期字符串,如 "2024-06-15" string
week 星期文字,如 "星期六" string
isToday 是否选择了今天 boolean

3.2 日期范围选择模式

范围选择适用于酒店预订、行程规划等需要起止时间的场景。

2.png

<template>
    <u-calendar 
        v-model="show" 
        mode="range" 
        start-text="入住"
        end-text="离店"
        @change="onRangeChange"
    >
        <template #tooltip>
            <view class="tip">请选择入住和离店时间</view>
        </template>
    </u-calendar>
</template>

<script setup lang="ts">
import { ref } from 'vue'
import type { CalendarChangeRange } from 'uview-pro/types/global'

const show = ref(false)

function onRangeChange(e: CalendarChangeRange) {
    console.log('入住日期:', e.startDate)
    console.log('离店日期:', e.endDate)
    console.log('共', e.endDay - e.startDay + 1, '晚')
}
</script>

范围模式回调参数:

属性 说明
startDate / endDate 起始/结束日期字符串
startYear / endYear 起始/结束年份
startMonth / endMonth 起始/结束月份
startDay / endDay 起始/结束日期
startWeek / endWeek 起始/结束星期

四、进阶功能详解

4.1 农历显示

Calendar 组件内置了农历计算功能,开启后会自动显示农历日期。

6.png

<u-calendar 
    v-model="show" 
    mode="date" 
    :show-lunar="true"
    @change="onLunarChange"
></u-calendar>

开启农历后,回调参数会增加 lunar 对象:

{
    day: 15,
    month: 6,
    result: "2024-06-15",
    lunar: {
        dayCn: '初十',      // 农历日
        monthCn: '五月',    // 农历月
        year: 2024,         // 农历年
        weekCn: "星期六"    // 农历星期
    }
}

农历显示会自动处理闰月、大小月等复杂逻辑,无需开发者关心底层实现。

4.2 页面嵌入模式

除了弹窗模式,组件还支持直接嵌入页面显示,适用于需要常驻展示日历的场景。

<template>
    <view class="calendar-page">
        <u-calendar 
            :is-page="true" 
            mode="date"
            @change="onChange"
        ></u-calendar>
    </view>
</template>

页面模式的特点:

  • 不显示弹窗和确定按钮
  • 选择日期后自动触发 change 事件
  • 支持所有其他功能(农历、打卡、节假日等)

7.png

4.3 打卡签到模式

打卡签到日历也是近期咨询我比较多的功能,Calendar 组件专门为此设计了打卡模式。

3.png

<template>
    <u-calendar
        :is-page="true"
        :checkin-mode="true"
        :checked-dates="checkedDates"
        :today-checked="todayChecked"
    ></u-calendar>
</template>

<script setup>
import { ref } from 'vue'

// 已打卡日期列表
const checkedDates = ref([
    '2024-01-01', 
    '2024-01-02', 
    '2024-01-03',
    '2024-01-05'
])

// 今日打卡状态(优先级高于自动判断)
const todayChecked = ref(true)
</script>

打卡模式的显示规则:

  1. 今日已打卡:绿色圆形背景,显示白色对勾
  2. 其他已打卡日期:橙色圆形背景,显示日期
  3. 未打卡日期checkin-mode 为 true 时):灰色圆形背景

颜色自定义:

属性 说明 默认值
checked-bg-color 已打卡日期背景色 橙色(warning)
today-checked-bg-color 今日已打卡背景色 绿色(success)
unchecked-bg-color 未打卡日期背景色 灰色(light)

4.4 节假日与加班日标记

组件支持显示节假日和加班日标记,方便用户了解日期属性。

<template>
    <u-calendar
        :is-page="true"
        :holidays="holidays"
        :workdays="workdays"
    ></u-calendar>
</template>

<script setup>
import { ref } from 'vue'

// 节假日(元旦假期)
const holidays = ref(['2024-01-01', '2024-01-02'])

// 加班日(调休上班)
const workdays = ref(['2024-01-06', '2024-01-07'])
</script>

显示效果:

  • 节假日:日期右上角显示红色"休"字
  • 加班日:日期右上角显示蓝色"班"字
  • 选中状态下,"休"/"班"字变为白色

4.png

4.5 节日显示

组件内置了中国传统节日,同时支持自定义节日配置。

内置节日(show-festival 为 true 时自动显示):

  • 元旦(1月1日)
  • 情人节(2月14日)
  • 妇女节(3月8日)
  • 植树节(3月12日)
  • 愚人节(4月1日)
  • 劳动节(5月1日)
  • 青年节(5月4日)
  • 儿童节(6月1日)
  • 建党节(7月1日)
  • 建军节(8月1日)
  • 教师节(9月10日)
  • 国庆节(10月1日)
  • 光棍节(11月11日)
  • 圣诞节(12月25日)

自定义节日:

<template>
    <u-calendar
        :is-page="true"
        :show-festival="true"
        :festivals="customFestivals"
    ></u-calendar>
</template>

<script setup>
import { ref } from 'vue'

const customFestivals = ref({
    // 每年固定节日(MM-DD 格式)
    '04-04': '清明节',
    '05-05': '端午节',
    '08-15': '中秋节',
    
    // 特定年份节日(YYYY-MM-DD 格式)- 优先级更高
    '2025-04-04': '清明节(2025)',
    
    // 覆盖内置节日(传入空字符串不显示)
    '02-14': '',
})
</script>

优先级规则:

  1. 特定年份格式(YYYY-MM-DD)优先级最高
  2. 每年固定格式(MM-DD)次之
  3. 内置节日优先级最低

4.6 自定义日期内容:价格日历

通过 date 插槽,可以完全自定义每个日期的显示内容,常用于电商价格日历场景。

5.png

<template>
    <u-calendar 
        :is-page="true" 
        mode="date"
        :use-date-slot="true"
    >
        <template #date="{ date }">
            <text :class="getPriceClass(date)">
                {{ getPriceText(date) }}
            </text>
        </template>
    </u-calendar>
</template>

<script setup>
import { ref } from 'vue'

// 价格数据
const priceMap = ref({
    '2024-01-01': 299,
    '2024-01-02': 399,
    '2024-01-03': 359,
    // ...
})

function getPriceText(date) {
    if (date.isToday) return '今天'
    const price = priceMap.value[date.date]
    return price ? ${price}` : ''
}

function getPriceClass(date) {
    if (date.isSelected) return 'price-selected'
    if (date.isToday) return 'price-today'
    return 'price-normal'
}
</script>

<style scoped>
.price-today {
    color: #19be6b;
    font-weight: bold;
}
.price-normal {
    color: #909399;
    font-size: 22rpx;
}
.price-selected {
    color: #ffffff;
}
</style>

插槽作用域参数:

属性 说明 类型
date.year 年份 number
date.month 月份 number
date.day 日期 number
date.date 完整日期字符串 string
date.week 星期文字 string
date.isToday 是否今天 boolean
date.isHoliday 是否节假日 boolean
date.isWorkday 是否加班日 boolean
date.isChecked 是否已打卡 boolean
date.isSelected 是否选中 boolean
date.lunar 农历信息 object

五、核心实现原理浅析

5.1 日历渲染逻辑

Calendar 组件的日历渲染基于以下核心算法:

// 获取某月天数
function getMonthDay(year: number, month: number) {
    return new Date(year, month, 0).getDate()
}

// 获取某月第一天星期几(0-6)
function getWeekday(year: number, month: number) {
    let date = new Date(`${year}/${month}/01 00:00:00`)
    return date.getDay()
}

渲染流程:

  1. 计算当月第一天是星期几,生成前置空白格子
  2. 计算当月总天数,生成日期格子
  3. 根据选中状态计算每个格子的样式
  4. 如果有农历,调用农历转换库计算农历日期

5.2 农历计算

组件使用了独立的农历计算工具 Calendar.solar2lunar,将公历日期转换为农历:

function getLunar(year: any, month: any, day: any) {
    const val = Calendar.solar2lunar(year, month, day)
    return {
        dayCn: val.IDayCn,      // 农历日(初十、廿三等)
        monthCn: val.IMonthCn,  // 农历月(正月、五月等)
        weekCn: val.ncWeek,     // 农历星期
        day: val.lDay,          // 农历日数字
        month: val.lMonth,      // 农历月数字
        year: val.lYear         // 农历年
    }
}

5.3 范围选择逻辑

范围选择采用两次点击确定起止时间的交互方式:

function dateClick(dayIdx: number) {
    const d = dayIdx + 1
    const date = `${year.value}-${month.value}-${d}`
    
    if (props.mode == 'range') {
        // 判断是设置开始日期还是结束日期
        const compare = new Date(date).getTime() < new Date(startDate.value).getTime()
        
        if (isStart.value || compare) {
            // 设置开始日期
            startDate.value = date
            isStart.value = false
        } else {
            // 设置结束日期
            endDate.value = date
            isStart.value = true
            // 触发回调
            if (props.isPage) btnFix(true)
        }
    }
}

六、实际应用场景

6.1 酒店预订日历

<u-calendar 
    v-model="show" 
    mode="range"
    start-text="入住"
    end-text="离店"
    :min-date="minDate"
    :max-date="maxDate"
    @change="onDateChange"
>
    <template #tooltip>
        <view class="hotel-tip">
            <text>请选择入住和离店日期</text>
            <text class="sub">入住时间14:00后,离店时间12:00前</text>
        </view>
    </template>
</u-calendar>

6.2 健身打卡应用

<u-calendar
    :is-page="true"
    :checkin-mode="true"
    :checked-dates="monthCheckins"
    :today-checked="todayChecked"
    :show-lunar="true"
    @change="onCheckin"
></u-calendar>

6.3 航班价格日历

<u-calendar 
    :is-page="true"
    mode="date"
    :use-date-slot="true"
    :default-select-today="false"
    :is-active-current="false"
>
    <template #date="{ date }">
        <view class="flight-price">
            <text class="day">{{ date.day }}</text>
            <text class="price" v-if="getPrice(date.date)">
                ¥{{ getPrice(date.date) }}
            </text>
        </view>
    </template>
</u-calendar>

6.4 日程管理应用

<u-calendar
    :is-page="true"
    :show-festival="true"
    :festivals="customFestivals"
    :holidays="holidays"
    :workdays="workdays"
    :default-date="selectedDate"
    @change="onSelectDate"
></u-calendar>

七、API 完整参考

Props 属性

参数 说明 类型 默认值
v-model 控制弹窗显示/隐藏 boolean false
mode 选择模式:date 单选 / range 范围 string date
is-page 是否在页面中直接显示 boolean false
show-lunar 是否显示农历 boolean false
readonly 是否只读 boolean false
default-date 默认选中日期(单选模式) string -
start-date 默认开始日期(范围模式) string -
end-date 默认结束日期(范围模式) string -
default-select-today 默认选中今天 boolean true
min-date 最小可选日期 string 1950-01-01
max-date 最大可选日期 string 今天
min-year 最小可选年份 number/string 1950
max-year 最大可选年份 number/string 2050
change-year 是否显示年份切换按钮 boolean true
change-month 是否显示月份切换按钮 boolean true
active-bg-color 选中日期背景色 string 主题色
active-color 选中日期文字颜色 string 白色
range-bg-color 范围内日期背景色 string 主题色浅
range-color 范围内日期文字颜色 string 主题色
start-text 开始日期提示文字 string 开始
end-text 结束日期提示文字 string 结束
tool-tip 顶部提示文字 string 选择日期
closeable 是否显示关闭图标 boolean true
mask-close-able 点击遮罩是否关闭 boolean true
safe-area-inset-bottom 底部安全区适配 boolean false
border-radius 弹窗圆角 number/string 20
z-index 弹窗层级 number/string 10075
is-active-current 选中日期是否高亮 boolean true
checkin-mode 是否启用打卡模式 boolean false
checked-dates 已打卡日期列表 array []
today-checked 今日是否已打卡 boolean false
checked-bg-color 已打卡背景色 string 橙色
today-checked-bg-color 今日已打卡背景色 string 绿色
unchecked-bg-color 未打卡背景色 string 灰色
holidays 节假日列表 array []
workdays 加班日列表 array []
holiday-color 节假日文字颜色 string 红色
workday-color 加班日文字颜色 string 蓝色
show-festival 是否显示内置节日 boolean false
festivals 自定义节日配置 object {}
festival-color 节日文字颜色 string 主题色
use-date-slot 是否启用日期插槽 boolean false

Events 事件

事件名 说明 回调参数
change 日期选择完成时触发 CalendarChangeDate / CalendarChangeRange

Slots 插槽

名称 说明
tooltip 自定义顶部提示内容
date 自定义日期内容(作用域插槽)

更多功能及用法参考 uView Pro 日历文档:uviewpro.cn/zh/componen…

八、总结

uView Pro 的 Calendar 日历组件是一个功能全面、设计精良的日期选择解决方案。从基础的单日期选择到复杂的打卡签到、价格日历,这些都能轻松应对。

使用建议:

  1. 选择合适的展示模式:弹窗模式适合临时选择,页面模式适合常驻展示
  2. 合理利用默认选中:通过 default-datedefault-select-today 提升用户体验
  3. 注意日期格式:所有日期参数统一使用 YYYY-MM-DD 格式
  4. 自定义插槽优先级:使用 date 插槽时会覆盖农历、节日等默认显示
  5. 打卡模式注意today-checked 优先级高于 checkedDates 的自动判断

功能使用建议:

  • 如需农历功能,请确保使用支持该功能的版本
  • 如需打卡签到、节假日、自定义插槽等高级功能,请使用最新版本

如果你正在开发 uni-app 项目,需要一个功能强大、易于定制的日历组件,uView Pro 的 Calendar 值得一试,快来体验一下。

九、资源

  • 📚 uView Pro 官方文档:uviewpro.cn
  • 🗓 Calendar日历文档:uviewpro.cn/zh/componen…
  • 📦 开源地址:GithubGitee,欢迎 Star
  • 📱WX小程序:搜索 uViewPro 直接体验
  • 💬 技术交流:如有相关 Calendar 日历建议,也可留言讨论

本文基于 uView Pro v0.5.17 版本编写,部分功能可能需要更新版本支持。

uni-app 运行时揭秘:styleIsolation 的转化

背景

大家好,我是 uni-app 的核心开发 前端笨笨狗。本篇是 uni-app 源码分析的第三篇文章,欢迎关注!

前两天有开发者在群里面问我 uni-app 中如何配置 styleIsolation,我告诉了他正确的配置方案,也计划写篇文章揭秘 uni-app 是如何通过运行时将开发者的配置转化为原生微信小程序的配置。

指南

选项式

uni-app 中,开发者可以通过在页面组件中添加 options 配置项来设置 styleIsolation,示例如下:

<script>
export default {
  name: 'MyComp',
  options: {
    styleIsolation: 'isolated'
  },  
}
</script>
<script>
import { defineComponent } from "vue";

export default defineComponent({
  name: "MyComp",
  options: {
    styleIsolation: "isolated",
  },
});
</script>

组合式

在使用组合式 API 的页面组件中,开发者同样可以通过 defineOptions 来设置 styleIsolation,示例如下:

<script setup>
defineOptions({
  name: 'MyComp',
  options: {
    styleIsolation: 'isolated'
  }
})
</script>

原理

createComponent 这个函数大家如果看过 vue 文件的 js 编译产物就一定不会陌生,比如

<script setup>
defineOptions({
  options: {
    styleIsolation: "shared",
  },
});
</script>

会被编译为

const _sfc_main = {
  __name: "comp",
  options: {
    styleIsolation: "shared"
  }
  setup(__props) {
    return (_ctx, _cache) => {
      return {};
    };
  }
};
wx.createComponent(_sfc_main);

也就是 script 中写的代码会被编译成一个对象,这个对象就是 vue 组件的配置项,而微信小程序又不认识 vue 组件的配置项,那么怎么把 vue 组件的配置项转化为微信小程序的配置项呢?这就要靠 uni-app 的运行时了,在 common/vendor.js 中,createComponent 函数会调用 parseComponent 函数来解析 vue 组件的配置项,parseComponent 的返回值就是微信小程序组件的配置项,也就是 Component 构造器 的参数,可以用来构造小程序原生组件。

function initCreateComponent() {
  return function createComponent(vueComponentOptions) {
    return Component(parseComponent(vueComponentOptions));
  };
}

const createComponent = initCreateComponent();
wx.createComponent = createComponent;

parseComponent 解析到页面组件时,会检查组件的 options 配置项,如果发现 styleIsolation,就会将其转化为微信小程序的配置项。

function parseComponent(vueOptions) {
  vueOptions = vueOptions.default || vueOptions;
  const options = {
    multipleSlots: true,
    // styleIsolation: 'apply-shared',
    addGlobalClass: true,
    pureDataPattern: /^uP$/
  };
  // 将开发者在 options 中设置的配置项转化为微信小程序的配置项
  if (vueOptions.options) {
    Object.assign(options, vueOptions.options);
  }
  const mpComponentOptions = {
    options,
    // 省略其他配置项
  };
  return mpComponentOptions;
}

这样一来,开发者在页面组件中设置的 styleIsolation 就会被正确地转化为微信小程序的配置项,从而自由控制样式隔离。

uni-app scroll-view 滚动卡死?一行CSS直接复活(iOS必看)

uni-app scroll-view 滚动卡死?一行CSS直接复活(iOS必看)

做uni-app开发的同学,有没有遇到过这种崩溃场景:页面用了scroll-view做滚动容器,点击Tab切换锚点后,整个页面突然不能滑动了,刷新也没用,只有重新进入页面才能恢复?

我最近就踩了这个坑,花了大半天排查,最后发现居然只要一行CSS就能解决,今天把整个排查过程和原理分享出来,帮大家避坑,尤其是做iOS端开发的同学,建议直接收藏备用!

一、问题复现(和我遇到的一模一样)

先给大家还原下我遇到的场景,方便大家对号入座:

  • 页面结构:用 scroll-view 包裹整个页面内容,内部分3个模块(基本信息、买车意向、卖车意向),顶部有Tab切换,点击Tab通过 scroll-into-view 实现锚点定位。

  • 问题现象:进入页面后,点击「卖车意向」Tab,锚点直接定位到模块最底部;此时尝试上下滑动页面,发现整个页面完全卡死,不能向上滑,只能向下滑(甚至向下滑也不流畅),刷新页面也无法恢复。

  • 环境:iOS端(真机+模拟器+Safari浏览器都复现),Android端正常,小程序端正常。

一开始我以为是锚点定位逻辑写错了,反复检查scroll-into-view、锚点高度计算,改了半天还是卡死,直到加上一行CSS,瞬间复活!

二、排查过程(踩坑记录,帮你省时间)

排查过程中,我走了3个弯路,大家可以跳过这些无效操作,直接看解决方案:

弯路1:怀疑锚点高度计算错误

一开始觉得是锚点高度获取有误——页面有「展示完整信息」的折叠/展开功能,初始化时获取的锚点高度是折叠状态的,展开后高度变化,导致定位偏移,进而触发滚动异常。

于是封装了锚点高度重新计算方法,在折叠/展开、Tab切换后重新查询DOM高度,虽然解决了锚点定位到底部的问题,但滚动卡死依然存在

弯路2:怀疑scroll-view滚动逻辑错误

接着检查scroll-view的滚动监听方法(scrollChange),发现里面有复杂的高度判断逻辑,比如用anchor2TopCopy动态计算偏移量,以为是判断条件出错导致滚动锁死。

简化了滚动监听逻辑,改成简单的三段式判断(根据滚动距离切换Tab),锚点定位更精准了,但滚动卡死问题还是没解决

弯路3:怀疑scroll-view样式配置错误

检查scroll-view的样式,确认已经设置了scroll-y="true"、flex:1、height:100%,没有多余的overflow样式冲突,排除了样式配置问题。

关键突破:定位到iOS原生回弹冲突

因为只有iOS端有问题,Android端正常,猜测是iOS原生特性和uni-app scroll-view的冲突。想起iOS有个「橡皮筋回弹」效果(overscroll),当scroll-view滚动到边界时,继续拉拽会出现空白回弹,会不会是这个回弹导致滚动状态错乱?

抱着试试看的心态,加了一行禁止回弹的CSS,没想到——滚动瞬间恢复正常,卡死问题彻底解决!

三、解决方案(一行CSS搞定,直接复制)

就是这行CSS,直接复制到你的页面样式中,iOS端滚动卡死问题瞬间解决:

::v-deep .uni-scroll-view, 
::v-deep .uni-scroll-view-content {
  /* 禁止iOS橡皮筋回弹,解决scroll-view滚动卡死 */
  overscroll-behavior: none;
}

补充说明:

  • ::v-deep 必须加:因为uni-app的scroll-view是组件封装的,需要穿透样式到子组件。

  • 适配范围:同时作用于.uni-scroll-view和.uni-scroll-view-content,确保所有滚动容器都禁止回弹。

  • 不影响其他功能:这行代码只禁止“边界回弹”,不影响正常滚动、锚点定位,Android端不受影响(overscroll-behavior在Android上兼容性有限,不会生效,也不需要生效)。

完美搭配(解决锚点+滚动双重问题)

如果你的页面也有折叠/展开模块,建议搭配锚点高度重新计算方法,实现“锚点精准+滚动流畅”:

// 重新计算所有锚点高度(折叠/展开后调用)
updateAnchorTop() {
  const query = uni.createSelectorQuery().in(this);
  query
    .select('#anchor1') // 基本信息锚点
    .select('#anchor2') // 买车意向锚点
    .select('#anchor3') // 卖车意向锚点
    .boundingClientRect((res) => {
      if (res[0]) this.anchor1Top = res[0].top;
      if (res[1]) this.anchor2Top = res[1].top;
      if (res[2]) this.anchor3Top = res[2].top;
    })
    .exec();
},

// 折叠/展开按钮点击事件
arrowClick() {
  this.arrow = !this.arrow;
  // 等待DOM渲染完成后重新计算锚点高度
  this.$nextTick(() => {
    this.updateAnchorTop();
  });
}

四、问题原理(为什么这行CSS能解决?)

核心原因:iOS的橡皮筋回弹(overscroll)与uni-app的scroll-view锚点定位冲突,导致滚动状态锁死

  1. 当点击Tab触发scroll-into-view锚点定位时,若定位到模块底部,会触发iOS的“越界回弹”(overscroll)。

  2. uni-app的scroll-view组件底层对滚动状态的处理,与iOS原生回弹机制不兼容,回弹后会导致scroll-view的滚动事件被阻塞,出现“卡死”。

  3. overscroll-behavior: none 的作用就是禁止元素的越界回弹行为,从根源上避免了冲突,滚动状态自然恢复正常。

补充:这不是你的代码写错了,而是uni-app在iOS端的一个经典兼容性bug,很多开发者都遇到过,一行CSS就能规避。

五、常见补充场景(避坑延伸)

如果加上这行CSS后,滚动还是有问题,大概率是以下2个原因,对应解决即可:

场景1:scroll-view高度计算错误

确保scroll-view的父容器有明确高度,scroll-view本身设置:

scroll-view {
  flex: 1;
  height: 100%;
  overflow-y: auto; /* 兜底,避免滚动异常 */
}

场景2:Tab切换锚点定位不精准

在Tab点击事件中,等待DOM渲染完成后再赋值锚点,避免异步高度问题:

tabClick(e) {
  this.indexNum = e;
  this.$nextTick(() => {
    this.anchor = e === 0 ? 'anchor1' : e === 1 ? 'anchor2' : 'anchor3';
    // 定位后兜底校准高度
    setTimeout(() => this.updateAnchorTop(), 100);
  });
}

六、总结

如果你在uni-app开发中,遇到iOS端scroll-view滚动卡死、不能滑动的问题,尤其是结合锚点定位、Tab切换时,直接用这行CSS就能解决:

::v-deep .uni-scroll-view, 
::v-deep .uni-scroll-view-content {
  overscroll-behavior: none;
}

本质是规避iOS原生回弹与uni-app scroll-view的兼容性冲突,属于“一招制敌”的解决方案。

另外,结合锚点高度重新计算方法,能同时解决“锚点定位偏移”和“滚动卡死”两个问题,适配更多复杂页面场景。

希望这篇文章能帮你节省排查时间,避免踩坑~ 如果还有其他uni-app滚动相关的问题,欢迎在评论区交流!

最后,求个点赞收藏,你的支持是我分享的动力 😊

百款出海社交 App 一夜下架!2026,匿名社交的生死劫怎么破?

2026年2月24日,出海社交领域迎来标志性的“黑色星期二”,百余款社交类App在无任何预警、无邮件通知、无申诉通道的情况下,被App Store集体下架。即便部分应用近期刚完成版本更新、运营状态平稳,也未能幸免。此次事件引发行业震动,苹果的清理行动究竟是偶然误伤还是定向整治?下架风暴的背后暗藏哪些监管逻辑?出海社交开发者如何突破困境、实现可持续发展?本文将深入拆解事件本质,梳理监管趋势,提供合规生存路径。

ScreenShot_2026-02-25_194516_417.png

ScreenShot_2026-02-25_194451_015.png

定向整治而非偶然误伤,四大市场同步发力

此次App Store下架行动并非随机操作,而是覆盖美国、澳大利亚、巴西、新加坡四大核心市场的定向清理,各市场虽审查重点略有差异,但整治核心高度统一,均聚焦于高风险社交场景。

美国作为全球最核心的应用市场,下架应用表面涵盖AI音乐、职场社交、旅游、育儿等多个品类,但核心筛选标准清晰——凡是包含“Live Chat”“Video Chat”“Meet New Friends”等关键词、以陌生人实时互动为核心功能的社交应用,均成为清理重点。

新加坡与澳大利亚的清理逻辑高度一致,对匿名社交类应用实施“零容忍”政策,大量主打“匿名聊天”“视频聊天”的产品被集中移除,其中不乏Aloha Live - Anonymous Chat、Xonder: Anonymous Chat & Vent等直接以“匿名”为核心卖点的应用,凸显两地对不可追溯社交模式的严格监管态度。

巴西市场的清理范围进一步扩大,除纯社交应用外,春辉乐玩、玩伴Vibe等具备旅游属性的轻度社交产品也被纳入下架名单。这一举措背后,是巴西市场将用户数据安全与未成年人保护纳入核心审查维度,审查标准提升至历史新高。

中国开发者高频踩雷:四类高危产品触发监管红线

梳理此次被下架的中国开发者相关产品,可发现其普遍存在明确的“高危特征”,均精准触碰了全球监管红线,具体可分为四大类:

1. 匿名树洞类产品

以默言、nimi-i人专属匿名聊天为代表,这类产品精准定位职场人、社恐群体的表达需求,主打“匿名对话”“无社交压力”等核心卖点,部分产品甚至取消点赞、推荐、动态广场等功能,极致强化匿名属性。但在监管层面,匿名意味着用户行为不可追溯,此类模式被明确界定为“高风险交互模式”,极易成为不良信息传播的载体,从而触发监管处罚。

2. 速配交友类产品

连连婚恋、LivMe-Meet new friend等产品均以“陌生人速配”为核心模式,前者面向职场人群提供免费婚恋交友服务,后者主打全球范围内的随机匹配聊天。此类产品的核心痛点的在于,多数中小开发团队难以承担7×24小时实时内容审核的成本,缺乏完善的审核机制,导致诈骗、色情等违法违规信息极易滋生,成为监管重点整治对象。

3. AI情感伴侣类产品

Joiy、ItsMee等产品将AI技术与情感社交深度结合,推出AI聊天、情绪匹配、专属AI聊天机器人等功能,看似是产品创新,实则触碰监管敏感点。AI技术本身并非违规核心,但当AI被用于模拟人类进行情感交流,且存在触达未成年人的可能时,监管容忍度降至零。此次下架也明确释放信号:情感类AI社交已成为全球监管的下一重点领域。

4. 马甲工具/社区类产品

部分产品以工具、垂直社区为外壳,暗藏社交属性,例如摄影社区CNU-顶尖视觉精选,虽以摄影内容分享为核心,但包含UGC内容发布、用户私信互动等社交功能,最终也被纳入清理范围。这一现象表明,只要涉及用户互动与内容传播,无论产品外在形态如何,均需遵守社交应用监管规范,不存在“法外之地”。

双重监管合围:苹果新规与全球法律形成监管合力

此次下架风暴的爆发,并非苹果单独行动,而是苹果平台规则升级与全球各国监管政策收紧形成的合力,推动出海社交行业正式进入“强合规时代”。

苹果平台规则升级:匿名社交被明确禁止

2026年2月6日,苹果悄然更新《App Store审核指南》,在1.2章节“用户生成内容”中,明确将“随机或匿名聊天”与色情内容、人身威胁、欺凌等列为App Store禁入类型,并保留“未经通知即可移除应用”的权利。

此前广泛应用于陌生人社交的Chatroulette式随机匹配模式,曾是行业核心创新点,如今已被定义为高风险功能。苹果的监管逻辑清晰:匿名+随机社交模式需要极致的内容审核能力,而多数中小开发团队难以承担相应成本,为规避平台风险,采取“一刀切”的清理策略。

全球各国监管收紧:未成年人保护成核心红线

如果说苹果新规是“平台层面的管控”,全球各国的法律政策则是“市场层面的约束”,且均以未成年人保护为核心,进一步压缩不合规产品的生存空间:

——巴西、澳大利亚、新加坡:自2月24日起,下载18+应用需通过苹果年龄验证;巴西额外规定,包含“开箱抽奖”等类赌博机制的应用,直接评级为18+,直接切断此类社交+游戏类产品的未成年人用户市场。

——美国:犹他州《应用商店责任法案》已于2025年5月生效,要求应用商店强制验证用户年龄,未成年人账号需关联家长账号,开发者违规将面临家长最高1000美元/次的索赔,苹果为规避“连坐”风险,进一步提高应用审核标准。

——欧洲:欧盟近期认定TikTok的“成瘾性设计”(如无限滚动、自动播放)违反《数字服务法案》,拟处以全球年收入6%的罚款;西班牙更推进“禁止16岁以下未成年人使用社交媒体”的政策,进一步强化对未成年人的保护。

综上,此次下架风暴是全球监管层对社交产品的一次“全面清算”,过去“先野蛮生长、后合规整改”的出海模式已彻底失效。

2026年出海社交合规生存指南:三大路径实现突围

面对全球监管收紧的大环境,出海社交开发者若想实现可持续发展,核心在于放弃侥幸心理、坚守合规底线,以下三条路径可作为破局关键:

路径一:放弃匿名模式,搭建实名/强认证体系

若产品商业模式依赖“用户匿名、无需对言行负责”的核心逻辑,需尽快完成转型。未来社交产品的核心底线是“可追溯”,即便采用昵称体系,也需搭建完善的持久账户体系,通过手机号验证、身份信息核验等强认证方式,确保用户行为可追溯、可管控,从源头降低不良信息传播风险。

路径二:将合规融入产品功能,适配全球监管要求

苹果推出的“申报年龄范围API”不应被视为运营负担,而应作为核心功能进行适配。开发者可针对不同年龄段用户设计差异化内容与功能:对未成年人开启严格的内容过滤、使用时间管理机制;对成年人提供合规范围内的社交服务。这种“分龄管理”模式,不仅能满足全球监管要求,更能提升产品公信力,成为打入欧美主流市场的核心优势。

路径三:严控AI功能风险,建立完善的内容过滤机制

随着AI技术在社交领域的广泛应用,AI陪聊、AI生成头像、AI匹配等功能成为产品创新方向,但需严格把控风险。开发者在引入AI功能前,需明确三大核心问题:AI训练数据是否合法合规?是否存在生成涉黄、涉政等敏感内容的可能?是否会诱导未成年人做出危险行为?无论采用何种大模型,均需建立严格的输出过滤机制,即便牺牲部分产品趣味性,也要确保内容绝对安全——海外市场中,单一违规内容(如AI生成的疑似儿童违规图片),即可导致应用永久下架,开发者甚至需承担刑事责任。

结语:合规是出海社交的唯一生路

2026年2月24日的下架风暴,只是全球社交领域监管收紧的一个开端。随着全球数字治理体系的不断完善,过去依赖技术红利、模式创新就能快速出海的时代已一去不复返,合规能力将成为出海社交开发者的核心竞争力。

对于在此次风暴中下架的产品,行业深感遗憾;而对于仍在坚守的开发者,需重新审视产品逻辑,主动拥抱监管、搭建完善的合规体系。唯有坚守合规底线,才能在全球出海赛道中长久立足——2026年,合规才是出海社交的唯一生存通行证。

遵守规则,方得长治久安,最后祝大家大吉大利,今晚过审!

相关推荐

# 苹果开发者续费大坑及成功续费方案!亲测有效

# AppStore敏感词排查手册,多维度分析Guideline 2.3.1隐藏功能,轻松过审。

# 如何主动提防苹果3.2f的进攻,自查防御手册(代码篇)

# 如何主动提防苹果3.2f的进攻,自查防御手册(ASO篇)

# 苹果加急审核是“绿色通道”还是“死亡陷阱”?

# 苹果开发者邮箱,突然收到11.2通知严重么?

# 不想被苹果卡审最好错开这两个提审时间

# 手撕苹果审核4.3是代码问题还是设计问题?

# 有幸和Appstore审核人员进行了一场视频会议特此记录。

开工第一天,别让AI写的代码触发3.2f封号。

背景

今天是农历正月初八,春节后的第一个工作日。后台有粉丝留言,迎来的开年的第一记重磅打击3.2f待终止通知。

踩线原因也是老生常谈了,严查分类之隐藏功能问题

中英对照.png

老iOSer对于这种情况已经是见怪不怪了,很多时候并非开发者想做某些Sao操作,实属无奈的多。毕竟,有业务苹果不能正面允许,不得已就采用这种上有政策下有对策的打法

原因分析

通过进一步沟通,层层抽丝剥茧。终于定位到踩到隐藏功能的导火索,在AI加持的情况下使用了非公开的API获取业务层面需要的功能权限。从业务的角度来看功能确实实现了,从苹果监管的角度来看调用了越权的API属性。通过键值对的方式Hook数据结果。

实话讲AI背大锅,对于很多跨行的开发者来说,为了满足公司的开发需求保住饭碗使用AI的方式本身没有问题。关键的问题在于,无法Review AI所编写的代码是否合规

所以,AI本质是一把双刃剑,在提高开发效率的同时,也需要额外考虑风控问题。

隐藏功能

隐藏功能的前身是苹果开发者指南中的-2.3.1条款。

主要意在通过一些动态下发的方式,直接或间接干预苹果审核所看到的内容。将符合苹果审核的内容作为A面,顺利通过审核,提高审核通过率。【俗称的AB面,也叫马甲包】

随着AppStore审核规则的加强,对于隐藏功能的判定不仅仅只是单纯的功能切换,而是上升到更为全面的元数据以及概念层面。

简单来说:

少做不做挂羊头卖狗肉的事情,苹果的算法比开发者想象中更加强大

遵守规则,方得长治久安,最后祝大家大吉大利,今晚过审!

相关推荐

# 苹果开发者续费大坑及成功续费方案!亲测有效

# AppStore敏感词排查手册,多维度分析Guideline 2.3.1隐藏功能,轻松过审。

# 如何主动提防苹果3.2f的进攻,自查防御手册(代码篇)

# 如何主动提防苹果3.2f的进攻,自查防御手册(ASO篇)

# 苹果加急审核是“绿色通道”还是“死亡陷阱”?

# 苹果开发者邮箱,突然收到11.2通知严重么?

# 不想被苹果卡审最好错开这两个提审时间

# 手撕苹果审核4.3是代码问题还是设计问题?

# 有幸和Appstore审核人员进行了一场视频会议特此记录。

AppLovin 危机升级:SDK 安全争议未平,建议移除为妙

背景

继 1 月做空机构 CapitalWatch 指控 AppLovin 深度涉入洗钱网络、关联东南亚 “杀猪盘” 后,这场资本风波的余震仍在持续。最新市场数据显示,截至 2026 年 2 月 5 日,AppLovin(股票代码:APP)股价已从 2025 年 11 月 10 日的 651.32 美元跌至 375.23 美元,三个月累计跌幅达 42.39% ;仅 2 月前 5 个交易日,股价就从 483 美元跌至 375.23 美元,单周跌幅超 22%,换手率最高达 6.65%,市场恐慌情绪可见一斑。

争议再发酵:从股东合规到 SDK 技术风险

此前 CapitalWatch 的报告已指出,AppLovin 主要股东 Hao Tang、Ling Tang(被指为 Hao Tang 亲属)及关联方合计持股超 28%,涉嫌通过广告业务协助转移团贷网非法集资款、东南亚诈骗资金。尽管 AppLovin 全盘否认指控,称 “无法控制个人股票买卖”,但市场对其股东层面的合规失职质疑未消 —— 作为上市公司,对主要股东的背景审查、反洗钱流程是否到位,至今仍是未解之谜。

更关键的是,这场争议已直接波及普通开发者。有行业分析指出,AppLovin 的 SDK 存在两大核心风险:一是技术合规问题,其 SDK 被曝包含指纹追踪、静默安装功能,前者可能违反用户隐私保护法规(如 GDPR、CCPA),后者则可能绕过用户授权强制安装应用,存在被应用商店下架的隐患;二是连带风险,若后续监管部门(如美国司法部、SEC)对 AppLovin 启动调查,或要求平台自查涉事 SDK,开发者可能面临 “猝不及防的下架压力”,影响应用正常运营。

股价暴跌背后:多重利空下的市场信心崩塌

从股价走势看,AppLovin 的颓势并非偶然。除了洗钱、SDK 合规争议,其商业模式本身也存在隐忧。此前已有做空机构指出,AppLovin 约 35% 的广告收入来自超休闲游戏,而这类业务的虚假点击占比或达 20% ;同时,公司 60% 的流量依赖 Meta 和 Google,若上游平台调整政策,收入可能面临断崖式下跌。

叠加最新的合规风险,机构对其估值的分歧持续扩大。截至 2 月,尽管仍有 9 家机构给出 “强力推荐” 评级,但最低目标价仅 80 美元,较当前股价隐含 75.8% 的跌幅。空头仓位也在激增,1 月 3 日单日做空量占比达 21.36%,累计空头仓位超流通股 15%,逼近熔断阈值,市场对其信心已降至冰点。

开发者应对指南:规避风险刻不容缓

面对 AppLovin 的多重危机,开发者需优先考虑业务稳定性,避免踩入合规 “雷区”:

  • 评估替换方案:若当前应用集成了 AppLovin SDK,建议尽快调研广告聚合平台,通过接入多渠道广告源,降低对单一 SDK 的依赖,避免因 SDK 下架导致收入断层;
  • 自查合规细节:重点检查 AppLovin SDK 的指纹追踪、静默安装功能是否关闭,确保用户数据收集、应用安装流程符合当地隐私法规(如 GDPR 的用户同意要求);
  • 跟踪监管动态:密切关注美国司法部、SEC 及应用商店(如苹果 App Store、Google Play)的最新政策,若出现针对 AppLovin 的调查或下架通知,需第一时间启动应急方案。

AppLovin 的案例也为整个行业敲响警钟:在选择第三方 SDK 时,除了关注流量、收益,更需穿透式审查合规情况。

毕竟,一次合规危机带来的损失,可能远超过去的收益

遵守规则,方得长治久安,最后祝大家大吉大利,今晚过审!

相关推荐

# 苹果开发者续费大坑及成功续费方案!亲测有效

# AppStore敏感词排查手册,多维度分析Guideline 2.3.1隐藏功能,轻松过审。

# 如何主动提防苹果3.2f的进攻,自查防御手册(代码篇)

# 如何主动提防苹果3.2f的进攻,自查防御手册(ASO篇)

# 苹果加急审核是“绿色通道”还是“死亡陷阱”?

# 苹果开发者邮箱,突然收到11.2通知严重么?

# 不想被苹果卡审最好错开这两个提审时间

# 手撕苹果审核4.3是代码问题还是设计问题?

# 有幸和Appstore审核人员进行了一场视频会议特此记录。

❌