ymoyao / cocoapods-privacy

a cocoapods plugin to auto manager Xcode PrivacyInfo.xcprivacy file(create && search)
MIT License
191 stars 20 forks source link

看不太懂,,能详细教教吗 #2

Open wonepeaya opened 7 months ago

yanashenyang commented 7 months ago

same same

wcsdn commented 7 months ago

是啊,看不懂啊,不能直接帮项目里的*.framework 和pod进来的flutter里的插件也映射生成吗?

ymoyao commented 7 months ago

这里统一回复一下,目前有两个策略

wcsdn commented 7 months ago

这里统一回复一下,目前有两个策略

  • 策略一:基于工程处理,通过 pod install --privacy 和 config.json 配置文件 可以直接查询所有指定的组件,在xcode/Resources 文件夹下自动生成隐私清单文件,并合并所有组件的查询结果,插入主工程的隐私清单文件中。这种策略是只有Xcode 主工程持有一份隐私清单文件,组件本身并不会生成隐私清单。目前而言,除了苹果肯定会审查的那些第三方清单组件需要等待其更新外,其他可能是够用了,苹果前期审查力度应该不会那么大,自己的私有组件,可以等后期再处理。
  • 策略二:基于组件处理,通过 pod privacy spec 'spec_path',以组件为颗粒来管理隐私清单文件,会自动修改podspec 文件和在对应位置创建隐私清单文件,有优点也有缺点,优点是肯定可以通过审核,且可以自定义那些还没支持的第三方组件,比如AFNetworking,使用该插件改造支持隐私清单,上传到自己的私有组件服务器; 缺点是如果组件数量大的话,那么需要每一个组件改过去!
  • 推荐策略:优先使用策略一 + 使用策略二兼容部分第三方SDK + 极个别使用了隐私数据的组件
  • 注意:这个插件仅支持自动管理 隐私API(NSPrivacyAccessedAPITypes),隐私数据(NSPrivacyCollectedDataTypes)相关涉及到相关功能,无法直接通过api确认,需要自行管理(不过目前好像苹果没怎么提到隐私数据这块,可以酌情处理)

”注意:这个插件仅支持自动管理 隐私API(NSPrivacyAccessedAPITypes)“我一堆sdk 使用你这个命令就生成了 PrivacyAccessedAPITypes 空数组?内容需要自行管理?啥意思,就创建了一个文件夹啊,是我肤浅了。 策略二不错。

ymoyao commented 7 months ago

”注意:这个插件仅支持自动管理 隐私API(NSPrivacyAccessedAPITypes)“我一堆sdk 使用你这个命令就生成了 PrivacyAccessedAPITypes 空数组?内容需要自行管理?啥意思,就创建了一个文件夹啊,是我肤浅了。 策略二不错。

你是指 pod install --privacy 之后是空的?默认config.json 是屏蔽所有 source包含 ‘github.com' 域名的组件【苹果文档中有提到,原则上第三方隐私要自己管理,这个命令主要意图是想要检测主工程和自己所有的私有组件代码,所以默认屏蔽了github的组件】,你如果想使用 pod install --privacy 也检测这些github组件,那么需要修改 config.json(参考ReadMe,有具体的例子),重新设置配置 pod privacy config '修改之后的配置文件', 然后再重新执行命令

wcsdn commented 7 months ago

”注意:这个插件仅支持自动管理 隐私API(NSPrivacyAccessedAPITypes)“我一堆sdk 使用你这个命令就生成了 PrivacyAccessedAPITypes 空数组?内容需要自行管理?啥意思,就创建了一个文件夹啊,是我肤浅了。 策略二不错。

你是指 pod install --privacy 之后是空的?默认config.json 是屏蔽所有 source包含 ‘github.com' 域名的组件【苹果文档中有提到,原则上第三方隐私要自己管理,这个命令主要意图是想要检测主工程和自己所有的私有组件代码,所以默认屏蔽了github的组件】,你如果想使用 pod install --privacy 也检测这些github组件,那么需要修改 config.json(参考ReadMe,有具体的例子),重新设置配置 pod privacy config '修改之后的配置文件', 然后再重新执行命令

OpenSSL::SSL::SSLError - SSL_connect returned=1 errno=0 state=error: certificate verify failed (unable to get local issuer certificate)

可以了,我升级了pod,rbenv,Ruby后正常了。nick

WsmGitHub commented 7 months ago

好像无法区分注释,被注释情况下依然可以生成

// NSUserDefaults *user = [NSUserDefaults standardUserDefaults]; // [user setObject:@"" forKey:@"test"];

ymoyao commented 7 months ago

好像无法区分注释,被注释情况下依然可以生成

// NSUserDefaults *user = [NSUserDefaults standardUserDefaults]; // [user setObject:@"" forKey:@"test"];

这个问题在 >= 0.5.1 版本修复了

WsmGitHub commented 7 months ago

作者能提供脚本源码吗

wcsdn commented 7 months ago

好像无法区分注释,被注释情况下依然可以生成 // NSUserDefaults *user = [NSUserDefaults standardUserDefaults]; // [user setObject:@"" forKey:@"test"];

