From 94b1e77b1c3ad26678566f048ee87182aa3c5946 Mon Sep 17 00:00:00 2001 From: Dimitris Koutsogiorgas Date: Fri, 9 Jun 2023 21:45:17 -0700 Subject: [PATCH] Add support for parsing XCLocalSwiftPackageReference objects. --- CHANGELOG.md | 4 +++ lib/xcodeproj/project/object.rb | 1 + lib/xcodeproj/project/object/root_object.rb | 4 +-- .../object/swift_package_local_reference.rb | 29 +++++++++++++++++++ .../swift_package_product_dependency.rb | 6 ++-- .../object/swift_package_remote_reference.rb | 4 +-- .../swift_package_local_reference_spec.rb | 23 +++++++++++++++ 7 files changed, 64 insertions(+), 7 deletions(-) create mode 100644 lib/xcodeproj/project/object/swift_package_local_reference.rb create mode 100644 spec/project/object/swift_package_local_reference_spec.rb diff --git a/CHANGELOG.md b/CHANGELOG.md index a683c0581..78812cb03 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,10 @@ ##### Enhancements +* Add support for parsing XCLocalSwiftPackageReference objects. + [Dimitris Koutsogiorgas](https://github.com/dnkoutso) + [#911](https://github.com/CocoaPods/Xcodeproj/pull/911) + * Add Xcode 15.0 object version support. [Dimitris Koutsogiorgas](https://github.com/dnkoutso) [#910](https://github.com/CocoaPods/Xcodeproj/pull/910) diff --git a/lib/xcodeproj/project/object.rb b/lib/xcodeproj/project/object.rb index 9231ef8e6..8d2ecf0e5 100644 --- a/lib/xcodeproj/project/object.rb +++ b/lib/xcodeproj/project/object.rb @@ -519,6 +519,7 @@ def inspect # Now load the concrete subclasses. require 'xcodeproj/project/object/swift_package_remote_reference' +require 'xcodeproj/project/object/swift_package_local_reference' require 'xcodeproj/project/object/swift_package_product_dependency' require 'xcodeproj/project/object/build_configuration' require 'xcodeproj/project/object/build_file' diff --git a/lib/xcodeproj/project/object/root_object.rb b/lib/xcodeproj/project/object/root_object.rb index a7cf6f25f..26b8a7419 100644 --- a/lib/xcodeproj/project/object/root_object.rb +++ b/lib/xcodeproj/project/object/root_object.rb @@ -62,9 +62,9 @@ class PBXProject < AbstractObject # attribute :project_root, String, '' - # @return [Array] the list of Swift package references. + # @return [Array] the list of Swift package references. # - has_many :package_references, XCRemoteSwiftPackageReference + has_many :package_references, [XCRemoteSwiftPackageReference, XCLocalSwiftPackageReference] # @return [Array] any reference to other projects. # diff --git a/lib/xcodeproj/project/object/swift_package_local_reference.rb b/lib/xcodeproj/project/object/swift_package_local_reference.rb new file mode 100644 index 000000000..4fbc8827d --- /dev/null +++ b/lib/xcodeproj/project/object/swift_package_local_reference.rb @@ -0,0 +1,29 @@ +module Xcodeproj + class Project + module Object + # This class represents a local Swift package reference. + # + class XCLocalSwiftPackageReference < AbstractObject + # @!group Attributes + + # @return [String] the repository url this Swift package was installed from. + # + attribute :path, String + + # @!group AbstractObject Hooks + #--------------------------------------# + + def ascii_plist_annotation + " #{isa} \"#{File.basename(display_name)}\" " + end + + # @return [String] the path of the local Swift package reference. + # + def display_name + return path if path + super + end + end + end + end +end diff --git a/lib/xcodeproj/project/object/swift_package_product_dependency.rb b/lib/xcodeproj/project/object/swift_package_product_dependency.rb index 4e5b918da..471227b68 100644 --- a/lib/xcodeproj/project/object/swift_package_product_dependency.rb +++ b/lib/xcodeproj/project/object/swift_package_product_dependency.rb @@ -6,9 +6,9 @@ module Object class XCSwiftPackageProductDependency < AbstractObject # @!group Attributes - # @return [XCRemoteSwiftPackageReference] the Swift package reference. + # @return [XCRemoteSwiftPackageReference, XCLocalSwiftPackageReference] the Swift package reference. # - has_one :package, XCRemoteSwiftPackageReference + has_one :package, [XCRemoteSwiftPackageReference, XCLocalSwiftPackageReference] # @return [String] the product name of this Swift package. # @@ -17,7 +17,7 @@ class XCSwiftPackageProductDependency < AbstractObject # @!group AbstractObject Hooks #--------------------------------------# - # @return [String] the name of the Swift package. + # @return [String] the name of the Swift package product dependency. # def display_name return product_name if product_name diff --git a/lib/xcodeproj/project/object/swift_package_remote_reference.rb b/lib/xcodeproj/project/object/swift_package_remote_reference.rb index cf1033160..94c70e0d4 100644 --- a/lib/xcodeproj/project/object/swift_package_remote_reference.rb +++ b/lib/xcodeproj/project/object/swift_package_remote_reference.rb @@ -1,7 +1,7 @@ module Xcodeproj class Project module Object - # This class represents a Swift package reference. + # This class represents a remote Swift package reference. # class XCRemoteSwiftPackageReference < AbstractObject # @!group Attributes @@ -21,7 +21,7 @@ def ascii_plist_annotation " #{isa} \"#{File.basename(display_name)}\" " end - # @return [String] the name of the Swift package repository. + # @return [String] the name of the remote Swift package reference. # def display_name return repositoryURL if repositoryURL diff --git a/spec/project/object/swift_package_local_reference_spec.rb b/spec/project/object/swift_package_local_reference_spec.rb new file mode 100644 index 000000000..adda1ffed --- /dev/null +++ b/spec/project/object/swift_package_local_reference_spec.rb @@ -0,0 +1,23 @@ +require File.expand_path('../../../spec_helper', __FILE__) + +module ProjectSpecs + describe Xcodeproj::Project::Object::XCLocalSwiftPackageReference do + before do + @proxy = @project.new(XCLocalSwiftPackageReference) + end + + it 'returns default display_name if path is not set' do + @proxy.display_name.should == 'LocalSwiftPackageReference' + end + + it 'returns path for display_name if path is set' do + @proxy.path = '../path' + @proxy.display_name.should == '../path' + end + + it 'returns the ascii plist annotation with the last component of path' do + @proxy.path = '../path' + @proxy.ascii_plist_annotation.should == ' XCLocalSwiftPackageReference "path" ' + end + end +end