从 Acknowledgements.plist 中排除私人 Pods

Exclude Private Pods from Acknowledgements.plist

我的 iOS 应用程序的 CocoaPods Podfile 使用 post_install 挂钩将生成的 Acknowledgements.plist 文件复制到我的应用程序的设置包中。但是,该文件包含我想排除的(专有)私有 pods。

问题

我知道我可以手动修改复制的 Acknowledgements.plist 文件中的项目。我如何以编程方式从文件中排除特定的私有 pods?

代码

这是将 Acknowledgements.plist 复制到设置包的 post_install 挂钩。

post_install do |installer|
  raw_acknowledgements = File.read('Pods/Target Support Files/Pods-MyApp/Pods-MyApp-Acknowledgements.plist')
  formatted_acknowledgements = raw_acknowledgements.gsub(/(?<!>)(?<!\n)\n( *)(?![ \*])(?![ -])(?!\n)(?!<)/, ' ')
  # How do I exclude specific pods before the file is copied?
  File.open('MyApp/Supporting Files/Settings.bundle/Acknowledgements.plist', "w") { |file| file.puts formatted_acknowledgements }
end

更新

我在下面添加了一个目前有效的答案。但是,我愿意接受不涉及修改许可证或使用插件的另一个答案。

选项 1

通过从 Podspec 中删除 LICENSE 文件和 license 对象,可以从生成的 Acknowledgements.plist 中排除私有 pods。在私有 podspec.json 文件中,license 对象看起来类似于:

"license": { "type": "Proprietary", "file": "LICENSE" }

如果不同时删除 LICENSE 文件,此解决方案将无法工作。

选项 2

不需要修改私有 pod 许可证的替代解决方案是使用 CocoaPods Acknowledgements 插件。安装 cocoapods-acknowledgements gem 后,将类似这样的内容添加到您的 Podfile:

plugin 'cocoapods-acknowledgements',
  :settings_bundle => true,
  :targets => ['MyApp'],
  :exclude => ['PrivatePodA', 'PrivatePodB']

请注意,此解决方案不需要问题中的 post_install 钩子。