Pod install時にAdSupportなどの不要なframeworkを入れない方法

最近はCocoa開発時に外部ライブラリを利用するために、CocoaPodsを利用することが多い。CocoaPodsはpodspecに従い自動的に依存関係などを解決してインストールしてくれるが、そのために不要なframeworkなどのリンクが行われてしまうことがある。

自分が経験した一番の問題は、Google Analyticsなどのアクセス解析系のSDKの多くにはAdSupport Frameworkと連携し、広告のコンバージョン追跡機能などが付いている場合。 AdSupportは広告を利用していないのに、バイナリに含めるとAppleにリジェクトされてしまう。しかしCocoaPodsは自動的にAdSupportも入れてしまうのである。

その解決するためにPodfileにhook機能を利用してpod install時に自動的にAdSupportを取り除くようにした。 そのコードは以下のとおり。

Podfile
1
2
3
4
5
6
7
8
9
10
11
12
13
pre_install do |installer_representation|
  installer_representation.pods.each do |pod|
    pod.specs.each do |spec|
      case spec.attributes_hash['weak_frameworks']
      when Array
        spec.attributes_hash['weak_frameworks'] -= ['AdSupport']
      when String
        frameworks = spec.attributes_hash['weak_frameworks'].gsub(/AdSupport/, '')
        spec.attributes_hash['weak_frameworks'] = frameworks.empty? ? nil : frameworks
      end
    end
  end
end
このエントリーをはてなブックマークに追加

Comments