2014-03-05 35 views
1

我有一個單個項目(MyProject)和三個目標(MyProject,MyProjectTests和MyProjectPlugin)的工作區。我有一個Podfile爲它設置了三個依賴關係。前兩個應該與所有三個目標相關聯,但第三個(OCMock)只應與我的測試目標相關聯。這是我的Podfile:CocoaPods添加重複的框架來測試項目

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目錄),這將是一個主要問題。

回答

0

我仍然在尋找正確的答案(無論我做錯了什麼,或者CocoaPods中存在錯誤),但我想出了這個解決方法。我裹着pod install與使用Xcodeproj從我的測試項目中刪除多餘庫的Ruby腳本:

#!/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 

我不會接受這個答案,因爲必須有一個更好的辦法。

相關問題