8000 Update call to generate deterministic UUIDs. by sebastianv1 · Pull Request #8320 · CocoaPods/CocoaPods · GitHub
[go: up one dir, main page]
More Web Proxy on the site http://driver.im/
Skip to content

Update call to generate deterministic UUIDs. #8320

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Dec 4, 2018
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion Gemfile.lock
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ GIT

GIT
remote: https://github.com/CocoaPods/Xcodeproj.git
revision: e0287156d426ba588c9234bb2a4c824149889860
revision: ac6493bb51448059a2f13fcf7c0fa8708420c7a3
branch: master
specs:
xcodeproj (1.7.0)
Expand Down
23 changes: 9 additions & 14 deletions lib/cocoapods/installer.rb
Original file line number Diff line number Diff line change
Expand Up @@ -216,23 +216,18 @@ def generate_pods_project(generator = create_generator(installation_options.gene
@pod_target_subprojects = pod_project_generation_result.projects_by_pod_targets.keys
projects_by_pod_targets = pod_project_generation_result.projects_by_pod_targets
run_podfile_post_install_hooks
pods_project_writer = Xcode::PodsProjectWriter.new(sandbox, pods_project,
target_installation_results.pod_target_installation_results,
installation_options)
pods_project_writer.write!
projects_by_pod_targets.each do |project, pod_targets|
pod_target_project_writer = Xcode::PodsProjectWriter.new(sandbox, project,
target_installation_results.pod_target_installation_results,
installation_options)
pod_target_project_writer.write!

generated_projects = [pods_project] + pod_target_subprojects
projects_writer = Xcode::PodsProjectWriter.new(sandbox, generated_projects,
target_installation_results.pod_target_installation_results, installation_options)
projects_writer.write!

pods_project_pod_targets = pod_targets - projects_by_pod_targets.values.flatten
all_projects_by_pod_targets = { pods_project => pods_project_pod_targets }.merge(projects_by_pod_targets)
all_projects_by_pod_targets.each do |project, pod_targets|
generator.share_development_pod_schemes(project, development_pod_targets(pod_targets))
end

# Share the remaining pod targets. Generally this will be none for when `generate_multiple_pod_projects` is set to true
# and all pod_targets when set to false.
remaining_development_pods = development_pod_targets(pod_targets - projects_by_pod_targets.values.flatten)
generator.share_development_pod_schemes(pods_project, remaining_development_pods)

write_lockfiles
end
end
Expand Down
8000
Original file line number Diff line number Diff line change
Expand Up @@ -9,10 +9,10 @@ class PodsProjectWriter
#
attr_reader :sandbox

# @return [Project] project
# The project to save.
# @return [Array<Project>] projects
# The list project to write.
#
attr_reader :project
attr_reader :projects

# @return [Hash<String, TargetInstallationResult>] pod_target_installation_results
# Hash of pod target name to installation results.
Expand All @@ -26,39 +26,53 @@ class PodsProjectWriter
# Initialize a new instance
#
# @param [Sandbox] sandbox @see #sandbox
# @param [Project] project @see #project
# @param [Project] projects @see #project
# @param [Hash<String, TargetInstallationResult>] pod_target_installation_results @see #pod_target_installation_results
# @param [InstallationOptions] installation_options @see #installation_options
#
def initialize(sandbox, project, pod_target_installation_results, installation_options)
def initialize(sandbox, projects, pod_target_installation_results, installation_options)
@sandbox = sandbox
@project = project
@projects = projects
@pod_target_installation_results = pod_target_installation_results
@installation_options = installation_options
end

def write!
UI.message "- Writing Xcode project file to #{UI.path project.path}" do
cleanup_projects(projects)

if installation_options.deterministic_uuids?
UI.message('- Generating deterministic UUIDs') { Xcodeproj::Project.predictabilize_uuids(projects) }
end

projects.each do |project|
UI.message "- Writing Xcode project file to #{UI.path project.path}" do
library_product_types = [:framework, :dynamic_library, :static_library]
results_by_native_target = Hash[pod_target_installation_results.map do |_, result|
[result.native_target, result]
end]
project.recreate_user_schemes(false) do |scheme, target|
next unless target.respond_to?(:symbol_type)
next unless library_product_types.include? target.symbol_type
installation_result = results_by_native_target[target]
next unless installation_result
installation_result.test_native_targets.each do |test_native_target|
scheme.add_test_target(test_native_target)
end
end
project.save
end
end
end

private

# Cleans up projects before writing.
#
def cleanup_projects(projects)
projects.each do |project|
[project.pods, project.support_files_group,
project.development_pods, project.dependencies_group].each { |group| group.remove_from_project if group.empty? }
project.sort(:groups_position => :below)
if installation_options.deterministic_uuids?
UI.message('- Generating deterministic UUIDs') { project.predictabilize_uuids }
end
library_product_types = [:framework, :dynamic_library, :static_library]
results_by_native_target = Hash[pod_target_installation_results.map do |_, result|
[result.native_target, result]
end]
project.recreate_user_schemes(false) do |scheme, target|
next unless target.respond_to?(:symbol_type)
next unless library_product_types.include? target.symbol_type
installation_result = results_by_native_target[target]
next unless installation_result
installation_result.test_native_targets.each do |test_native_target|
scheme.add_test_target(test_native_target)
end
end
project.save
end
end
end
Expand Down
2 changes: 1 addition & 1 deletion spec/cocoapods-integration-specs
Submodule cocoapods-integration-specs updated 29 files
+1 −1 install_add_pod/after/execution_output.txt
+1 −1 install_circular_subspec_dependency/after/execution_output.txt
+1 −1 install_custom_build_configuration/after/execution_output.txt
+1 −1 install_custom_module_map/after/execution_output.txt
+1 −1 install_custom_module_name/after/execution_output.txt
+1 −1 install_custom_workspace/after/execution_output.txt
+1 −1 install_external_source/after/execution_output.txt
+1 −1 install_framework_resources/after/execution_output.txt
+1 −1 install_header_mappings_dir/after/execution_output.txt
+1 −1 install_local_source/after/execution_output.txt
+1 −3 install_multi_pods_project/after/execution_output.txt
+1 −1 install_multiple_targets/after/execution_output.txt
+1 −1 install_multiple_test_specs/after/execution_output.txt
+1 −1 install_new/after/execution_output.txt
+1 −1 install_no_dependencies/after/execution_output.txt
+1 −1 install_non_objective_c_files/after/execution_output.txt
+1 −1 install_podfile_callbacks/after/execution_output.txt
+1 −1 install_podspec/after/execution_output.txt
+1 −1 install_remove_pod/after/execution_output.txt
+1 −1 install_resources/after/execution_output.txt
+1 −1 install_resources_no_source_files/after/execution_output.txt
+1 −1 install_search_paths_inheritance/after/execution_output.txt
+1 −1 install_static_swift_modules/after/execution_output.txt
+1 −1 install_subspecs/after/execution_output.txt
+1 −1 install_subspecs_no_duplicate_prefix/after/execution_output.txt
+1 −1 install_using_checkout_options/after/execution_output.txt
+1 −1 install_vendored_dynamic_framework/after/execution_output.txt
+1 −1 update_all/after/execution_output.txt
+1 −1 update_selected/after/execution_output.txt
38 changes: 17 additions & 21 deletions spec/unit/installer/xcode/multi_pods_project_generator_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -558,8 +558,8 @@ class Xcode

target.stubs(:user_targets).returns([user_target])

@generator = SinglePodsProjectGenerator.new(config.sandbox, [target], [],
@analysis_result, @installation_options, config)
@generator = MultiPodsProjectGenerator.new(config.sandbox, [target], [],
@analysis_result, @installation_options, config)
pod_generator_result = @generator.generate!
pod_generator_result.project.object_version.should == '1'
pod_generator_result.projects_by_pod_targets.keys.each do |target_project|
Expand All @@ -574,48 +574,44 @@ class Xcode
pod_generator_result = @generator.generate!
pods_project = pod_generator_result.project
pods_project.main_group.expects(:sort)
Xcodeproj::Project.any_instance.stubs(:recreate_user_schemes)
Xcode::PodsProjectWriter.new(@generator.sandbox, pods_project,
pod_generator_result.target_installation_results.pod_target_installation_results,
@generator.installation_options).write!
pod_generator_result.projects_by_pod_targets.keys.each do |target_project|
target_project.main_group.expects(:sort)
Xcode::PodsProjectWriter.new(@generator.sandbox, target_project,
pod_generator_result.target_installation_results.pod_target_installation_results,
@generator.installation_options).write!
end
Xcodeproj::Project.any_instance.stubs(:recreate_user_schemes)
generated_projects = [pods_project] + pod_generator_result.projects_by_pod_targets.keys
Xcode::PodsProjectWriter.new(@generator.sandbox, generated_projects,
pod_generator_result.target_installation_results.pod_target_installation_results,
@generator.installation_options).write!
end

it 'saves the project' do
pod_generator_result = @generator.generate!
Xcodeproj::Project.any_instance.stubs(:recreate_user_schemes)
pod_generator_result.project.expects(:save)
Xcode::PodsProjectWriter.new(@generator.sandbox, pod_generator_result.project,
pod_generator_result.target_installation_results.pod_target_installation_results,
@generator.installation_options).write!
pod_generator_result.projects_by_pod_targets.keys.each do |target_project|
pods_project = pod_generator_result.project
projects_by_pod_targets = pod_generator_result.projects_by_pod_targets
pods_project.expects(:save)
projects_by_pod_targets.keys.each do |target_project|
target_project.expects(:sort)
Xcode::PodsProjectWriter.new(@generator.sandbox, target_project,
pod_generator_result.target_installation_results.pod_target_installation_results,
@generator.installation_options).write!
end
generated_projects = [pods_project] + projects_by_pod_targets.keys
Xcode::PodsProjectWriter.new(@generator.sandbox, generated_projects,
pod_generator_result.target_installation_results.pod_target_installation_results,
@generator.installation_options).write!
end

it 'project cleans up empty groups' do
pod_generator_result = @generator.generate!
pods_project = pod_generator_result.project
projects_by_pod_targets = pod_generator_result.projects_by_pod_targets
Xcode::PodsProjectWriter.new(@generator.sandbox, pods_project,
generated_projects = [pods_project] + projects_by_pod_targets.keys
Xcode::PodsProjectWriter.new(@generator.sandbox, generated_projects,
pod_generator_result.target_installation_results.pod_target_installation_results,
@generator.installation_options).write!
pods_project.main_group['Pods'].should.be.nil
pods_project.main_group['Development Pods'].should.be.nil
pods_project.main_group['Dependencies'].should.not.be.nil

projects_by_pod_targets.keys.each do |project|
Xcode::PodsProjectWriter.new(@generator.sandbox, project,
pod_generator_result.target_installation_results.pod_target_installation_results,
@generator.installation_options).write!
project.main_group['Pods'].should.be.nil
project.main_group['Development Pods'].should.be.nil
end
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -401,7 +401,7 @@ class Xcode
pod_generator_result = @generator.generate!
pod_generator_result.project.main_group.expects(:sort)
Xcodeproj::Project.any_instance.stubs(:recreate_user_schemes)
Xcode::PodsProjectWriter.new(@generator.sandbox, pod_generator_result.project,
Xcode::PodsProjectWriter.new(@generator.sandbox, [pod_generator_result.project],
pod_generator_result.target_installation_results.pod_target_installation_results,
@generator.installation_options).write!
end
Expand All @@ -410,7 +410,7 @@ class Xcode
pod_generator_result = @generator.generate!
Xcodeproj::Project.any_instance.stubs(:recreate_user_schemes)
pod_generator_result.project.expects(:save)
Xcode::PodsProjectWriter.new(@generator.sandbox, pod_generator_result.project,
Xcode::PodsProjectWriter.new(@generator.sandbox, [pod_generator_result.project],
pod_generator_result.target_installation_results.pod_target_installation_results,
@generator.installation_options).write!
end
Expand Down
0