iOS App因使用prefs:root非公开URL scheme被拒,排查第三方库方法
排查CocoaPods第三方库中隐藏的
prefs:root URL Scheme 我之前也碰到过一模一样的拒审情况!自己代码里明明没加,结果被苹果揪出来用了非公开的URL Scheme,十有八九是某个依赖库偷偷加了。给你几个实用的排查方法,按顺序试就行:
直接搜索Pods源码目录
既然你已经排查过自己的项目代码,那重点就放在Pods文件夹里。用这个终端命令可以精准搜索所有相关变体,还只扫代码文件:grep -r "prefs:root\|App-Prefs" --include="*.h" --include="*.m" --include="*.swift" Pods/要是担心还有其他大小写变体,加上
-i参数忽略大小写就行:grep -ri "prefs:root\|app-prefs" --include="*.h" --include="*.m" --include="*.swift" Pods/一旦搜到结果,就能直接定位到对应的库和文件。
检查编译后的二进制文件
有些第三方库是预编译的Framework,源码里搜不到,这时候得看编译后的二进制。可以这么做:- 在Xcode里编译项目后,右键项目 -> Show in Finder,找到编译后的App包
- 用
strings命令扫描主App二进制,看看有没有相关字符串:strings YourApp.app/YourApp | grep -i "prefs:root" - 如果找到,再逐个扫描Pods里的Framework,定位具体哪个库:
for framework in Pods/**/*.framework; do framework_binary="$framework/Versions/A/$(basename "$framework" .framework)" strings "$framework_binary" | grep -i "prefs:root" && echo "Found in: $framework" done
检查Info.plist中的查询权限
有时候库会把prefs:root加到LSApplicationQueriesSchemes里,CocoaPods会自动合并所有依赖的plist设置。可以用PlistBuddy查看你的App最终的Info.plist:/usr/libexec/PlistBuddy -c "Print LSApplicationQueriesSchemes" YourApp.app/Info.plist如果里面有相关条目,再搜索Pods里的所有plist文件找来源:
grep -r "prefs:root" Pods/**/*.plist终极手段:清理Pods重新安装
偶尔会因为Pods缓存导致旧的代码残留,先彻底清理再重新安装,然后再排查:pod deintegrate && pod install安装完成后再重复上面的搜索步骤,说不定就能找到漏网之鱼。
内容的提问来源于stack exchange,提问作者Noel Carcases
相关产品推荐
相关产品推荐

