2024 Flutter iOS 隐私清单上线,5 月 1 号最后期限,你收到 「ITMS-91053」 了吗?

news2024/11/27 14:29:49

2023 年底的时候,我就发过了 《Flutter 上了 Apple 第三方重大列表,2024 春季 iOS 的隐私清单究竟是什么?》 相关内容,如果你还对隐私清单等相关要求不了解,建议先看看前文。

如果你已经有相关了解,并且近期也提交过 App 到 App Store ,那么你可能已经收到过类似 「ITMS-91053」 的相关警告邮件,这就是隐私清单里的「必要理由的 API 声明」,也是隐私清单里最大家最容易遇到的问题之一,主要包括了:

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

邮件里也写明了,最后的要求期限是 5 月 1 号,所以正如去年说的那样,春季过去后,也是时候面对隐私清单的适配要求了

实际上在 Flutter 进度里,官方和主流的插件基本都已经完成了隐私清单的适配要求,而目前主要出现在 Upcoming third-party SDK requirements 列表的插件,还没适配动静的应该就是 fluttertoast 了,尽管已经有了 PR #489 ,但是暂时还没有相关回应。

不过问题不大,最多自己 fork 一个 merge 下。

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

官方的回复是,如果SDK没有收集任何数据,那么应该提供一个隐私清单,概述没有收集任何信息,所以这也是 webview_flutter 等插件目前的适配逻辑之一。

没适配的插件,也可以考虑自己 fork 过来通过类似方式兼容。

接着我们聊 「ITMS-91053」,如果你收到 ITMS-91053: Missing API declaration - Your app’s code in the “Runner” file ,首先要做的就是确定你的 Flutter SDK 是否升级到了 3.19 ,因为 Engine 的适配官方是在 3.19 做的,当然,如果你就是想做「钉子户」,那么你也可以参考下方的 issue 和 pr ,自己 fork 个 engine 去适配支持:

  • #48951 Add xcprivacy privacy manifest to iOS framework

  • #131494 Find Required Reason API usage in Flutter Engine and create Privacy Manifest

另外,并不是看到 Your app’s code in the “Runner” file 就是说明是 Engine 的隐私清单有问题,因为构建方式也可能会影响到警告的提示。

Flutter 3.19 本身已经有一个合规的隐私清单,如果你在 3.19 还能遇到 ITMS-91053: Missing API declaration - Your app’s code in the “Runner” file,官方表示可能是:

  1. 引入的插件有隐私清单 ( podspec 使用了 s.static_framework = true ),但目前你使用的是旧版本,所以需要更新插件
  2. 使用的插件没有声明隐私清单,或者隐私清单不完整

对于 1 的情况,可以将插件的依赖版本升级到最新,然后不要忘了运行一次 flutter pub upgrade ,因为很多插件最近才添加清单支持,另外运行 flutter pub upgrade 的必要性在于:

例如 shared_preferences 目前是 2.2.2,其清单文件是在其依赖的 shared_preferences_foundation 上 ,而 shared_preferences_foundation 在其内部依赖版本是 ^2.2.0 ,但是其实包含隐私清单的包是 2.3.5所以如果你不执行 flutter pub upgrade ,那么你本地的 shared_preferences 插件所使用的 foundation 依赖可能会是旧版本

所以就算升级完插件后,查看插件里是否包含 privacy 文件也是非常重要的一个步骤

另外,对于项目的 Podfile 构建是否使用 use_frameworks! ,也是目前 「ITMS-91053」 警告的主要问题之一 ,为了更好区分和解决 「ITMS-91053」 的问题,官方建议:

  1. 一般建议使用 use_frameworks! ,或者插件的 podspec 配置 static_framework = true 为强制静态链接,正常情况下可以把出现的警告指向插件,然后沟通插件方配合解决问题,至少清楚问题在哪里。
  2. 如果因为构建等原因,无法使用 1 的方式,或者说可以不使用 1 ,那么可以直接在 App 端强制创建隐私清单 ,然后通过 find build/ios/iphoneos -name *.xcprivacy 在的项目中运行,对于所有 <some_plugin_name>.bundle/PrivacyInfo.xcprivacy 查看它们所做的声明,然后合并复制到上面创建的文件,然后自己补充缺少的。

因为 Flutter 目前在处理 「ITMS-91053」 问题上,最难就是找到警告来自哪个插件,又是因为什么原因不符合, 例如一开始 permission_handler_apple 插件做了隐私清单申明,但是其实少了 NSUserDefaults ,因为它设置了 static_framework = true,所以导致 NSUserDefaults 代码位于 Runner ,一开始找问题的时候,因为它已经适配过了,大家都忽略了 permission_handler ,后来才发现,目前 flutter-permission-handler #1292 已经修复了这个问题。

