惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Blog — PlanetScale
Blog — PlanetScale
SecWiki News
SecWiki News
Google DeepMind News
Google DeepMind News
WordPress大学
WordPress大学
小众软件
小众软件
C
CERT Recently Published Vulnerability Notes
Jina AI
Jina AI
N
Netflix TechBlog - Medium
GbyAI
GbyAI
IT之家
IT之家
Apple Machine Learning Research
Apple Machine Learning Research
AWS News Blog
AWS News Blog
G
GRAHAM CLULEY
L
Lohrmann on Cybersecurity
C
Cybersecurity and Infrastructure Security Agency CISA
I
Intezer
T
Tor Project blog
P
Palo Alto Networks Blog
P
Privacy & Cybersecurity Law Blog
P
Privacy International News Feed
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
P
Proofpoint News Feed
T
Tailwind CSS Blog
C
Check Point Blog
Cloudbric
Cloudbric
Y
Y Combinator Blog
The Last Watchdog
The Last Watchdog
Forbes - Security
Forbes - Security
Last Week in AI
Last Week in AI
S
Security Affairs
博客园 - Franky
F
Fortinet All Blogs
量子位
M
MIT News - Artificial intelligence
C
Cisco Blogs
酷 壳 – CoolShell
酷 壳 – CoolShell
Stack Overflow Blog
Stack Overflow Blog
S
Secure Thoughts
V
Visual Studio Blog
AI
AI
美团技术团队
B
Blog RSS Feed
Application and Cybersecurity Blog
Application and Cybersecurity Blog
博客园 - 三生石上(FineUI控件)
阮一峰的网络日志
阮一峰的网络日志
Engineering at Meta
Engineering at Meta
人人都是产品经理
人人都是产品经理
Microsoft Security Blog
Microsoft Security Blog
T
Threatpost
Cyberwarzone
Cyberwarzone

少数派