这个问题在 >= 0.5.1 版本修复了

请问一下,你这个命令怎么给老版本的flutter 添加隐私文件。

WsmGitHub commented 7 months ago

好像无法区分注释,被注释情况下依然可以生成 // NSUserDefaults *user = [NSUserDefaults standardUserDefaults]; // [user setObject:@"" forKey:@"test"];

这个问题在 >= 0.5.1 版本修复了

请问一下,你这个命令怎么给老版本的flutter 添加隐私文件。

关于flutter 插件适配方案,我们将插件放到公司的git源,本地跑脚本生成清单文件,提交到公司的仓库

wcsdn commented 7 months ago

好像无法区分注释,被注释情况下依然可以生成 // NSUserDefaults *user = [NSUserDefaults standardUserDefaults]; // [user setObject:@"" forKey:@"test"];

这个问题在 >= 0.5.1 版本修复了

请问一下,你这个命令怎么给老版本的flutter 添加隐私文件。

关于flutter 插件适配方案,我们将插件放到公司的git源,本地跑脚本生成清单文件,提交到公司的仓库

!/bin/bash

保存开始执行时的目录

start_dir=$(pwd) count=0

检查是否已安装 cocoapods-privacy

if ! gem list -i cocoapods-privacy > /dev/null 2>&1; then echo "cocoapods-privacy 未安装,正在安装..." gem install cocoapods-privacy echo "首次运行,正在设置配置..." pod privacy config https://raw.githubusercontent.com/ymoyao/cocoapods-privacy/main/resources/config.json fi

定义目标文件夹路径 pub.flutter-io.cn

flutter_sdk_path=$(dirname $(dirname $(which flutter))) destination_folder="$flutter_sdk_path/.pub-cache/hosted/pub.flutter-io.cn/" echo $destination_folder

遍历目标文件夹下的子目录

for folder in "$destination_folder"/; do if [ -d "$folder" ]; then subdir="$folder/ios" if [ -d "$subdir" ]; then if [ ! -d "$subdir/pod" ]; then echo "执行 pod privacy spec 拼接 .podspec 文件..." cd "$subdir" || exit 1 for podspec_file in ./.podspec; do echo "" echo "======================> $podspec_file" echo "" pod privacy spec "$podspec_file" ((count++)) done cd "$start_dir" || exit 1 fi fi fi done echo "=========>处理了 $count 个文件" 我直接在pod前执行了上诉命令,就是不知道 楼主的 pod privacy spec 给不给力,能不能检测出来啊,不过目前来看,楼主的命令生成出来的都是 既有的4条空配置,也没扫出来不一样的,回头我在确认一下是真的没有还是扫不出来。。。。 image

wscqs commented 7 months ago

用 Swift Package Manager 管理的第三方库,能支持吗?

ymoyao commented 7 months ago

用 Swift Package Manager 管理的第三方库,能支持吗?

目前不支持SPM,这个是基于cocoapods的插件

ymoyao commented 7 months ago

作者能提供脚本源码吗

这个仓库本身就是源码

caihongyu2022 commented 7 months ago

@ymoyao
前提条件: 1.修改了本地 config.json 中的source.white.list 和 source.black.list 都设置为[] 2.pod privacy config 本地config.json 更新config 3.通过 pod privacy install 执行后,程序正常进行完毕。

主项目下确实生成了resource目录并包含了隐私文件,但是查看查看privacy.log,并没有看到对podfile中 pod的第三方库进行检测 (例如 AFNetWorking )框架的隐私检测

另外:针对afn这种不维护的库,都是通过pod 方式加入到项目的,苹果提供的第三方列表中的库(库本身要提供隐私文件),这种如何应对呢?仅仅在主框架里生成隐私文件是不行的吧?难道要放弃pod,下载afn源码,把afn源码加进入到项目里吗?

ymoyao commented 7 months ago

@ymoyao 前提条件: 1.修改了本地 config.json 中的source.white.list 和 source.black.list 都设置为[] 2.pod privacy config 本地config.json 更新config 3.通过 pod privacy install 执行后,程序正常进行完毕。

主项目下确实生成了resource目录并包含了隐私文件,但是查看查看privacy.log,并没有看到对podfile中 pod的第三方库进行检测 (例如 AFNetWorking )框架的隐私检测

另外:针对afn这种不维护的库,都是通过pod 方式加入到项目的,苹果提供的第三方列表中的库(库本身要提供隐私文件),这种如何应对呢?仅仅在主框架里生成隐私文件是不行的吧?难道要放弃pod,下载afn源码,把afn源码加进入到项目里吗?

问题1:只有有包含隐私api 的文件才会出现在log 中,af 目前发现有没有隐私api 问题2: af 这种不维护的库确实是只能clone 一份使用 pod privacy spec 添加隐私清单后,上传到你们自己的服务器上,可以参考 https://github.com/ymoyao/cocoapods-privacy/issues/2#issuecomment-2041293716 @wcsdn @WsmGitHub 他们上面的聊天记录

