Apple PrivacyInfo.xcprivacy 苹果隐私清单调研
1.在苹果强制执行的SDK名单中的,以framework形式存在的SDK必须包含自己的隐私清单和签名
2.在苹果强制执行的SDK名单中的,以源码文件存在的,无需处理(若作者有更新,也可以适当更新)
3.应用程序自己的清单文件PrivacyInfo.xcprivacy 使用默认名,不可重命名,否则无法导出隐私报告
4.隐私清单的包含项,苹果列举出五项隐私API(用到那个声明那个)至于Privacy Nutrition Label Types的配置,一般SDK是不填写这些的,除了音视频,地图这些大的SDK,但是应用程序自身的隐私清单,这里必须设置,因为一般app,邮箱,用户id,大概地理位置,照片和视频,崩溃数据采集这些总该用到吧,参照:https://developer.apple.com/documentation/bundleresources/privacy_manifest_files/describing_data_use_in_privacy_manifests 设置此项即可,Linked to User和Used for Tracking 基本设置为NO,但是邮箱和电话这两个场景是否链接用户看你实际场景下的作用。基本不向用户发广告就设置NO即可
5.Extension扩展库如push或者widget之类的,也需要添加PrivacyInfo.xcprivacy文件
示例:推送扩展库NotificationService,这些本质上属于一个新的target,除了所内部引入的三方库有自己的清单外(个推,友盟,极光)扩展库自己也要有清单文件,哪怕你什么隐私api和追踪透明度都没用到,也要有这样的文件,大不了Privacy Tracking Enabled设置为NO,其他项不设置,切记,切记。参考下面邮件所述
6.苹果鼓励所有SDK都遵循此项新规,如果不属于苹果列举的强制执行名单的SDK,官方或作者已有更新,则根据自己情况看是否想去更新。
7.纯OC项目无需在pod中引入 user_frameworks! 否则需解决报错。
8.项目自己的隐私清单创建后使用默认名,决不允许更改名字,否则将无法导出隐私报告
总结:在苹果规定的强制执行名单中的,且以framework形式存在的SDK必须有自己的签名和隐私清单,哪怕这个SDK什么隐私API都没使用,也要有一份清单仅设置Privacy Tracking Enabled为NO,其他项不设置即可。
至于其他在名单中,但是链接形式是源码文件的,无需处理,如果作者已更新,你也可以去更新,至于踩坑点,本文已全部记录。
如果你是swift混编,所有源码文件最终是framework静态库链接的,如果作者实在没更新,就手动把源码拖入项目即可。
怎么检查你的清单加好了呢???直接archive,查看你的隐私报告,然后对archive后的包选择查看包内容,最终进入app的包里,苹果要求的sdk的boundle内有隐私清单即可
注意点
1.SDCycleScrollView和WMZBanner 内部会默认引入SDWebImage,如后续SD需手动导入项目维护时,这两个类库也一并改为手动
2.微信2.4.0framework版本包含清单文件,但.a库版pod后不包含
3.MBProgressHUD / Reachability / SVProgressHUD 不要拉取最新版本分支,直接拉取master,作者把清单文件添加在了master
4.BAPickView,BAKit.h中第65行的NSLog会和项目宏定义的NSLog冲突,可能出现控制台无法打印,更新后可手动注释
这三个库不要拉取指定的最新版本,否则不包含隐私清单,直接拉取master的最新代码,作者这货直接加在了master,目前对应的git上的issue很多开发者还在问作者如何解决,本人踩坑一天才发现这货加在了master
如果你指定更新最新版本的分支会出现:
SVProgressHUD的清单文件和你自己创建的路径冲突报错,MBProgressHUD和Reachability更新后没有清单文件
正确pod方式:
pod 'MBProgressHUD',:git => 'https://github.com/jdg/MBProgressHUD.git'
pod 'SVProgressHUD', :git => 'https://github.com/SVProgressHUD/SVProgressHUD.git'
pod 'Reachability', :git => 'https://github.com/tonymillion/Reachability.git'
最后附上我的pod文件和隐私清单文件
(注意这些类型按照上面的高亮链接结合自己app去比对,要写全,使用目的基本写app功能即可,除非你真的有个性化推荐等其他用途。社区类app,社交类app需要关注有没有个性化推荐,其他用户生成内容等等。至于是否跟踪用户我设置的NO,即便你真的跟踪了,也建议设置为NO,关于手机号注册登录,相册拍照,分享等这些场景,链接用户设为YES即可)
隐私报告
我更新了的源码库清单文件(源码库可选更,不做强制)
我的pod文件
最后附上 某大厂的内部调研
注意:target下只要存在隐私清单且所使用的隐私api描述完整,提审时就不会再次收到邮件。
但如果你没填写Privacy Nutrition Label Types,即:根据苹果文档要求的场景,列举追踪了那些数据,未来审核是否被拒并不确定,建议认真梳理填写此项。
target,只要是宿主工程,子工程,扩展库,weight小组件这些本质都属于target。
对于你的三方库是framework静态库或.a静态库且在苹果要求名单中,但是作者并未更新的,建议不作处理。根据上述(target下只要存在隐私清单且所使用的隐私api描述完整,提审时就不会再次收到邮件)应该不会有问题。不建议大改
如果需要修改,如果你的库是.a静态库,一律转为framework静态库,因为二者区别是framework对比.a允许捆绑静态资源。这时候可以自己为其签名并增加隐私清单。即便没使用隐私api也要有隐私清单,Privacy Tracking Enabled设为NO即可。最后手动拖入你的项目,如果你仍然想pod管理,则再打包为私有库。如何签名和转framework,随便去git的开源库下,作者基本都有说明。如SVProgress等
参考资料:
https://cloud.tencent.com/developer/article/2397182
https://cloud.tencent.com/document/product/269/104138
https://blog.csdn.net/ZuoYueLiang/article/details/137009615
最后烦请点赞,评论~ 晚8点请打开《和平精英》我在S城第二个房间等你喔!!!!