最后,如果你在向官方提出相关 issue 时,例如在 #145269 下提出相关问题的时候,最好是附上下列配置,以便于快速定位问题:

  • pubspec.yamlpubspec.lock ,特别是 pubspec.lock
  • ios/Podfile
  • 是否自己修改过 Runner 中的 native 代码
  • 如果方便提供 .ipa.xcarchive

目前来说一些问题还是存在,而存在的原因基本是定位到是哪个插件,和如果理解这样做是否符合条款,目前 issue 都有人提供 create demo 包提交测试是否会触发 「ITMS-91053」,只能说大家都还在“以身试法”,前任种树后人乘凉,感兴趣的可以继续关注:

  • https://github.com/flutter/flutter/issues/143232

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

  • https://github.com/flutter/flutter/issues/145269

那么 ,5 月 1 号马上就要来了,你是继续做钉子户,还是升级到 Flutter 3.19 ?如果还有什么问题,欢迎交流讨论。

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

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

相关文章

【LAMMPS学习】七、加速性能(4)加速器包

7. 加速性能 7.1.基准测试 7.2.测试性能 7.3.通用技巧 7.4.加速器包 LAMMPS 中添加了各种pair_style、fixes、compute 和其他命令的加速版本&#xff0c;其运行速度通常比标准非加速版本更快。有些需要您的系统上存在适当的硬件&#xff0c;例如GPU 或 Intel Xeon Phi 协处…

数据库的负载均衡,高可用实验

一 高可用负载均衡集群数据库实验 1.实验拓扑图 2.实验准备(同一LAN区段)&#xff08;ntp DNS&#xff09; 客户端&#xff1a;IP&#xff1a;192.168.1.5 下载&#xff1a;MariaDB 负载均衡器&#xff1a;IP&#xff1a;192.168.1.1 下载&#xff1a;keepalived ipvsadm I…

适用于 PC-3000 Portable III 的新型 SAS 适配器, 让数据恢复踏足更广!

天津鸿萌科贸发展有限公司从事数据安全业务20余年&#xff0c;在数据恢复、数据取证、数据备份等领域有丰富的案例经验、前沿专业技术及良好的行业口碑。同时&#xff0c;公司面向取证机构及数据恢复同行&#xff0c;提供数据恢复实验室建设方案&#xff0c;包含数据恢复硬件设…

开源代码分享(19)-配电网孤岛优化划分方法

参考文献&#xff1a; DING Tao, LIN Yanling, LI Gengfeng, et al. A new model for resilient distribution systems by microgrids formation[J]. IEEE Transactions on Power Systems, 2017, 32(5): 4145-4147. 1.基本原理 通过分布式电源&#xff08;DGs&#xff09;形…

车载平板丨车载数据终端丨车载平板电脑丨农机使用

车载加固终端通常是为了在车辆行驶过程中保证通讯信号稳定和数据传输安全而设计的设备。在农机上使用车载加固终端&#xff0c;可以提高农机在野外作业时的通讯和数据传输质量&#xff0c;增强对农机的控制能力和运行安全性。以下是使用车载加固终端在农机上实现通讯加固的步骤…

Thingsboard PE智慧运维仪表板实例(二)【智慧排口截污实例】

ThingsBoard 的仪表板是一个用于可视化和监控物联网数据的重要组件。 它具有以下特点: 1. 可定制性:用户可以根据自己的需求创建各种类型的图表、表格和指标。 2. 数据可视化:以直观的方式展示设备数据,帮助用户快速了解系统状态。 3. 实时更新:实时反映设备的最新数据…

二叉树的前序遍历、中序遍历、后序遍历

二叉树的前序遍历、中序遍历、后序遍历 一、递归算法的三个要素二、144. 二叉树的前序遍历三、94. 二叉树的中序遍历四、145. 二叉树的后序遍历 一、递归算法的三个要素 1、确定递归函数的参数和返回值&#xff1a; 确定哪些参数是递归的过程中需要处理的&#xff0c;那么就在…

报错:AttributeError: module ‘PIL.Image‘ has no attribute ‘ANTIALIAS‘

报错内容&#xff1a;AttributeError: module PIL.Image has no attribute ANTIALIAS 问题所在&#xff1a; 使用PIL读取图像后对其进行Resize时由于PIL 版本问题出现AttributeError: module PIL.Image has no attribute ANTIALIAS 具体的代码如下 resized_img img.resize(ta…

交换机与队列的介绍

