【问题标题】:CocoaPods adding duplicate frameworks to Tests projectCocoaPods 向 Tests 项目添加重复的框架
【发布时间】:2014-03-05 19:46:11
【问题描述】:

我有一个工作区,其中包含一个项目 (MyProject) 和三个目标(MyProject、MyProjectTests 和 MyProjectPlugin)。我为它设置了一个包含三个依赖项的 Podfile。前两个应该链接到所有三个目标,但第三个(OCMock)应该只链接到我的测试目标。这是我的 Podfile:

platform :osx, '10.8'

pod 'objective-zip', :podspec => 'Podspecs/objective-zip.podspec'
link_with 'MyProject', 'MyProjectPlugin', 'MyProjectTests'

pod 'Unrar4iOS', :path => '../Unrar4iOS'
link_with 'MyProject', 'MyProjectPlugin', 'MyProjectTests'

target : MyProjectTests do
    pod 'OCMock', '~> 2.2.3'
end

我希望libPods.a 只包含objective-zipUnrar4iOS,而libPods-MyProjectTests.a 是一个超集,包含这两个和OCMock。事实上,情况就是这样,我通过查看 Pods.xcodeproj 中设置的目标来验证这一点。因此,将这些框架链接到我的项目的正确方法是主要插件项目使用libPods.a,测试项目使用libPods-MyProjectTests.a。当我以这种方式配置项目时,一切都编译并运行良好。

这就是问题所在。每当我 pod update 使用新的依赖项时,libPods.a 就会链接到 libPods-MyProjectTests.a 之上的 MyProjectTests,这会导致编译器错误(ld 报告重复符号,正如预期的那样)。

这是 CocoaPods 的错误,还是我需要更新我的 Podfile。这在本地开发时很麻烦,但是当我配置一个每次都会pod install 的自动构建时,这将是一个主要问题(因为我不打算也不打算提交 Pods 目录)。

【问题讨论】:

    标签: objective-c xcode shared-libraries cocoapods


    【解决方案1】:

    我仍在寻找正确的答案(或者我做错了什么,或者 CocoaPods 中存在错误),但我想出了这个解决方法。我用一个 Ruby 脚本包装了pod install,该脚本使用 Xcodeproj 从我的测试项目中删除冗余库:

    #!/usr/bin/env ruby
    
    require 'rubygems'
    
    gem 'xcodeproj'
    require 'xcodeproj'
    
    puts `pod install`
    
    puts 'Removing extra linked library'
    main_project = Xcodeproj::Project.open('Comickaze.xcodeproj')
    tests_target = main_project.targets.find{|target| target.name == 'ComickazeTests'}
    
    framework_to_remove = tests_target.frameworks_build_phase.files.find{|file| file.display_name == 'libPods.a'}
    tests_target.frameworks_build_phase.remove_file_reference(framework_to_remove.file_ref)
    
    main_project.save
    

    我不会接受这个答案,因为必须有更好的方法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-04-07
      • 2015-01-10
      • 2012-05-19
      • 2015-01-19
      • 2015-12-22
      • 2016-06-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多