如何在CocoaPods的post_install中排除Acknowledgements.plist的私有Pod
解决方案
核心逻辑是直接解析CocoaPods自动生成的Acknowledgements.plist结构,定向删除指定私有Pod的条目后再写入Settings bundle,不需要修改Pod许可证、不需要引入第三方插件,完全依赖CocoaPods内置能力实现。
你可以直接替换原来的post_install代码为如下内容:
post_install do |installer| # 按需修改为你要排除的私有Pod名称,需和Acknowledgements里对应条目的Title完全一致 EXCLUDED_PRIVATE_PODS = ["YourPrivatePod1", "YourPrivatePod2"] # 读取原始自动生成的Acknowledgements文件 raw_acknowledgements = File.read('Pods/Target Support Files/Pods-MyApp/Pods-MyApp-Acknowledgements.plist') # 将plist文本解析为可操作的Ruby哈希结构 plist_data = Plist.parse_xml(raw_acknowledgements) # 过滤排除指定私有Pod的条目 plist_data["PreferenceSpecifiers"] = plist_data["PreferenceSpecifiers"].reject do |item| # 跳过致谢页的头部标题项,只处理Pod条目 next false if item["Title"] == "Acknowledgements" EXCLUDED_PRIVATE_PODS.include?(item["Title"]) end # 将处理后的哈希转回标准plist格式字符串 processed_plist = plist_data.to_plist # 保留你原有格式化换行的逻辑 formatted_acknowledgements = processed_plist.gsub(/(?<!>)(?<!\n)\n( *)(?![ \*])(?![ -])(?!\n)(?!<)/, ' ') # 写入到Settings bundle目标路径 File.open('MyApp/Supporting Files/Settings.bundle/Acknowledgements.plist', "w") do |file| file.puts formatted_acknowledgements end end
注意事项
- 排除列表中的Pod名称需要和Acknowledgements.plist中对应条目的
Title字段完全匹配,大小写敏感 - 如果你的项目存在多target,需要对应修改原始Acknowledgements.plist的读取路径
- 执行pod install后可以直接打开生成的Settings.bundle下的Acknowledgements.plist,校验目标私有Pod是否已经被成功移除
内容的提问来源于stack exchange,提问作者JWK
相关产品推荐
相关产品推荐