派早报:Google 发布 Fitbit Air 等 - 少数派 「新人报到」確認需求,再開始 - 少数派 从 SOLO 独立开发者社区,我看到了越来越多开发者开始做自己的产品 - 少数派 我怎么管理那些"不常做,但总会忘"的生活事项 - 少数派 人形机器人量产元年,数据才是具身智能的“生死线” - 少数派 BuhoLaunchpad 高度还原 Mac 启动台:开发历程与思考 - 少数派 五年陪伴依然不舍,DIY 换壳后让罗技 MX Master 3 继续服役 - 少数派 新玩意 240|少数派的编辑们最近买了啥? - 少数派 一日一技|为什么你应该关闭 iOS 的键盘声音 - 少数派 我做了个插件和 Skills,一键提取任何网站的设计规范 Design.md - 少数派 住在三四线城市的你,该开始录播客了 - 少数派 甘南秘境,大白高国 - 少数派 AI的审美:谁让把我变成川内倫子 - 少数派 返工怎能不烦恼,打工人片单总有一部是你的「嘴替」 - 少数派 为了让「上厕所」更健康,我做了一个小工具 - 少数派 AI + Skill,能够让生成的文章去除 AI 味吗? - 少数派 新玩意|韶音OpenDots ONE 耳夹式耳机 - 少数派 《美满》| 在每一个春天的晚上相爱(362) - 少数派 新玩意|优篮子 PS01 MagSnap 磁吸支架 - 少数派 自我整合手记 | 我开始早睡了:用稳定规则,为自由托底 - 少数派 用龙虾(OpenClaw)两个多月,我最深的12个体会 - 少数派 听歌时间到,12 张你可能错过的 2025 华语乐坛好专辑 - 少数派 承诺能追吗 - 少数派 macOS 26启动台没了? 我做了个不一样的App启动器 - Keboard - 少数派 《四海为家的人》| INTJ对话INTJ(361) - 少数派 你发过的那些黑历史,是时候一次清干净了 - 少数派 新玩意:安安静静玩,越玩越专注:计客密码机 - 少数派 iPad 用户首次体验 Android 平板:vivo Pad6 Pro - 少数派 数据逻辑强 - 少数派 极北行+ | 一路向北,探访日本至北之地 | 001 - 少数派 万字剖析:千问App深度体验报告(2026) - 少数派 在2026年,如何真正防止别人抄袭你的作品 - 少数派 怎么用 50 块搭个 AI 语音助手?我踩了 3 天坑 - 少数派 YeeroAI:让 AI 对话真正成为知识管理的一部分 - 少数派 爬泰山 - 少数派 「旅图显影」 App 更新:这次,我们补上了一点「手感」 - 少数派 假期出门太折磨?我的 23 条经验帮你规划惬意旅行 - 少数派 工作流会变吗 - 少数派 Claude Opus 4.6 怎么用最省钱?我测了 5 种方案 - 少数派 GPT Image 2 让图文并茂不再稀罕 - 少数派 用户侧出发——什么是AI,我要不要学习? - 少数派 找片、转存、整理、播放一条龙!让你的付费网盘值回票价 - 少数派 欢迎试用!日课一问2.0插件 - 少数派 自己做的MDeditor,原本想购买 Typora 试了两次支付不成功,干脆自己做一个 - 少数派 vibe coding了一个 3MB 的小工具,让 ~/Downloads 彻底告别混乱 - 少数派 因为受不了 Mac 的风扇策略,我做了一个风扇控制工具 - 少数派 别只怪模型 - 少数派 Warp 终端的 AI 功能怎么用?我测了一周的体验 - 少数派 AI 写代码老是出 bug?这 5 个配置我后悔没早知道 - 少数派 「新玩意」苹果出相机可能就这样:Sigma BF + 45mm F2.8 DG Contemporary - 少数派 一个面向2030年的AI操作系统是什么样子的:浅谈cola这款有灵魂的Agent - 少数派 别只看写代码 - 少数派 每天解决10个问题,还是一口气攻坚解决400个? - 少数派 AI 交易机器人怎么搭?我用 Claude 跑了一周实盘 - 少数派 Maptoposter Online:把你爱的城市画成艺术海报 - 少数派 Function Calling 怎么用?我测了 3 个模型发现差距真大 - 少数派 Legend Talk:我做了个 AI 圆桌,让 160 位思想家围着你的问题转 - 少数派 如何找到自己的蓝方?在小县城寻找压力测试 - 少数派 语音输入与软件接口|2026年聊AI时,我们都聊些什么(上) - 少数派 混动已经卖爆,纯电又来补刀——钛7闪充版简直“不讲武德” - 少数派 本月玩什么|朋友收藏、识质存在、沙罗周期 - 少数派 为什么要每天坚持输出? - 少数派 Claude API 挂了好几个小时,你的项目有备用方案吗? - 少数派 Function Calling 没你想的复杂——我用它做了个有点用的工具 - 少数派 登录系统立即播放视频或者图片音乐的软件 - 少数派 我为什么创建 FlipHTML5 下载工具 - 少数派 残局没电?多品牌外设电量统一管理软件EasyBluetooth已支持RTSS游戏内显示以及AIDA64 - 少数派 前往通义路的路 - 少数派 太好看了,媲美Sun的个人导航页,NAS部署星云门户 - 少数派 乌黑嘴唇“一键检测”上线了 - 少数派 派早报:Claude AI 接入多个创意软件生态、FILCO 生产方接手品牌等 - 少数派 【更新】BearCLI、Claude 连接器与 MCP 服务器 - 少数派 记了上千条流水,还是看不懂财务?我做了一个让 AI 读懂账本的工作台 - 少数派 MINI R56 升级原厂 Sport 模式 - 少数派 新玩意 | 一棵柠檬树(仿真版) - 少数派 Momenta的“物理AI”野望,需迈过“含摩量”这道关 - 少数派 网页直接投屏控制手机!NAS一键部署PandaScrcpy,流畅丝滑可远程。 - 少数派 众测|邀你一同探索随身 AI 硬件入口 YoooClaw C·ONE - 少数派 2050大会:分享时间是真诚 参会记 - 少数派 iPad 赋能电影创作:国内首部宣纸手绘长片《燃比娃》的幕后故事 - 少数派 AI的审美:我用 8 个大模型给 100 张旅行照片打分 - 少数派 普通人如何破圈?去参加一个本地协会 - 少数派 把极空间的图标全换了,主题DIY全攻略打造你的专属NAS桌面 - 少数派 电子便签墙,帮你实现便签自由 - 少数派 我如何用三个 CLI 工具取代文档创建需求 - 少数派 原来真的有人可以玩一辈子 - 少数派 社区速递 139 | 派友热议三月买了啥、复古单反尼康 Df 体验 - 少数派 06 作品的赏析与评价 - 少数派 TDS REVIEW|索尼 WF-1000XM6 降噪真无线耳机体验 - 少数派 35.98万起售的第二代腾势D9,我看重的不是堆料,而是不凑合 - 少数派 鼠须管 Squirrel 皮肤配置指北 - 少数派 从watch ultra2换到redmi watch6 - 少数派 派早报:阿里巴巴发布视频生成模型 HappyHorse 1.0 等 - 少数派 别迷信1M - 少数派 家人们天塌了!网盘“大封杀”,多个渠道多条路,NAS部署PanHub - 少数派 AI与人勾心斗角!NAS一键部署AI狼人杀,假日休闲必备。 - 少数派 电商必备!Comfyui工作流批量生图插件,一次生成12张!支持Nano banana pro模型 - 少数派 Comfyui工作流配置Gpt-image-2模型教程,0.03/张 - 少数派 OpenClaw第三方APi怎么配置?可使用Gpt-image-2模型 - 少数派 会员社区话题精选 Ep. 103 - 少数派
第三方 iOS App 背着我们干了啥?我用 R 语言寻找答案 - 少数派
2021-10-12 · via 少数派

