在构建之前自动删除静态lib以防止Cocoapods重复符号错误

时间:2013-10-25 14:48:26

标签: ios ruby xcode cocoapods

我正在使用Cocoapods以及包含我自己的静态库的工作区,以及使用静态库的主项目。

静态lib和主应用程序共享相同的pod。

问题是“pod install”之后创建的链接会在构建主应用程序时导致重复的符号错误。

我已经考虑通过脚本构建阶段从我的静态lib目标中删除libPods.a静态lib,以及方案构建预执行。似乎都没有预期的效果。

这是我的Podfile:


workspace 'MyWorkspace.xcworkspace'
platform :ios, '6.0'
inhibit_all_warnings!

# POD ACTIONS ----------------------------------------

def import_pods
  pod 'AFNetworking', '1.3.2'
  pod 'AFHTTPRequestOperationLogger', '0.10.0'
  pod 'CorePlot', '1.3'
end

# POD LINKAGE -----------------------------------------

target :'MyStaticLib' do
  xcodeproj 'StaticLib/StaticLib.xcodeproj'
  import_pods

  target :'MyApp' do
    xcodeproj 'MyApp.xcodeproj'
  end  
end

用于从我的静态库中删除libPods.a的Ruby脚本:


require 'xcodeproj'

project = Xcodeproj::Project.open("StaticLib/StaticLib.xcodeproj")
project.targets.each do |target|
  if target.display_name == 'MyStaticLib'
    target.frameworks_build_phase.files_references.each do |file|
      if file.path == "libPods.a"
        file.build_files.each do |build_file|
          build_file.remove_from_project
          puts "Removed build file from project: #{build_file.display_name}"
        end
        file.remove_from_project
      end
    end
  end
end

1 个答案:

答案 0 :(得分:0)

威尔玛的剧本就是我用过的;除了它有两个问题:

  1. 没有调用project.save来保存文件删除 - 我只是将其添加为上述代码的最后一行

  2. 我需要将此作为TeamCity CI构建的一部分;所以我只是将这个脚本添加为"自定义脚本"构建步骤,甚至在调用xcodebuild之前运行,并且工作正常。

  3. 谢谢