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

news2024/11/16 23:43:16

最近,我的 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 的使用,但是我觉得没啥意义

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

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

相关文章

Python构建学生信息管理系统:构建RESTful API - 学生信息管理系统的后端逻辑

在之前的博客里,我们已经完成了项目初始化,在本篇博客中,我们将深入探讨如何使用Flask框架实现学生信息管理系统的后端逻辑,特别是通过RESTful API来实现学生信息的增删改查(CRUD)操作。 Flask RESTful AP…

传染病模型SIR及其变体(python版本)

文章目录 传染病模型及其变体1. SI模型1.1代码2. SIS模型2.1 代码3. 基本再生数 basic reproductive number4. SIR模型4.1 代码5. SEIR模型5.1 代码6. SEIJR模型6.1 代码7. SEIJRD模型7.1 代码传染病模型及其变体 1. SI模型 在该模型里面,群体中只有两种人:易感者和感染者。…

数据可视化-ECharts Html项目实战(14)

在之前的文章中,我们深入学习ECharts鼠标左键触发。想了解的朋友可以查看这篇文章。同时,希望我的文章能帮助到你,如果觉得我的文章写的不错,请留下你宝贵的点赞,谢谢。 数据可视化-ECharts Html项目实战(…

Open-Sora:开源版的Sora

项目简介 本项目希望通过开源社区的力量复现Sora,由北大-兔展AIGC联合实验室共同发起,当前我们资源有限仅搭建了基础架构,无法进行完整训练,希望通过开源社区逐步增加模块并筹集资源进行训练,当前版本离目标差距巨大&…

java多功能手机

随着科技的发展,手机的使用已经普及到每个家庭甚至个人,手机的属性越来越强大,功能也越来越多,因此人们在生活中越来越依赖于手机。 任务要求,使用所学知识编写一个手机属性及功能分析程序设计,测试各个手机…

国产POL8903 LVDS转MIPI带旋转功能方案介绍

一、芯片简介 1、系统 高性能 MIPS 32bit CPU 内核: 高性能 DSP 内核图像处理单元 16KB指令 Cache 16KB数据 Cache 96KB片上 SRAM 内嵌DDR3控制器 2、 LVDS 输入 支持1或者2通道 LVDS 输入 支持最大1920x108060Hz输入 兼容 VESA 和 JEIDA 格式 通道内5条…

「ChatGPT」掀起新一轮AI热潮!超越GPT-4 Turbo,商汤日日新大升级!

目录 拳打 GPT-4 Turbo ,脚踢 DALLE 3 端侧大模型,唯快不破 AI 应用落地需要一个即插即用的大模型超市 并不存在 AI 这个行业,只有 AI行业,强调 AI 需要与传统产业合作,这种关系是结合与赋能,而不是颠覆…

设计模式-状态模式在Java中的使用示例-信用卡业务系统

场景 在软件系统中,有些对象也像水一样具有多种状态,这些状态在某些情况下能够相互转换,而且对象在不同的状态下也将具有不同的行为。 为了更好地对这些具有多种状态的对象进行设计,我们可以使用一种被称之为状态模式的设计模式…

Adobe Illustrator 2024 v28.4.1 (macOS, Windows) - 矢量绘图

Adobe Illustrator 2024 v28.4.1 (macOS, Windows) - 矢量绘图 Acrobat、After Effects、Animate、Audition、Bridge、Character Animator、Dimension、Dreamweaver、Illustrator、InCopy、InDesign、Lightroom Classic、Media Encoder、Photoshop、Premiere Pro、Adobe XD 请…

【注解和反射】获取类运行时结构

继上一篇博客【注解和反射】类加载器-CSDN博客 目录 七、获取类运行时结构 测试 getFields()和getDeclaredFields() getMethods()和getDeclaredMethods() 七、获取类运行时结构 获取类运行时结构通常指的是在Java等面向对象编程语言中,使用反射(Ref…

【git学习】Git 的基本操作

文章目录 🚀创建 Git 本地仓库🚀配置 Git🚀认识⼯作区、暂存区、版本库🚀添加⽂件操作 🚀创建 Git 本地仓库 仓库是进⾏版本控制的⼀个⽂件⽬录。我们要想对⽂件进⾏版本控制,就必须先创建⼀个仓库出来。 …

谷歌发布基于声学建模的无限虚拟房间增强现实鲁棒语音识别技术

声学室模拟允许在AR眼镜上以最少的真实数据进行训练,用于开发鲁棒的语音识别声音分离模型。 随着增强现实(AR)技术的强大和广泛应用,它能应用到各种日常情境中。我们对AR技术的潜能感到兴奋,并持续不断地开发和测试新…

web前端框架设计第六课-样式绑定

web前端框架设计第六课-样式绑定 一.预习笔记 1.class属性绑定 给P标签绑定一个类样式,类名为active。当active取值为true时,表示绑定样式成功,取值为false时,取消绑定 以对象形式给P标签绑定多个类样式 以数组形式给P标签绑定多…

网络安全新挑战:通用人工智能(AGI)等级保护指南

通用人工智能(AGI)的发展现状及趋势 随着2023年大语言模型应用的划时代突破,以ChatGPT为杰出代表的此类技术犹如一股洪流,彻底颠覆了人类与机器智能交互的疆界,引领通用人工智能(AGI)步入一个崭…

网络基础(day3)建议在电脑端注册登陆观看!!!

【 理论重点】 网络是什么&#xff1f; &#xff08;网络是载体&#xff0c;目的是传输互联网中的数据&#xff0c;数据是终端产生<手机、电脑、服务器等>。&#xff09; 如何组件网络&#xff08;良性网络架构&#xff09;&#xff1f;有网络架构思维&#xff0c;得按层…

宜搜科技死磕港交所上市:从搜索引擎到广告投放,业绩疲态凸显

近日&#xff0c;宜搜科技控股有限公司&#xff08;下称“宜搜科技”&#xff09;向港交所递交招股书&#xff0c;计划在香港主板上市&#xff0c;中银国际为其独家保荐人。 值得注意的是&#xff0c;宜搜科技已在资本市场辗转多年。该公司曾于2014年向纽交所递交上市申请&…

easyExcel快速入门

目录 &#x1f9c2;1.简单介绍 &#x1f32d;2.快速入门 &#x1f953;1.导入依赖 &#x1f37f;2.导出到excel &#x1f38f;3.读入数据 &#x1f389;4.下载 1.简单介绍 传统操作Excel大多都是利用Apach POl进行操作的,但是POI框架并不完善,使用过程非常繁琐且有较多…

Github进行fork后如何与原仓库同步

前言 fork了一个仓库以后怎么同步源仓库的代码&#xff1f; 步骤 1、执行命令 git remote -v 查看你的远程仓库的路径。 以一个实际例子说明&#xff0c; 来源仓库&#xff1a; TheFirstLineOfCode/basaltgit remote -v得到&#xff1a; origin https://github.com/ghmi…

Redis之路系列(5)功夫在诗外

5 拓展篇—功夫在诗外 6.0新特性 相对都比较鸡肋&#xff0c;谨慎在生产环境使用 ACL安全策略 Redis6版本推出了ACL(Access Control List)访问控制权限 的功能&#xff0c;基于此功能&#xff0c;可以设置多个用户&#xff0c;并且给每个用户单独设 置命令权限和数据权限。 …

机器学习/算法工程师面试题目与答案-深度学习部分1

机器学习/算法工程师面试题目与答案-深度学习部分 BatchNormalization的作用梯度消失循环神经网络&#xff0c;为什么好?什么是GroupConvolution什么是RNN神经网络中权重共享的是&#xff1f;神经网络激活函数&#xff1f;为什么在深度学习中常进行finetuning画GRU结构图什么是…