wcsdn commented 7 months ago

好像无法区分注释,被注释情况下依然可以生成 // NSUserDefaults *user = [NSUserDefaults standardUserDefaults]; // [user setObject:@"" forKey:@"test"];

这个问题在 >= 0.5.1 版本修复了

请问一下,你这个命令怎么给老版本的flutter 添加隐私文件。

关于flutter 插件适配方案,我们将插件放到公司的git源,本地跑脚本生成清单文件,提交到公司的仓库

!/bin/bash

保存开始执行时的目录

start_dir=$(pwd) count=0

检查是否已安装 cocoapods-privacy

if ! gem list -i cocoapods-privacy > /dev/null 2>&1; then echo "cocoapods-privacy 未安装,正在安装..." gem install cocoapods-privacy echo "首次运行,正在设置配置..." pod privacy config https://raw.githubusercontent.com/ymoyao/cocoapods-privacy/main/resources/config.json fi

定义目标文件夹路径 pub.flutter-io.cn

flutter_sdk_path=$(dirname (dirname(which flutter))) destination_folder="$flutter_sdk_path/.pub-cache/hosted/pub.flutter-io.cn/" echo $destination_folder

遍历目标文件夹下的子目录

for folder in "$destinationfolder"/; do if [ -d "$folder" ]; then subdir="$folder/ios" if [ -d "$subdir" ]; then if [ ! -d "$subdir/pod" ]; then echo "执行 pod privacy spec 拼接 .podspec 文件..." cd "$subdir" || exit 1 for podspecfile in ./.podspec; do echo "" echo "======================> $podspec_file" echo "" pod privacy spec "$podspec_file" ((count++)) done cd "$start_dir" || exit 1 fi fi fi done echo "=========>处理了 $count 个文件" 我直接在pod前执行了上诉命令,就是不知道 楼主的 pod privacy spec 给不给力,能不能检测出来啊,不过目前来看,楼主的命令生成出来的都是 既有的4条空配置,也没扫出来不一样的,回头我在确认一下是真的没有还是扫不出来。。。。 image

补充一下 : 1、m1 和 intel 处理器 读取的地址不一样,需要特殊处理 flutter_sdk_path=$(dirname $(dirname $(which flutter))) destination_folder1="$flutter_sdk_path/.pub-cache/hosted/pub.flutter-io.cn/" destination_folder2="$flutter_sdk_path/.pub-cache/hosted/pub.dartlang.org/" for destination_folder in "$destination_folder1" "$destination_folder2"; do 2、fastlane(如果用了) 和 pod 冲突比较难缠。gem环境配置很重要。

caihongyu2022 commented 7 months ago

@ymoyao 前提条件: 1.修改了本地 config.json 中的source.white.list 和 source.black.list 都设置为[] 2.pod privacy config 本地config.json 更新config 3.通过 pod privacy install 执行后,程序正常进行完毕。 主项目下确实生成了resource目录并包含了隐私文件,但是查看查看privacy.log,并没有看到对podfile中 pod的第三方库进行检测 (例如 AFNetWorking )框架的隐私检测 另外:针对afn这种不维护的库,都是通过pod 方式加入到项目的,苹果提供的第三方列表中的库(库本身要提供隐私文件),这种如何应对呢?仅仅在主框架里生成隐私文件是不行的吧?难道要放弃pod,下载afn源码,把afn源码加进入到项目里吗?

问题1:只有有包含隐私api 的文件才会出现在log 中,af 目前发现有没有隐私api 问题2: af 这种不维护的库确实是只能clone 一份使用 pod privacy spec 添加隐私清单后,上传到你们自己的服务器上,可以参考 #2 (comment) @wcsdn @WsmGitHub 他们上面的聊天记录

通过在 post_install 写代码已经成功对afn的隐私文件添加

iliYF commented 3 months ago

@ymoyao 前提条件: 1.修改了本地 config.json 中的source.white.list 和 source.black.list 都设置为[] 2.pod privacy config 本地config.json 更新config 3.通过 pod privacy install 执行后,程序正常进行完毕。 主项目下确实生成了resource目录并包含了隐私文件,但是查看查看privacy.log,并没有看到对podfile中 pod的第三方库进行检测 (例如 AFNetWorking )框架的隐私检测 另外:针对afn这种不维护的库,都是通过pod 方式加入到项目的,苹果提供的第三方列表中的库(库本身要提供隐私文件),这种如何应对呢?仅仅在主框架里生成隐私文件是不行的吧?难道要放弃pod,下载afn源码,把afn源码加进入到项目里吗?

问题1:只有有包含隐私api 的文件才会出现在log 中,af 目前发现有没有隐私api 问题2: af 这种不维护的库确实是只能clone 一份使用 pod privacy spec 添加隐私清单后,上传到你们自己的服务器上,可以参考 #2 (comment) @wcsdn @WsmGitHub 他们上面的聊天记录

通过在 post_install 写代码已经成功对afn的隐私文件添加

求分享下解决方法?

wscqs commented 3 months ago

来信已经收到。