Flutter 上了 Apple 第三方重大列表,2024 春季 iOS 的隐私清单究竟是什么?

这个话题的起因来自 2023 年 WWDC 之后苹果发布的「App Store 提交隐私更新」政策,政策主要提出了两点:第三方 SDK 隐私清单和签名需要提供必要理由的 API 流程

其实先简单总结,就是 Apple 想通过隐私清单来进一步提升用户数据收集和使用的透明度,包括 required reason API 也是算是属于隐私清单里的内容。

那这个和标题里的 Flutter 有什么关系?因为跟随此次隐私清单升级, Apple 上线了一个**对用户隐私产生重大影响的第三方 SDK 列表** ,而在这列表恰好就有 Flutter 的存在,并且里面接近 1/3 是和 Flutter 相关的 Plugin ,例如 connectivity_pulusdevice_info_plusfluttertoastshared_preferences_iossqflitewebview_flutter_wkwebviewurl_launcher 等等。

列表地址:https://developer.apple.com/support/third-party-SDK-requirements/

这就很懵逼了,是 Flutter 做了什么「天怒人怨」的问题,还是 Apple 故意针对 Flutter 呢?那在聊这个问题之前,我们首先需要简单了解下,这次的隐私标签里主要涉及的是什么?

这个问题不只是对 Flutter ,其实对于 iOS 来说 2024 在 Xcode15 上也属于最重要的适配需求

隐私清单

**聊隐私清单,首先最主要是就是第三方隐私清单(privacy manifest) **,属于让 SDK 开发人员提供他们 SDK 的一些数据收集行为,然后 App 开发者在集成各种 SDK 之后,可以得到一份详细的隐私清单,如下图是 SDK 里声明的隐私清单。

隐私清单的作用是帮助开发者了解第三方 SDK 如何使用数据,这样开发者在向 App Store 提交审核时,Xcode 可以将第三方 SDK 中的隐私清单合并,然后导出一个 PDF 报告汇总。

通过这份隐私清单报告,开发者就可以在 App Store 提交审核时,更方便地提供「隐私标签」,如下图所示就是 iOS 14 时 App Store 推出的功能,当时就要求 App 开发者在 App Store 后台声明应用的数据收集和使用场景,让用户在应用详情页面知道 App 收集了什么和做了什么。

那么首先可以知道,SDK 隐私清单的作用,就是让 App 开发者可以根据生成的清单,更好精确和方便地管理自己 App 的隐私标签,一般情况下大概会有:

  • 收集的数据类型

  • 数据是否能关联到用户

  • 数据是否用于跟踪活动

  • 收集此数据的理由

其中关于数据类型可见:https://developer.apple.com/documentation/bundleresources/privacy_manifest_files/describing_data_use_in_privacy_manifests

那如果我不需要隐私清单来管理隐私标签,就可以理会这次的隐私清单的事情了呢?那答案肯定不是,因为隐私标签还包含了其他东西,比如必要理由的 API 声明、声明跟踪域名和第三方 SDK 签名等。

必要理由的 API 声明

首先这个主要是 Apple 新搞了一个 API 分类, 使用这一个 API 分类你需要在隐私清单里说明使用理由, Apple 这么做的目的是主要是想规范 App 随意通过这些 API 做 fingerprinting 识别的行为,相关的 API 也不多,大概涉及:

  • File timestamp APIs
  • System boot time APIs
  • Disk space APIs
  • Active keyboard APIs
  • User defaults APIs

如果 SDK 和 App 里用到了分类里的这些 API ,你就需要在隐私列表里填写原因,例如:

使用了 Disk space APIs 的 systemFreeSize ,在写入前判断磁盘空间大小,那么就需要引用列表里的 E174.1 条款,如下图写明使用的原因。

从目前看,类似 UserDefaultsstat 等 API 还是很容易被使用到,所以 Required Reason API 这部分应该都是跑不掉的

条款列表可见:https://developer.apple.com/documentation/bundleresources/privacy_manifest_files/describing_use_of_required_reason_api

声明跟踪域名

隐私清单其实一定程度也算是应用跟踪透明度 (ATT) 的内容之一,而本次更新,如果用户未通过 App Tracking Transparency (ATT) 授予权限, Apple 就会阻止对追踪域(Tracking Domains)的网络请求。

简单来说,就是需要定义一个 NSPrivacyTrackingDomains 列表,这样但用户不同意 ATT 权限时, 系统就会阻止这些域名的任何调用,所以 SDK 上如果有类似相关跟踪的域名调用,也需要区分声明好跟踪域名和非跟踪域名。

当然,不管你是否利用 ATT 的定义进行跟踪,你都必须在隐私清单中列出收集的数据类型和原因,因为这个和 ATT 没有必然关系,只是如果使用了 ATT 的域名,在这里需要额外声明来符合权限, ATT 在 iOS 17 上实际并没有什么变化

这里的跟踪定义是:能狗将你收集的数据与其他公司 App 收集的数据相关联,比如使用了 IDFV 也算跟踪,。

只是这里我有个疑问,如果我不把 ATT 的相关收集域名放到 NSPrivacyTrackingDomains 列表,其实 Apple 是审核是不是也无法明确发现呢?那么我不做是不是也是可以?

第三方 SDK 签名

本次跟随隐私清单而来的还有第三方 SDK 签名,这是我们以前一直忽略的东西,而 Apple 的目的也很直接,就是希望通过签名认证的方式来确保 SDK 不会被篡改,简单的说就是 SDK 发布时带有 _CodeSignature

需要签名,肯定是 SDK 包含了二进制依赖,没有二进制依赖其实并不需要考虑签名问题

这里的签名其实分 Apple Developer Program 签名和自签名,如果你的 SDK 使用的是 Apple Developer Program ,简单来说就是可以得到更安全可靠的认知加持,安全性拉满,但是如果你采用的是 codesign 自签名,那么也不是不行,就是你自己保管好签名认证的方式。

echo "Build Archive Device Slice"
xcodebuild clean archive -sdk iphoneos -destination 'generic/platform=iOS'[...]
echo "Build Archive Simulator Slice"
xcodebuild clean archive -sdk iphonesimulator -destination 'generic/platform=iOS Simulator' [...]
echo "Create XCFramework"
xcodebuild -create-xcframework [...] -output <YOUR.xcframework>
echo "Codesign XCFramework"
codesign --timestamp -v --sign "<YOUR CERTIFICATE (ABCXYZ)>" "<YOUR.xcframework>"

经过签名认证后的 SDK ,在 Xcode15 会显示对应的 Signature 信息,如果一旦发现本次前面和上次不一致,那么Xcode 就会让编译失败并弹出警告。

当然,如果 SDK 的签名变更符合你预期,比如 SDK 维护人员发生了变化,从而导致证书发生变化,那么你也可以通过接受变更的方式也同意更改。总的来说目前这个阶段签名并不是一定要官方,甚至不一定就强制要签名,Apple 「鼓励】所有 SDK 使用签名,但影响隐私的 SDK 一定要签名,特别是前面提到列表里的

目前来说,App Store 已经开始检查最近提交的 App 是否包含影响隐私的 SDK ,如果影响隐私的 SDK 不包含签名和隐私清单,Apple 将向应用开发人员发送提醒邮件,包括提供必要理由的 API 部分,最后会在 2024 年春季开始要求审核。

更多官方资料:

  • https://developer.apple.com/documentation/bundleresources/privacy_manifest_files/describing_use_of_required_reason_api#4278397
  • https://developer.apple.com/documentation/Xcode/verifying-the-origin-of-your-xcframeworks
  • https://developer.apple.com/documentation/bundleresources/privacy_manifest_files/describing_data_use_in_privacy_manifests?language=objc

