Flutter 上架如何解决 ITMS-91053 问题

2024-04-24 06:44

本文主要是介绍Flutter 上架如何解决 ITMS-91053 问题,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

最近,我的 Flutter App 发布到 TestFlight 后,就会收到一封邮件:The uploaded build for YOUR APP has one or more issues.

苹果的提示邮件
上面的邮件主要是说,我的 App 缺少了调用 API 的声明,以前从来没看到过,上网一查,才知道了原委。

一、苹果的提交隐私政策更新

2023 年 WWDC 之后,苹果发布了新的《App Store 提交隐私更新》的政策。该政策分为两部分:第三方 SDK 隐私清单和签名。

意思就是,App 中引入的三方 SDK 可能以开发者和用户不知道的方式,影响了用户隐私。每个开发者都有责任搞清楚引入的第三方 SDK到底收集了何等数据以及如何使用它们。苹果的方式就是增加了一种机制,隐私清单,以及 SDK 签名,帮助开发者更好地理解三方 SDK 如何收集和使用数据,为用户提供隐私保护。从 2024 年春季起,提交到 App Store 的 App 需要为 SDK 包含隐私清单(如果引用了广泛引用的三方 SDK)。如果二进制依赖一个 SDK,则还需要提供 SDK 的签名。

简单说,就是现在提供一个“名单”,榜上有名的三方 SDK 都需要特殊对待,不过看这意思,未来显然是要扩散到所有三方 SDK 的,榜上有名的只是治理的第一步。
在这里插入图片描述
另外,就是有一系列 API 的调用,需要声明理由。不论是 App 自己调用的,还是引用的三方 SDK 调用的,都需要提供理由。如果你没有提供理由,则会收到提示,这就有了文章开头的那封信。也就是 ITMS-91053。而调用这些 API 的理由,则不是任意理由,而是经过苹果审核后,认为直接对用户有益处的理由,才在允许的范围内。

从今年 2024 年春天起,必须要在提交的 App 中包含隐私清单,而且这里应该包含对 API 调用的说明。

苹果的官方说明
上面是 2 月底的一次通知,说明了从 3 月 13 日起,App Store Connect 会发送邮件提醒,你的 App 缺乏了调用 API 的理由。而从 5 月 1 日起,苹果列出的 API 的调用,必须包含理由。如果你找不到理由,就不允许使用 API 了。如果添加了名单上的 SDK,还需要包含这些 SDK 的签名。

相关的 API 有五类:

  1. File timestamp APIs
  2. System boot time APIs
  3. Disk space APIs
  4. Active keyboard APIs
  5. User defaults APIs

更详尽的说明可以看大佬的文章,搜索《Flutter 上了 Apple 第三方重大列表,2024 春季 iOS 的隐私清单究竟是什么?》

二、收到 ITMS-91053 后,怎么操作?

我觉得详细的指引还是可以看大佬的文章,只是太高端了,我有点看不懂。摸索了很久,才大概明白了怎么做。

比如,我明白,我需要提供一个 Privacy 的声明,但是到底怎么做?比如是否要所有的三方 SDK 各自声明就行了?而我作为开发者什么都不用做?事实证明这是错的。

又比如,是不是我运行一下 flutter pub get 或者什么脚本,就会自动替我声明一个 Privacy 文件?事实证明这也是错的。

还比如,我是否要检查所有的三方 SDK,看看他们有没有按照要求在自己的 SDK 里提供隐私声明?不过这个真的很有难度,对于不熟的人来说,找都找不到的,比如我就找不到。好在,到了现在 4 月了,马上到 deadline 了,大部分还在维护的 SDK 都添加了 Privacy manifest 了。还好还好,除非太冷门或者作者早已弃坑的 SDK,我没用到。

然后,还有一个重要问题就是 API 的 reasons,这个我看了很多文章都没说清楚。更可恨的是,绝少有 SDK 主动声明自己调用了什么 API,比如我的将近 30 个三方 SDK,只有一个声明自己调用了两种 API(一共五种)。

那么我作为开发者,我到底要干啥?我怎么知道哪个 SDK 用了什么 API,以及他们的原因呢?搜了很多的文章,都没有什么明确的说法,可能对于开发老手来说,都是不言自明的?