Matrix 首页推荐

Matrix 是少数派的写作社区,我们主张分享真实的产品体验,有实用价值的经验与思考。我们会不定期挑选 Matrix 最优质的文章,展示来自用户的最真实的体验和观点。

文章代表作者个人观点,少数派仅对标题和排版略作修改。


在今年的全球开发者大会(WWDC)上,Apple 曾宣布将在 iOS 15 中增加一项「App 隐私报告」功能。通过该功能,用户能够「看到在过去七天里每个 app 获取地址、照片、相机、麦克风和通讯录数据的次数」,并可以「可以查看与 app 通信的所有第三方域名,借此了解他们的数据被共享给了谁。」

遗憾的是,在目前版本的 iOS 15 中,「App 隐私报告」并没有完全做完,Apple 当初承诺的专用界面尚未出现。尽管该功能有了一定雏形,底层的记录机制已经做好,但还是需要手动开启、且没有直观的查询方式。因此,很多用户完全不知道这个功能的存在。

但一些有心的用户已经借助这一功能对常用 App 进行了观察,并发现不少 app 的确存在频繁、非必要地读写用户信息的行为;其中具有代表性的就是微信在后台读取用户相册的情况(一个较为完整的梳理可见 用户 Hackl0us 在知乎的回答)。对此,微信的反应整体还算快速,在 10 月 11 日发布的新版似乎修复了这个问题。

然而,并不是每个受到质疑的开发商都做出了积极的回应。

例如,美团也被用户通过「App 隐私报告」功能发现存在每 5 分钟获取一次用户定位的行为。根据 IT 之家的报道,美团工程师的回应是:「之所以出现这种情况,是因为这类软件 [编注:指用于辅助分析系统隐私记录日志的第三方 app「隐私洞见」] 在单方面读取系统操作日志后,进行了选择性展示,经测试,在相关权限开启且 App 后台仍处于活跃状态时,大部分主流 App 均会被该软件检测出频繁读取用户信息,且监测结果高度相似。」

报道称,该工程师还表示,「并未对上述读取 iOS 15 系统日志的软件进行安全性和保密性测试,建议大家谨慎下载。」

这里,我们无意讨论美团的回应是否合理,也暂且不纠结这种第三方辅助 app 是否有「隐私泄漏风险」;但是这段略显傲慢的回复仍然透露出一个信息:大部分主流 App 均会被 iOS 的「隐私报告」测出频繁读取用户信息,且监测结果高度相似

虽然这句话很符合我们对于主流 App 的认知,不过没有调查就没有发言权,我们不妨试试手动分析 iOS 系统日志,顺便也验证一番主流App对于用户信息频繁的读取,是不是由第三方 App「选择性展示」造成的假象。

(注:在本次分析中,笔者使用了自己熟悉的 R 语言,并加载了 ndjson 以及 tidyverse 包进行分析。有相关专业能力的读者也可以选择其他自己熟悉的分析方式。)

准备工作

如上所述,「隐私报告」功能在 iOS 15 中没有默认开启,需要手动启用。方法是进入「设置」>「隐私」>「记录 App 活动」,打开「记录 App 活动」开关。iOS 会开始记录所有 App 活动。

此后,需要给 iOS 一定时间积累数据;一段时间后回到同一界面,原本灰色的「存储 App 活动」按钮将变为可以点击状态,此时点击该按钮即可弹出分享菜单,将 ndjson 格式的日志文件导出。