Flutter

那本次隐私清单对于 Flutter 来说,最大的影响就是大量 Flutter Plugin 被挂上了 Apple 官方的用户隐私产生重大影响的第三方 SDK 列表,因为上了列表,就被认定为是影响隐私的 SDK,那么隐私清单是跑不了的了,另外如果有二进制依赖还需要满足签名条件,所以这对于 Flutter 来说在 iOS 17的适配上无疑「雪上加霜」,可以看到目前官方开了很多关于官方 package 的 iOS 隐私清单适配 issue 。

对于 Flutter Engine 部分,其实官方适配隐私清单难度并不大,目前调查完 iOS 上 Flutter Engine 主要需要适配的有:

  • File timestamps :

    • C617.1 用于 FlutterAppDelegate.mm 里的应用状态恢复
    • 0A2A.1 用于实施相关 File 包装器
  • System boot time:

    • 35F9.1 用于各种事件计时和经过时间的计算

目前官方在 #131494 已经表示,会将 PrivacyInfo.xcprivacy 包含在未来 Flutter.framework 中,所以这部分并不需要担心

而在 flutter/packages 部分目前却是有棘手的问题,例如 shared_preferences ,它被列入影响隐私 SDK 列表的原因是因为 NSUserDefaults ,但是 shared_preferences 它本身只是 API 的封装,为了方便 Flutter 开发者调用,它本身是不知道如何/为什么使用它,在 SDK 层面很难在隐私清单描述给出所谓的「收集原因」

另外第三方 Plugin 也可能使用 shared_preferences ,但是 App 开发并不知道它用来做什么,那么如果让 pub 的 Plugin 能描述好隐私清单的内容?

目前官方文档提及:

If you use the API in your third-party SDK’s code, then you need to report the API in your third-party SDK’s privacy manifest file

这听起来像是只要拥有它的代码就需要标记出它的原因,但是实际上 Plugin 不知道该层存储的数据是什么或如何被使用。

对于 “收集” 的定义目前很模糊,类似的还有 webview_flutterwebview_flutter 本身不收集任何内容,但是App 可以用来 webview_flutter 收集浏览历史记录,然后这如何在 SDK 的隐私清单里去体现?

感觉目前的 iOS 要求没有很明确,适配方向不够清晰。

最后,目前文档说他们「鼓励」每个人都采用该清单,而对于在隐私列表的 SDK 看起来是强制的,但是如何选择这些 SDK 的规则目前也看不到,所以只能等待后续和 Apple 的沟通回复。

更多进度可见:

  • https://github.com/flutter/flutter/issues/131940
  • https://github.com/flutter/flutter/issues/131495
  • https://github.com/flutter/flutter/issues/131494

最后

总结一下,本次 iOS 隐私清单主要覆盖的有:

  • SDK 提供隐私清单的数据收集类型、使用描述和用途
  • 必要理由的 API 需要提供使用“代码”和原因
  • ATT 跟踪添加域名区分
  • 第三方 SDK 签名

这里面 SDK 提供的隐私清单,我个人理解:

  • 首要是用来给 App 打包后,通过导出的 pdf 参考管理隐私标签
  • 其次对于必要理由的 API 的使用附带使用说明
  • 关于 ATT 收集相关的数据域名添加到清单进行区分,至于你不写是否会被抓住不好说
  • 第三方 SDK 签名不是强制,也可以自签名,前提是你不是在官方影响隐私 SDK 列表中
  • 如果你 SDK 没有二进制,没有使用必要理由的 API,理论上其实甚至可以不管什么隐私清单和签名,因为你正常也进不去官方的影响隐私 SDK 列表。

本次更多是探讨,因为官方的描述和文档内容上其实并不严谨,甚至有很多模糊的地方。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/218766.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

共创共赢|美创科技获江苏移动2023DICT生态合作“产品共创奖”