折腾了两整天,我大概明白了一件事情。开发者,应该在自己的 App 里提供一个 PrivacyInfo 声明文件,里面应该包含对指定 5 种 API 调用的声明。至于应该声明哪几种。这个就用投石问路的方法即可,你提交到 TestFlight,它会发邮件提醒你,有哪几种 API 你没声明理由。你就在自己的 PrivacyInfo 文件种,解释这几种即可。

比如,开头我贴的邮件,里面涉及了 4 种 API 调用的原因缺乏。你只要声明这四种 API 的调用原因即可。至于到底是哪个 SDK 用的?真实基于什么原因用的,我觉得不太需要关心。因为我自己关心过,我发现,完全是毫无意义的。很难探究,无论是查看 sdk 的源码还是用扫描工具,很难得到什么有益的提示,至于具体的调用原因,就更难搞清楚了。你要做的就是,它说什么有问题,你就声明什么,至于理由,只有少数几种允许的理由,你只要选一个你觉得合理的就行了。具体是什么好像也并不重要。再说太阳底下无新鲜事,难道还有什么神奇理由么?无非就那么几种。

在这里插入图片描述
选中你的 Runner 项目,点 File 菜单,New,然后点 File...
在这里插入图片描述
这样就会在你的项目里创建了一个文件,叫 PrivacyInfo.xcprivacy,和你的 info.plist 在一个目录下。这里我有一个点要提示,因为困扰了我很久,就是一定要把文件选入进 target,在右侧面板,能看到:

在这里插入图片描述
在 XCode 15 右侧的面板上能看到(选中 PrivacyInfo 文件)。这个选项的意思是,将这个文件编译进包里的意思。如果你不勾,相当于没有提供这个文件,我已经试过了。

然后,你用 XCode 15 的编辑工具,用鼠标点选,就可以创建这个文件了。按照我现在的理解,你只要处理好这部分就行了:

在这里插入图片描述
因为我提交到 TestFlight 只提示了四种 API,我就声明了这四种。上面三个声明,据实填写即可。似乎也不用填写 SDK 相关的,只填写你自己编写的部分即可。因为我试过,在 Organizer 里,它会自动的从三方 SDK 里提取到隐私相关的,但是 API 的却不会,必须要你自己声明。

比如,那个 Privacy Nutrition Label Types,其实我自己的 App 是没用的,一个 Google 的包里,用到了。但是我不声明,在 Organizer 里,你选择导出报告的时候,是自动包含了 Google 的声明的。

在这里插入图片描述
创建好 PrivacyInfo 文件,重新打包,提交到 App Store 后,如果没有收到提示邮件那就是成功了。如果明明创建了文件,还是收到提示邮件,就是主要我前文提到的 Target Membership 是否勾选。

总结

本文介绍了,如果收到了 ITMS-91053 提示后,如何添加隐私声明文件,以及怎么创建隐私声明文件。希望对大家有帮助。

引用:
https://forums.developer.apple.com/forums/thread/731541 关于那个 Target Membership
https://github.com/bytebai920/check_privacy 号称可以扫描 API 的使用,但是我觉得没啥意义

这篇关于Flutter 上架如何解决 ITMS-91053 问题的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/931028

相关文章

好题——hdu2522(小数问题:求1/n的第一个循环节)

好喜欢这题,第一次做小数问题,一开始真心没思路,然后参考了网上的一些资料。 知识点***********************************无限不循环小数即无理数,不能写作两整数之比*****************************(一开始没想到,小学没学好) 此题1/n肯定是一个有限循环小数,了解这些后就能做此题了。 按照除法的机制,用一个函数表示出来就可以了,代码如下

hdu1043(八数码问题,广搜 + hash(实现状态压缩) )

利用康拓展开将一个排列映射成一个自然数,然后就变成了普通的广搜题。 #include<iostream>#include<algorithm>#include<string>#include<stack>#include<queue>#include<map>#include<stdio.h>#include<stdlib.h>#include<ctype.h>#inclu

如何解决线上平台抽佣高 线下门店客流少的痛点!