根据 ndjson 官网说明,ndjson 全称为「Newline Delimited JSON」;如其名称所标明,ndjson 格式文件的本质就是 json 对象的集合,其每一行都是一个有效的 json 对象。这样,既能充分利用 json 格式的广泛支持和简明语法,又能便于与 Unix 风格的文本处理工具相结合,非常适合存储一条一行、需要频繁追加新内容的日志文件。这或许就是 Apple 选择用该格式存储隐私日志的原因。

更具体的技术内容这里就不展开讲解了。得益于 R 语言活跃的社区力量,我们可以使用 ndjson 包方便的读取 ndjson 文件并将其转换为我们熟悉的表格样式。

注: 由于本文中进行了一定量的分析工作,为了避免代码过多影响阅读,这里主要展示结果,更详细分析步骤可以参考我的博客。)

读取与预览

我们首先读取 ndjson 文件并保存为数据帧结构:

# 读取日志并保存为数据帧 app_privacy_report_tb

app_privacy_report_tb <-
  ndjson::stream_in(
"resource/App_Privacy_Report_v4_2021-10-11T22_36_54.ndjson"
,
                    cls = 
"tbl"
)

# 预览数据帧

glimpse(app_privacy_report_tb)

输出结果如下:

Rows: 19,687
Columns: 15
$ accessor.identifier     <chr> "com.xiaomi.mihome", "com.xiaomi.mihome", "com…
$ accessor.identifierType <chr> "bundleID", "bundleID", "bundleID", "bundleID"…
$ category                <chr> "location", "location", "location", "location"…
$ identifier              <chr> "60E8004B-D969-4ABB-B83F-460663BCC29F", "60E80…
$ kind                    <chr> "intervalBegin", "intervalEnd", "intervalBegin…
$ timeStamp               <chr> "2021-10-08T13:30:43.340+08:00", "2021-10-08T1…
$ type                    <chr> "access", "access", "access", "access", "acces…
$ bundleID                <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA…
$ context                 <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA…
$ domain                  <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA…
$ domainOwner             <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA…
$ domainType              <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA…
$ firstTimeStamp          <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA…
$ hits                    <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA…
$ initiatedType           <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA…

从第一行可知,从 10 月 8 日到 10 月 10 日的三天里,笔者手机中所有的 App 总共留下了 19687 条隐私请求日志(后文将会介绍一次隐私请求可能对应两条记录,因此实际请求数会小于这个数字,但不会低于其 1/2)。怎么说呢,这些 App 就还挺勤劳的吧。

至于 ndjson 文件中出现的各键(key)的具体含义,尽管笔者并不是 iOS 开发者,App 隐私报告功能暂时也没有官方文档说明,但可以通过一些分析来推断出各列的意义:

type 是指该条访问记录所属的「大类」,包括 access(请求数据或传感器信息)和 networkActivity(网络活动)两种。

accessor.identifierbundleID 均指访问隐私信息的应用包名(bundle ID)。

需要注意的是,这两者在日志中是择其一记录的:如果该条的 typeaccess,即应用访问的是数据或传感器,那么只会在 accessor.identifier 中记录包名,bundleID 则留空(显示为 NA);如果 typenetworkActivity,即应用是在访问网络,则正好相反。(笔者在一开始在这里走过些弯路,以为只有 accessor.identifier 是包名,但后来发现以此为条件分析数据会漏掉近一半的日志信息;于是回头检查,这才发现了上面的门道。)

category 适用于 access 类型的记录,是指具体访问的数据或传感器类型,包括 camera(相机)、contacts(通讯录)、location(定位)以及 photos(相册)。

kindtimeStamp 表示每次请求开始和结束的时间。在相邻成对的两条记录中,kindintervalBegin 的记录,其 timeStamp 代表该次请求开始的时间;kindintervalEnd 的记录,其 timeStamp 代表该次请求结束的时间。

identifier 为每次请求的内部编号,使用 UUID 格式。

注: 对于类型为网络活动的日志,还会涉及其他类型的信息,包括访问的域名(domain)、访问的频次(hits)等;由于如今 App 访问网络非常普遍,而不同 App、不同使用习惯会得到的日志差异较大,该类日志能揭示的隐私访问情况不具有代表性,故不作为本文介绍和分析重点。)

数据可视化

下面,我们通过 R 的数据可视化功能,对导出的数据作进一步分析。