12月6日&#xff0c;以“5G江山蓝 算网融百业 数智创未来”为主题的中国移动江苏公司2023DICT合作伙伴大会在南京成功举办。来自行业领军企业、科研院所等DICT产业核心力量的百余家单位代表参加本次大会&#xff0c;共话数实融合新趋势&#xff0c;共拓合作发展新空间。 作为生…

I/O设备模型

I/O设备模型 绝大部分的嵌入式系统都包括一些I/O&#xff08;Input/Outut&#xff0c;输入/输出&#xff09;设备&#xff0c;例如仪器上的数据显示屏、工业设备上的串口通信、数据采集设备上用于保存数据的Flash或SD卡&#xff0c;以及网络设备的以太网接口等。 I/O设备模型…

【人工智能Ⅰ】实验8:DBSCAN聚类实验

实验8 DBSCAN聚类实验 一、实验目的 学习DBSCAN算法基本原理&#xff0c;掌握算法针对不同形式数据如何进行模型输入&#xff0c;并结合可视化工具对最终聚类结果开展分析。 二、实验内容 1&#xff1a;使用DBSCAN算法对iris数据集进行聚类算法应用。 2&#xff1a;使用DBS…

macOS Sonoma 14.2RC(23C63)发布

系统介绍 黑果魏叔12 月 6 日消息&#xff0c;苹果今日向 Mac 电脑用户推送了 macOS 14.2 RC更新&#xff08;内部版本号&#xff1a;2323C633&#xff09;&#xff0c;本次更新距离上次发布隔了 49 天。 预计正式版会在下周到来。届时用户可以打开“设置”->“通用”->…

ATFX汇市:美联储12月利率决议来袭,或将连续第三次暂停加息

ATFX汇市&#xff1a;明日3:00&#xff0c;美联储将公布12月份利率决议结果&#xff0c;市场普遍预期联邦基金利率上限将维持在5.5%不变&#xff0c;美联储将连续第三次暂停加息。上周五公布的11月非农就业报告显示&#xff0c;新增非农就业人口19.9万人&#xff0c;远高于前值…

windows禁用系统更新

1.在winr运行框中输入services.msc&#xff0c;打开windows服务窗口。 services.msc 2.在服务窗口中&#xff0c;我们找到Windows update选项&#xff0c;如下图所示&#xff1a; 3.双击windows update服务&#xff0c;我们把启动类型改为禁用&#xff0c;如下图所示&#xff…

图片怎么去文字水印?分享三个简单无痕方法

图片怎么去文字水印&#xff1f;大家在遇到好看的图片时&#xff0c;是否曾想过将其用作自己的头像&#xff1f;然而&#xff0c;很多时候从网上保存的图片会带有平台或作者的水印&#xff0c;这会严重影响头像的整体视觉效果&#xff0c;导致我们不得不放弃使用这张图片&#…

代驾系统开发:驶向未来的智能交通服务

随着科技的迅速发展&#xff0c;代驾系统的开发成为改善出行体验和提升交通服务智能化的重要一环。本文将聚焦于代驾系统开发的技术创新&#xff0c;为读者呈现其中涉及的一些令人振奋的技术代码。 1. 区块链技术的运用&#xff1a; 区块链技术被引入代驾系统&#xff0c;可…

11.机器人系统仿真搭建gazebo环境、仿真深度相机、雷达、RGB相机

目录 1 gazebo仿真环境搭建 1.1 直接添加内置组件创建仿真环境 1.2 urdf、gazebo、rviz的综合应用 2 ROS_control 2.1 运动控制实现流程(Gazebo) 2.1.1 已经创建完毕的机器人模型&#xff0c;编写一个单独的 xacro 文件&#xff0c;为机器人模型添加传动装置以及控制器 …

Postswigger 靶场 XSS 通关