1.流程 首先先介绍一个简单的一个消息推送到接收的流程&#xff0c;提供一个简单的图 黄色的圈圈就是我们的消息推送服务&#xff0c;将消息推送到 中间方框里面也就是 rabbitMq的服务器&#xff0c;然后经过服务器里面的交换机、队列等各种关系&#xff08;后面会详细讲&…

【python】python的选择语句的三个题目

1.乘坐飞机时&#xff0c;有些航班没有行李额度&#xff0c;当乘客的行李小于等于20公斤时&#xff0c;按每公斤1.68元收费&#xff1b;大于20公斤时&#xff0c;按每公斤1.98元收费&#xff0c;编写程序计算收费情况&#xff08;保留两位小数&#xff09; air_bagfloat(input…

制药领域的技术革命:Profinet转CanOpen网关大放异彩

在科技飞速发展的今天&#xff0c;制药行业正采用更先进的配置方式&#xff0c;以提升生产效率。对于制药行业来说&#xff0c;生产环节中涉及到的各种设备、系统和流程需要高效协同&#xff0c;而这正是Profinet转CanOpen网关所能提供的价值所在。Profinet转CanOpen网关作为一…

X服务器远程连接问题解决:Bad displayname ““‘或Missing X server or $DISPLAY

X服务器远程连接问题 报错1 ImportError: this platform is not supported: (failed to acquire X connection: Bad displayname "", DisplayNameError()) Try one of the following resolutions: * Please make surethat you have an X server running, and that …

反射(Reflection) --Java学习笔记

反射 反射就是:加载类&#xff0c;并允许以编程的方式解剖类中的各种成分(成员变量、方法、构造器等) 反射学什么? 学习获取类的信息、操作它们 反射第一步:加载类&#xff0c;获取类的字节码:Class对象获取类的构造器:Constructor对象获取类的成员变量:Field对象获取类的成…

利用vivid包,点亮机器学习模型图:惊艳的可视化新体验

一、引言 随着大数据时代的到来&#xff0c;机器学习技术在各个领域得到了广泛的应用。然而&#xff0c;由于机器学习模型的复杂性和抽象性&#xff0c;理解和解释这些模型往往是一项挑战。因此&#xff0c;机器学习可视化成为了连接数据和模型理解之间的桥梁&#xff0c;具有至…

DP:子数组模型

一、最大子数组和 . - 力扣&#xff08;LeetCode&#xff09; 二、环形子数组的最大和 . - 力扣&#xff08;LeetCode&#xff09; class Solution { public:int maxSubarraySumCircular(vector<int>& nums) {//动态规划思想解决 //环形数组问题&#xff0c;尝试转…

AIGC实战——StyleGAN(Style-Based Generative Adversarial Network)

AIGC实战——StyleGAN 0. 前言1. StyleGAN1.1 映射网络1.2 合成网络1.3 自适应实例归一化层1.4 风格混合1.5 随机变化 2. StyleGAN 生成样本3. StyleGAN23.1 权重调制与解调3.2 路径长度正则化3.3 非渐进式增长 4. StyleGAN2 生成样本小结系列链接 0. 前言 StyleGAN (Style-Ba…

STM32F4 IAP跳转APP问题及STM32基于Ymodem协议IAP升级笔记

STM32F4 IAP 跳转 APP问题 ST官网IAP例程Chapter1 STM32F4 IAP 跳转 APP问题1. 概念2. 程序2.1 Bootloader 程序 问题现象2.2. APP程序 3. 代码4. 其他问题 Chapter2 STM32-IAP基本原理及应用 | ICP、IAP程序下载流程 | 程序执行流程 | 配置IAP到STM32F4xxxChapter3 STM32基于Y…

linux-docker安装nginx

1.拉取镜像&#xff1a; docker pull nginx2.创建挂在路径&#xff1a; mkdir -p /usr/local/nginx/conf mkdir -p /usr/local/nginx/logs mkdir -p /usr/local/nginx/www mkdir -p /usr/local/nginx/conf.d 3.启动镜像:为了拿到位置文件&#xff0c;先启动下 docker run -…

本地项目提交 Github

工具 GitIdeaGithub 账号 步骤 使用注册好的 Github 账号&#xff0c;登陆 Github&#xff1b; 创建 Repositories (存储库)&#xff0c;注意填写图上的红框标注&#xff1b; 创建完成之后&#xff0c;找到存储库的 ssh 地址或 https 地址&#xff0c;这取决于你自己的配置…

linux网络知识

七层模型 应用层 为操作系统或者网络应用程序提供网络服务的接口 表示层 解决不同系统之间的通信问题&#xff0c;负责数据格式的转换 会话层 自动收发包&#xff0c;自动寻址&#xff0c;负责建立和断开连接 传输层 将上层数据分段并提供端到端的…