Loading...
Loading...
Compare original and translation side by side
node -e "const fs=require('fs');if(!fs.existsSync('package.json'))process.exit(0);const pkg=JSON.parse(fs.readFileSync('package.json','utf8'));const sections=['dependencies','devDependencies'];const out=[];for(const section of sections){for(const [name,version] of Object.entries(pkg[section]||{})){if(name.startsWith('@capacitor/')||name.startsWith('@capgo/')||name.includes('firebase')||name.includes('sentry')||name.includes('revenuecat')||name.includes('purchase')||name.includes('subscription')||name.includes('auth')||name.includes('analytics')||name.includes('segment')||name.includes('amplitude')||name.includes('mixpanel'))out.push(section+'.'+name+'='+version)}}console.log(out.sort().join('\n'))"find . -maxdepth 6 \( -name 'package.json' -o -name 'capacitor.config.json' -o -name 'capacitor.config.ts' -o -name 'capacitor.config.js' -o -name 'Info.plist' -o -name '*.entitlements' -o -name 'PrivacyInfo.xcprivacy' -o -name 'project.pbxproj' -o -path './ios' -o -path './fastlane/metadata' -o -path './metadata' \)node -e "const fs=require('fs');if(!fs.existsSync('package.json'))process.exit(0);const pkg=JSON.parse(fs.readFileSync('package.json','utf8'));const sections=['dependencies','devDependencies'];const out=[];for(const section of sections){for(const [name,version] of Object.entries(pkg[section]||{})){if(name.startsWith('@capacitor/')||name.startsWith('@capgo/')||name.includes('firebase')||name.includes('sentry')||name.includes('revenuecat')||name.includes('purchase')||name.includes('subscription')||name.includes('auth')||name.includes('analytics')||name.includes('segment')||name.includes('amplitude')||name.includes('mixpanel'))out.push(section+'.'+name+'='+version)}}console.log(out.sort().join('\n'))"find . -maxdepth 6 \( -name 'package.json' -o -name 'capacitor.config.json' -o -name 'capacitor.config.ts' -o -name 'capacitor.config.js' -o -name 'Info.plist' -o -name '*.entitlements' -o -name 'PrivacyInfo.xcprivacy' -o -name 'project.pbxproj' -o -path './ios' -o -path './fastlane/metadata' -o -path './metadata' \)capacitor-app-storecapacitor-app-storereferences/guidelines/by-app-type/all_apps.mdsubscription_iap.mdsocial_ugc.mdkids.mdhealth_fitness.mdgames.mdai_apps.mdcrypto_finance.mdvpn.mdmacos.mdreferences/guidelines/README.mdreferences/guidelines/by-app-type/all_apps.mdsubscription_iap.mdsocial_ugc.mdkids.mdhealth_fitness.mdgames.mdai_apps.mdcrypto_finance.mdvpn.mdmacos.mdreferences/guidelines/README.mdpackage.jsoncapacitor.config.*ios/App/App/Info.plistInfo.plist*.entitlementsPrivacyInfo.xcprivacyfastlane/metadatapackage.jsoncapacitor.config.*ios/App/App/Info.plistInfo.plist*.entitlementsPrivacyInfo.xcprivacyfastlane/metadatareferences/rules/metadata/*.mdreferences/rules/subscription/*.mdreferences/rules/privacy/*.mdreferences/rules/design/*.mdreferences/rules/entitlements/*.mdInfo.plistascasc metadata pull --output-dir ./metadatareferences/rules/metadata/*.mdreferences/rules/subscription/*.mdreferences/rules/privacy/*.mdreferences/rules/design/*.mdreferences/rules/entitlements/*.mdInfo.plistascasc metadata pull --output-dir ./metadataundefinedundefined
Order findings by severity and make each fix concrete.
按严重程度排序发现的问题,每个修复方案都要具体可执行。ascPrivacyInfo.xcprivacyascPrivacyInfo.xcprivacy