文章目录 PostSwigger靶场XSS通关学徒&#xff1a;第一关学徒&#xff1a;第二关学徒&#xff1a;第三关学徒&#xff1a;第四关学徒&#xff1a;第五关学徒&#xff1a;第六关学徒&#xff1a;第七关学徒&#xff1a;第八关学徒&#xff1a;第九关 PostSwigger靶场XSS通关 靶…

插入排序——折半插入排序

1、简述&#xff1a; 折半插入排序&#xff08;binary insertion sort&#xff09;是对插入排序算法的一种改进&#xff0c;由于排序算法过程中&#xff0c;就是不断的依次将元素插入前面已排好序的序列中。由于前半部分为已排好序的数列&#xff0c;这样我们不用按顺序依次寻…

项目部署阿里云服务器详细流程

1.购买域名 官网 域名的作用的是为了DNS解析&#xff0c;这样被人访问的不再是一连串的IP地址&#xff0c;而是形如 www.xxx.com 这样的网站 域名购买流程较长&#xff0c;还需备案&#xff0c;所以能提前准备好&#xff0c;10块左右买个.top域名

Python—KNN分类算法

原文: https://zhuanlan.zhihu.com/p/143092725 1. 概述 KNN 可以说是最简单的分类算法之一&#xff0c;同时&#xff0c;它也是最常用的分类算法之一。注意&#xff1a;KNN 算法是有监督学习中的分类算法&#xff0c;它看起来和另一个机器学习算法 K-means 有点像&#xff0…

百安居的数字化之路:找到用户的“连接器”

从线下客流遭遇悬崖式下跌到逐步回升&#xff0c;越来越多企业认识到&#xff0c;用户消费习惯的改变已经不可逆地影响着各行各业&#xff0c;只有让组织、人员、系统、产品等元素产生新的连接和协同&#xff0c;才能不断强化企业对抗风险的能力。这个过程&#xff0c;也是数字…

改进的A*算法的路径规划(3)

5.4实验结果与讨论 为验证本文算法的有效性&#xff0c;在模拟越野环境中完成路径规划&#xff0c;并通过仿真对比 实验验证了本文改进算法的可行性和综合性能的优越性。 5.4.1 与 传 统A*实验对比 为了验证改进A* 算法与传统A* 的优越性&#xff0c;建立了7050的栅格地图(并…

如何制作AI数字人高清模型?

数字人是什么&#xff1f;重新下一个定义&#xff1a;"把人数字化&#xff0c;以行人的职责“它是用AI技术根据你的真人形象克隆出一个数字人&#xff0c;跟真人的相似度可以达到100%以上的&#xff0c;像你的动作、表情还有声音&#xff0c;都是可以被克隆出来。克隆出来…

SpringBoot程序打包失败处理

&#x1f648;作者简介&#xff1a;练习时长两年半的Java up主 &#x1f649;个人主页&#xff1a;程序员老茶 &#x1f64a; ps:点赞&#x1f44d;是免费的&#xff0c;却可以让写博客的作者开心好久好久&#x1f60e; &#x1f4da;系列专栏&#xff1a;Java全栈&#xff0c;…

最新鸿蒙HarmonyOS4.0开发登陆的界面2

登陆功能 代码如下&#xff1a; import router from ohos.router; Entry Component struct Index {State message: string XXAPP登陆State userName: string ;State password: string ;build() {Row() {Column({space:50}) {Image($r(app.media.icon)).width(200).interpol…

josef约瑟 静态电压继电器 HWY-41B 19-240V 导轨式安装

HWY-40系列无辅源静态电压继电器 HWY-41A无辅源静态电压继电器 HWY-42A无辅源静态电压继电器 HWY-43A无辅源静态电压继电器 HWY-44A无辅源静态电压继电器 HWY-45A无辅源静态电压继电器 HWY-41B无辅源静态电压继电器 HWY-42B无辅源静态电压继电器 HWY-43B无辅源静态电压继电器 …