注: 由于数据可视化代码长度较长且晦涩,为了文章简洁,我把相关代码放在我的博客。)

结合上文对数据内容的分析:

  1. 考虑到 accessor.identifierbundleID 都是包名,只是用在不同类型的访问记录中,我们将其合并为 app_id,代表发出请求的 App;
  2. networkActivity(网络活动)也视作 access 的一种,与其他访问数据或传感器信息的请求一起分析。

我们首先按照 type 中隐私请求和网络活动二分类进行可视化,查看每个 App 请求用户数据的大类是怎样一种趋势:

我们可以从上图得出如下信息:

  1. 总共有 85 款 App 请求了隐私数据,平均下来一款 App 的请求日志数量为 115.81 条。
  2. 我们预想中以 com.dianping/com.meituan(美团点评)在柱状图中并没有很抢眼,不过这很有可能是因为我早已关闭了「大众点评」和「美团」 App 后台刷新以及始终定位的权限的原因;
  3. 不显山不漏水的 com.xiaomi.mihome (米家)这位小老弟靠实力诠释了什么是一骑绝尘;猜测是因为我开启了它「始终定位」权限所致。这个功能最开始是为了方便「回家自动开灯」这类地理围栏功能方才许可的,然而后出于实用性等原因并没有开启这些智能化,因此实际上并没有什么事情需要「米家」对我进行定位。与它相比,除了排在后面的两款网络调试 App 数据请求数量还能在图表中展示出来,其它 App 相比之下仿佛什么数据都没有请求过一般。

实际上,如果再按照 category 中多分类数据请求进行可视化:

「米家」庞大的定位请求次数,也掩盖了图中其它 App 的所有潜在趋势。

分析至此,笔者不禁对米家何以会如此频繁地请求位置信息产生了好奇。后面的分析也将以它为「主角」。

为了分析米家 App 的访问请求,我们只选择 app_idcom.xiaomi.mihome 的数据进行单独分析。

注: 本文写作时使用的米家 App 版本为 v6.11.201-build6.11.201.2。)

首先,我们画一个饼图,看看「米家」到底都请求了哪类数据:

除了少量的网络请求之外,「米家」只专注于请求用户定位。网络请求,很好理解,毕竟智能家居什么的还是要跟家里面跟服务器沟通的,至少笔者认为这是必要的数据请求。然而这个定位,是真的太太太让人印象深刻了。

因此,我们接下来聚焦于「米家」的定位请求,先对日志显示的定位起止时间求差值,看看每次定位持续多久:

skim_variablen_missingcomplete_rateminmaxmediann_unique
duration0110.01 secs1129.66 secs10.19 secs2052

由如上输出可知,米家在 3 天里进行了 2052 次定位(n_unique),最短定位耗时 10.01 秒,最长耗时 18 分钟(这是在羞辱 iPhone 信号强度吗?);耗时中位数为 10.19 秒。

再来画张折线图,看看米家都是什么时候请求用户定位的:

可见,米家还真是夜以继日的请求用户数据的,可以说是「007」了;只有在凌晨才舍得勉强克制一点。

这些统计数据,与 iOS「电池」选项中的显示的米家耗电量遥相呼应。这间接印证了系统日志没有冤枉「米家」。

关键是,正如前文说过的,笔者根本没有开启米家中需要用到「地理围栏」的任何功能,所以它完全没有理由一刻不停的请求我的定位信息。

对此,笔者目前没有更好的解决方法,只能「斩草除根」,彻底关闭米家的定位权限;几天下来,发现完全没有影响到笔者的使用体验(但需要地理围栏功能的小伙伴这么做之前需要慎重考虑)。

总结

总的来说,根据使用 R 分析 App 隐私报告,笔者并未发现美团与微信的频繁访问,不过这并不能说明它们没有问题,因为我已经关掉了此二者的后台刷新以及始终定位功能,使得他两个没有办法实现频繁唤醒;不过让人意外的是,笔者无意中发现了潜在的耗电大户——米家。

在这里,笔者根据分析结果给广大 iOS 用户一个使用建议:无论是出于隐私保护,亦或是降低无谓的耗电量,强烈建议大家谨慎开启 App 的后台刷新以及始终允许访问位置信息的权限。你永远也想不到那些主流的 App 到底在背着你干些什么。


> 下载少数派 客户端 、关注 少数派公众号 ,了解更妙的数字生活 🍃

> 想申请成为少数派会员?冲!