目前,许多传统零售店铺正遭遇客源下降的难题。尽管广告推广能带来一定的客流,但其费用昂贵。鉴于此,众多零售商纷纷选择加入像美团、饿了么和抖音这样的大型在线平台,但这些平台的高佣金率导致了利润的大幅缩水。在这样的市场环境下,商家之间的合作网络逐渐成为一种有效的解决方案,通过资源和客户基础的共享,实现共同的利益增长。 以最近在上海兴起的一个跨行业合作平台为例,该平台融合了环保消费积分系统,在短

购买磨轮平衡机时应该注意什么问题和技巧

在购买磨轮平衡机时,您应该注意以下几个关键点: 平衡精度 平衡精度是衡量平衡机性能的核心指标,直接影响到不平衡量的检测与校准的准确性,从而决定磨轮的振动和噪声水平。高精度的平衡机能显著减少振动和噪声,提高磨削加工的精度。 转速范围 宽广的转速范围意味着平衡机能够处理更多种类的磨轮,适应不同的工作条件和规格要求。 振动监测能力 振动监测能力是评估平衡机性能的重要因素。通过传感器实时监

缓存雪崩问题

缓存雪崩是缓存中大量key失效后当高并发到来时导致大量请求到数据库,瞬间耗尽数据库资源,导致数据库无法使用。 解决方案: 1、使用锁进行控制 2、对同一类型信息的key设置不同的过期时间 3、缓存预热 1. 什么是缓存雪崩 缓存雪崩是指在短时间内,大量缓存数据同时失效,导致所有请求直接涌向数据库,瞬间增加数据库的负载压力,可能导致数据库性能下降甚至崩溃。这种情况往往发生在缓存中大量 k

6.1.数据结构-c/c++堆详解下篇(堆排序,TopK问题)

上篇:6.1.数据结构-c/c++模拟实现堆上篇(向下,上调整算法,建堆,增删数据)-CSDN博客 本章重点 1.使用堆来完成堆排序 2.使用堆解决TopK问题 目录 一.堆排序 1.1 思路 1.2 代码 1.3 简单测试 二.TopK问题 2.1 思路(求最小): 2.2 C语言代码(手写堆) 2.3 C++代码(使用优先级队列 priority_queue)

Flutter 进阶:绘制加载动画

绘制加载动画:由小圆组成的大圆 1. 定义 LoadingScreen 类2. 实现 _LoadingScreenState 类3. 定义 LoadingPainter 类4. 总结 实现加载动画 我们需要定义两个类:LoadingScreen 和 LoadingPainter。LoadingScreen 负责控制动画的状态,而 LoadingPainter 则负责绘制动画。

pip-tools:打造可重复、可控的 Python 开发环境,解决依赖关系,让代码更稳定

在 Python 开发中,管理依赖关系是一项繁琐且容易出错的任务。手动更新依赖版本、处理冲突、确保一致性等等,都可能让开发者感到头疼。而 pip-tools 为开发者提供了一套稳定可靠的解决方案。 什么是 pip-tools? pip-tools 是一组命令行工具,旨在简化 Python 依赖关系的管理,确保项目环境的稳定性和可重复性。它主要包含两个核心工具:pip-compile 和 pip

【VUE】跨域问题的概念,以及解决方法。

目录 1.跨域概念 2.解决方法 2.1 配置网络请求代理 2.2 使用@CrossOrigin 注解 2.3 通过配置文件实现跨域 2.4 添加 CorsWebFilter 来解决跨域问题 1.跨域概念 跨域问题是由于浏览器实施了同源策略,该策略要求请求的域名、协议和端口必须与提供资源的服务相同。如果不相同,则需要服务器显式地允许这种跨域请求。一般在springbo

题目1254:N皇后问题

题目1254:N皇后问题 时间限制:1 秒 内存限制:128 兆 特殊判题:否 题目描述: N皇后问题,即在N*N的方格棋盘内放置了N个皇后,使得它们不相互攻击(即任意2个皇后不允许处在同一排,同一列,也不允许处在同一斜线上。因为皇后可以直走,横走和斜走如下图)。 你的任务是,对于给定的N,求出有多少种合法的放置方法。输出N皇后问题所有不同的摆放情况个数。 输入