Commit 0feb5f1d authored by Joshua Kalpin's avatar Joshua Kalpin

Merge branch 'master'

Conflicts:
	CHANGELOG.md
parents cd6354a5 f09bb136
...@@ -6,6 +6,12 @@ To install or update CocoaPods see this [guide](http://docs.cocoapods.org/guides ...@@ -6,6 +6,12 @@ To install or update CocoaPods see this [guide](http://docs.cocoapods.org/guides
###### Bug Fixes ###### Bug Fixes
* Fixed the developer frameworks search paths so that
`$(SDKROOT)/Developer/Library/Frameworks` is used for iOS and
`$(DEVELOPER_LIBRARY_DIR)/Frameworks` is used for OS X
[Kevin Wales](https://github.com/kwales)
[#1562](https://github.com/CocoaPods/pull/1562)
* When updating the pod repos, repositories with unreachable remotes * When updating the pod repos, repositories with unreachable remotes
are now ignored. This fixes an issue with certain private repositories. are now ignored. This fixes an issue with certain private repositories.
[Joshua Kalpin](https://github.com/Kapin) [Joshua Kalpin](https://github.com/Kapin)
......
...@@ -103,9 +103,10 @@ module Pod ...@@ -103,9 +103,10 @@ module Pod
search_paths = xcconfig.attributes['FRAMEWORK_SEARCH_PATHS'] ||= '' search_paths = xcconfig.attributes['FRAMEWORK_SEARCH_PATHS'] ||= ''
search_paths_to_add = [] search_paths_to_add = []
search_paths_to_add << '$(inherited)' search_paths_to_add << '$(inherited)'
search_paths_to_add << '"$(DEVELOPER_LIBRARY_DIR)/Frameworks"'
if platform == :ios if platform == :ios
search_paths_to_add << '"$(SDKROOT)/Developer/Library/Frameworks"' search_paths_to_add << '"$(SDKROOT)/Developer/Library/Frameworks"'
else
search_paths_to_add << '"$(DEVELOPER_LIBRARY_DIR)/Frameworks"'
end end
search_paths_to_add.each do |search_path| search_paths_to_add.each do |search_path|
unless search_paths.include?(search_path) unless search_paths.include?(search_path)
......
...@@ -15,6 +15,7 @@ module Pod ...@@ -15,6 +15,7 @@ module Pod
lambda { run_command('spec', 'which') }.should.raise CLAide::Help lambda { run_command('spec', 'which') }.should.raise CLAide::Help
lambda { run_command('spec', 'cat') }.should.raise CLAide::Help lambda { run_command('spec', 'cat') }.should.raise CLAide::Help
lambda { run_command('spec', 'edit') }.should.raise CLAide::Help lambda { run_command('spec', 'edit') }.should.raise CLAide::Help
lambda { run_command('spec', 'browse') }.should.raise CLAide::Help
end end
end end
...@@ -174,32 +175,43 @@ module Pod ...@@ -174,32 +175,43 @@ module Pod
#-------------------------------------------------------------------------# #-------------------------------------------------------------------------#
describe Command::Spec::Which do def it_should_check_for_existence(command)
it "errors if a given podspec doesn't exist" do it "errors if a given podspec doesn't exist" do
e = lambda { command('spec', 'which', 'some_pod_that_doesnt_exist').run }.should.raise Informative e = lambda { command('spec', command, 'some_pod_that_doesnt_exist').run }.should.raise Informative
e.message.should.match /Unable to find a pod with/ e.message.should.match /Unable to find a pod with/
end end
end
def it_should_check_for_ambiguity(command)
it "complains provided spec name is ambigious" do
e = lambda { command('spec', command, 'AF').run }.should.raise Informative
e.message.should.match /More than one/
end
end
describe Command::Spec::Which do
it_should_check_for_existence("which")
it_should_check_for_ambiguity("which")
it "prints the path of a given podspec" do it "prints the path of a given podspec" do
lambda { command('spec', 'which', 'AFNetworking').run }.should.not.raise lambda { command('spec', 'which', 'AFNetworking').run }.should.not.raise
text = "AFNetworking.podspec" text = "AFNetworking.podspec"
UI.output.should.include text.gsub(/\n/, '') UI.output.should.include text.gsub(/\n/, '')
end end
it "complains provided spec name is ambigious" do
e = lambda { command('spec', 'cat', 'AF').run }.should.raise Informative
e.message.should.match /More than one/
end
end end
#-------------------------------------------------------------------------# #-------------------------------------------------------------------------#
describe Command::Spec::Cat do describe Command::Spec::Cat do
it_should_check_for_existence("cat")
it_should_check_for_ambiguity("cat")
end end
#-------------------------------------------------------------------------# #-------------------------------------------------------------------------#
describe Command::Spec::Edit do describe Command::Spec::Edit do
it_should_check_for_existence("edit")
it_should_check_for_ambiguity("edit")
end end
#-------------------------------------------------------------------------# #-------------------------------------------------------------------------#
......
...@@ -94,7 +94,7 @@ module Pod ...@@ -94,7 +94,7 @@ module Pod
xcconfig.to_hash['OTHER_LDFLAGS'].should == '-weak_framework iAd' xcconfig.to_hash['OTHER_LDFLAGS'].should == '-weak_framework iAd'
end end
it "adds the developer frameworks search paths if needed" do it "adds the ios developer frameworks search paths if needed" do
xcconfig = Xcodeproj::Config.new xcconfig = Xcodeproj::Config.new
consumer = stub({ consumer = stub({
:xcconfig => {}, :xcconfig => {},
...@@ -104,7 +104,22 @@ module Pod ...@@ -104,7 +104,22 @@ module Pod
:platform_name => :ios :platform_name => :ios
}) })
@sut.add_spec_build_settings_to_xcconfig(consumer, xcconfig) @sut.add_spec_build_settings_to_xcconfig(consumer, xcconfig)
xcconfig.to_hash['FRAMEWORK_SEARCH_PATHS'].should.include('SDKROOT')
xcconfig.to_hash['FRAMEWORK_SEARCH_PATHS'].should.not.include('DEVELOPER_LIBRARY_DIR')
end
it "adds the osx developer frameworks search paths if needed" do
xcconfig = Xcodeproj::Config.new
consumer = stub({
:xcconfig => {},
:libraries => [],
:frameworks => ['SenTestingKit'],
:weak_frameworks => [],
:platform_name => :osx
})
@sut.add_spec_build_settings_to_xcconfig(consumer, xcconfig)
xcconfig.to_hash['FRAMEWORK_SEARCH_PATHS'].should.include('DEVELOPER_LIBRARY_DIR') xcconfig.to_hash['FRAMEWORK_SEARCH_PATHS'].should.include('DEVELOPER_LIBRARY_DIR')
xcconfig.to_hash['FRAMEWORK_SEARCH_PATHS'].should.not.include('SDKROOT')
end end
end end
...@@ -159,7 +174,7 @@ module Pod ...@@ -159,7 +174,7 @@ module Pod
frameworks_search_paths = xcconfig.to_hash['FRAMEWORK_SEARCH_PATHS'] frameworks_search_paths = xcconfig.to_hash['FRAMEWORK_SEARCH_PATHS']
frameworks_search_paths.should.include?('$(inherited)') frameworks_search_paths.should.include?('$(inherited)')
frameworks_search_paths.should.include?('"$(SDKROOT)/Developer/Library/Frameworks"') frameworks_search_paths.should.include?('"$(SDKROOT)/Developer/Library/Frameworks"')
frameworks_search_paths.should.include?('"$(DEVELOPER_LIBRARY_DIR)/Frameworks"') frameworks_search_paths.should.not.include?('"$(DEVELOPER_LIBRARY_DIR)/Frameworks"')
end end
it "adds the developer frameworks search paths to the xcconfig if XCTest has been detected" do it "adds the developer frameworks search paths to the xcconfig if XCTest has been detected" do
...@@ -168,7 +183,7 @@ module Pod ...@@ -168,7 +183,7 @@ module Pod
frameworks_search_paths = xcconfig.to_hash['FRAMEWORK_SEARCH_PATHS'] frameworks_search_paths = xcconfig.to_hash['FRAMEWORK_SEARCH_PATHS']
frameworks_search_paths.should.include?('$(inherited)') frameworks_search_paths.should.include?('$(inherited)')
frameworks_search_paths.should.include?('"$(SDKROOT)/Developer/Library/Frameworks"') frameworks_search_paths.should.include?('"$(SDKROOT)/Developer/Library/Frameworks"')
frameworks_search_paths.should.include?('"$(DEVELOPER_LIBRARY_DIR)/Frameworks"') frameworks_search_paths.should.not.include?('"$(DEVELOPER_LIBRARY_DIR)/Frameworks"')
end end
it "doesn't adds the developer frameworks relative to the SDK for OS X" do it "doesn't adds the developer frameworks relative to the SDK for OS X" do
......
...@@ -32,96 +32,112 @@ module Pod ...@@ -32,96 +32,112 @@ module Pod
#-------------------------------------------------------------------------# #-------------------------------------------------------------------------#
describe "Quick mode" do
it "validates a correct podspec" do it "validates a correct podspec" do
validator = Validator.new(podspec_path) sut = Validator.new(podspec_path)
validator.quick = true sut.quick = true
validator.validate sut.validate
validator.results.should == [] sut.results.should == []
validator.validated?.should.be.true sut.validated?.should.be.true
end end
it "lints the podspec during validation" do it "lints the podspec during validation" do
podspec = stub_podspec(/s.name.*$/, 's.name = "TEST"') podspec = stub_podspec(/s.name.*$/, 's.name = "TEST"')
file = write_podspec(podspec) file = write_podspec(podspec)
validator = Validator.new(file) sut = Validator.new(file)
validator.quick = true sut.quick = true
validator.validate sut.validate
validator.results.map(&:to_s).first.should.match /should match the name/ sut.results.map(&:to_s).first.should.match /should match the name/
validator.validated?.should.be.false sut.validated?.should.be.false
end end
it "uses xcodebuild to generate notes and warnings" do it "respects quick mode" do
validator = Validator.new(podspec_path) file = write_podspec(stub_podspec)
validator.stubs(:check_file_patterns) sut = Validator.new(file)
validator.stubs(:xcodebuild).returns("file.m:1:1: warning: direct access to objective-c's isa is deprecated") sut.quick = true
validator.validate sut.expects(:perform_extensive_analysis).never
first = validator.results.map(&:to_s).first sut.validate
first.should.include "[xcodebuild]"
validator.result_type.should == :note
end end
it "checks for file patterns" do it "respects the only errors option" do
file = write_podspec(stub_podspec(/s\.source_files = 'JSONKit\.\*'/, "s.source_files = 'wrong_paht.*'")) podspec = stub_podspec(/s.summary.*/, "s.summary = 'A short description of'")
validator = Validator.new(file) file = write_podspec(podspec)
validator.stubs(:build_pod) sut = Validator.new(file)
validator.validate sut.quick = true
validator.results.map(&:to_s).first.should.match /source_files.*did not match/ sut.only_errors = true
validator.result_type.should == :error sut.validate
sut.results.map(&:to_s).first.should.match /summary.*meaningful/
sut.validated?.should.be.true
end end
it "validates a podspec with dependencies" do
podspec = stub_podspec(/s.name.*$/, 's.name = "ZKit"')
podspec.gsub!(/s.requires_arc/, "s.dependency 'SBJson', '~> 3.2'\n s.requires_arc")
podspec.gsub!(/s.license.*$/, 's.license = "Public Domain"')
file = write_podspec(podspec, "ZKit.podspec")
spec = Specification.from_file(file)
validator = Validator.new(spec)
validator.validate
validator.validated?.should.be.true
end end
#--------------------------------------# #-------------------------------------------------------------------------#
it "respects quick mode" do describe "Extensive analysis" do
it "respects the no clean option" do
file = write_podspec(stub_podspec) file = write_podspec(stub_podspec)
validator = Validator.new(file) sut = Validator.new(file)
validator.quick = true sut.no_clean = true
validator.expects(:perform_extensive_analysis).never sut.validate
validator.validate sut.validation_dir.should.exist
end end
it "respects the no clean option" do it "builds the pod per platform" do
file = write_podspec(stub_podspec) file = write_podspec(stub_podspec)
validator = Validator.new(file) sut = Validator.new(file)
validator.no_clean = true sut.expects(:install_pod).twice
validator.validate sut.expects(:build_pod).twice
validator.validation_dir.should.exist sut.expects(:check_file_patterns).twice
sut.validate
end
it "uses the deployment target of the specification" do
sut = Validator.new(podspec_path)
podfile = sut.send(:podfile_from_spec, :ios, '5.0')
dependency = podfile.target_definitions['Pods'].dependencies.first
dependency.external_source.has_key?(:podspec).should.be.true
end end
it "respects the local option" do it "respects the local option" do
validator = Validator.new(podspec_path) sut = Validator.new(podspec_path)
podfile = validator.send(:podfile_from_spec, :ios, '5.0') podfile = sut.send(:podfile_from_spec, :ios, '5.0')
deployment_target = podfile.target_definitions['Pods'].platform.deployment_target deployment_target = podfile.target_definitions['Pods'].platform.deployment_target
deployment_target.to_s.should == "5.0" deployment_target.to_s.should == "5.0"
end end
it "respects the only errors option" do it "uses xcodebuild to generate notes and warnings" do
podspec = stub_podspec(/s.summary.*/, "s.summary = 'A short description of'") sut = Validator.new(podspec_path)
file = write_podspec(podspec) sut.stubs(:check_file_patterns)
validator = Validator.new(file) sut.stubs(:xcodebuild).returns("file.m:1:1: warning: direct access to objective-c's isa is deprecated")
validator.quick = true sut.validate
validator.only_errors = true first = sut.results.map(&:to_s).first
validator.validate first.should.include "[xcodebuild]"
validator.results.map(&:to_s).first.should.match /summary.*meaningful/ sut.result_type.should == :note
validator.validated?.should.be.true
end end
it "uses the deployment target of the specification" do it "checks for file patterns" do
validator = Validator.new(podspec_path) file = write_podspec(stub_podspec(/s\.source_files = 'JSONKit\.\*'/, "s.source_files = 'wrong_paht.*'"))
podfile = validator.send(:podfile_from_spec, :ios, '5.0') sut = Validator.new(file)
dependency = podfile.target_definitions['Pods'].dependencies.first sut.stubs(:build_pod)
dependency.external_source.has_key?(:podspec).should.be.true sut.validate
sut.results.map(&:to_s).first.should.match /source_files.*did not match/
sut.result_type.should == :error
end
it "validates a podspec with dependencies" do
podspec = stub_podspec(/s.name.*$/, 's.name = "ZKit"')
podspec.gsub!(/s.requires_arc/, "s.dependency 'SBJson', '~> 3.2'\n s.requires_arc")
podspec.gsub!(/s.license.*$/, 's.license = "Public Domain"')
file = write_podspec(podspec, "ZKit.podspec")
spec = Specification.from_file(file)
sut = Validator.new(spec)
sut.validate
sut.validated?.should.be.true
end
end end
#-------------------------------------------------------------------------#
end end
end end
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment