Fix issue with Tulsi incorrectly assuming the location of Info.plist files for extension targets.

PiperOrigin-RevId: 221679645
diff --git a/src/TulsiGenerator/Bazel/tulsi/tulsi_aspects.bzl b/src/TulsiGenerator/Bazel/tulsi/tulsi_aspects.bzl
index 3f6a9ef..2ec814a 100644
--- a/src/TulsiGenerator/Bazel/tulsi/tulsi_aspects.bzl
+++ b/src/TulsiGenerator/Bazel/tulsi/tulsi_aspects.bzl
@@ -848,7 +848,7 @@
         objc_module_maps = objc_module_maps,
         module_name = module_name,
         type = target_kind,
-        infoplist = infoplist.basename if infoplist else None,
+        infoplist = infoplist.path if infoplist else None,
         platform_type = platform_type,
         product_type = product_type,
         xcode_version = xcode_version,
diff --git a/src/TulsiGenerator/BazelAspectInfoExtractor.swift b/src/TulsiGenerator/BazelAspectInfoExtractor.swift
index 31e4500..0100caf 100644
--- a/src/TulsiGenerator/BazelAspectInfoExtractor.swift
+++ b/src/TulsiGenerator/BazelAspectInfoExtractor.swift
@@ -28,6 +28,8 @@
   var bazelURL: URL
   /// The location of the Bazel workspace to be examined.
   let workspaceRootURL: URL
+  /// The execution root URL.
+  let executionRootURL: URL
   /// Stores Tulsi-specific Bazel settings.
   let bazelSettingsProvider: BazelSettingsProviderProtocol
 
@@ -44,10 +46,12 @@
 
   init(bazelURL: URL,
        workspaceRootURL: URL,
+       executionRootURL: URL,
        bazelSettingsProvider: BazelSettingsProviderProtocol,
        localizedMessageLogger: LocalizedMessageLogger) {
     self.bazelURL = bazelURL
     self.workspaceRootURL = workspaceRootURL
+    self.executionRootURL = executionRootURL
     self.bazelSettingsProvider = bazelSettingsProvider
     self.localizedMessageLogger = localizedMessageLogger
 
@@ -375,12 +379,7 @@
 
       var extensionType: String?
       if targetProductType?.isiOSAppExtension ?? false, let infoplistPath = dict["infoplist"] as? String {
-        // TODO(b/73349137): This relies on the fact the Plist will be located next to the
-        // .tulsiinfo file for the same target. It would be better to get an absolute path to the
-        // plist from bazel.
-        let plistPath = URL(fileURLWithPath: filename)
-          .deletingLastPathComponent()
-          .appendingPathComponent(infoplistPath).path
+        let plistPath = executionRootURL.appendingPathComponent(infoplistPath).path
         guard let info = NSDictionary(contentsOfFile: plistPath) else {
           throw ExtractorError.parsingFailed("Unable to load extension plist file: \(plistPath)")
         }
diff --git a/src/TulsiGenerator/BazelWorkspaceInfoExtractor.swift b/src/TulsiGenerator/BazelWorkspaceInfoExtractor.swift
index 7f9024c..d746eef 100644
--- a/src/TulsiGenerator/BazelWorkspaceInfoExtractor.swift
+++ b/src/TulsiGenerator/BazelWorkspaceInfoExtractor.swift
@@ -73,8 +73,12 @@
                                                              workspaceRootURL: workspaceRootURL,
                                                              bazelUniversalFlags: universalFlags,
                                                              localizedMessageLogger: localizedMessageLogger)
+
+    let executionRootURL =  URL(fileURLWithPath: workspacePathInfoFetcher.getExecutionRoot(),
+                                isDirectory: false)
     aspectExtractor = BazelAspectInfoExtractor(bazelURL: bazelURL,
                                                workspaceRootURL: workspaceRootURL,
+                                               executionRootURL: executionRootURL,
                                                bazelSettingsProvider: bazelSettingsProvider,
                                                localizedMessageLogger: localizedMessageLogger)
     queryExtractor = BazelQueryInfoExtractor(bazelURL: bazelURL,
diff --git a/src/TulsiGeneratorIntegrationTests/AspectTests.swift b/src/TulsiGeneratorIntegrationTests/AspectTests.swift
index 5479614..e978b16 100644
--- a/src/TulsiGeneratorIntegrationTests/AspectTests.swift
+++ b/src/TulsiGeneratorIntegrationTests/AspectTests.swift
@@ -24,8 +24,11 @@
   override func setUp() {
     super.setUp()
     let bazelSettingsProvider = BazelSettingsProvider(universalFlags: bazelUniversalFlags)
+    let executionRootURL = URL(fileURLWithPath: workspaceInfoFetcher.getExecutionRoot(),
+                               isDirectory: false)
     aspectInfoExtractor = BazelAspectInfoExtractor(bazelURL: bazelURL,
                                                    workspaceRootURL: workspaceRootURL!,
+                                                   executionRootURL: executionRootURL,
                                                    bazelSettingsProvider: bazelSettingsProvider,
                                                    localizedMessageLogger: localizedMessageLogger)
   }
@@ -456,8 +459,11 @@
   override func setUp() {
     super.setUp()
     let bazelSettingsProvider = BazelSettingsProvider(universalFlags: bazelUniversalFlags)
+    let executionRootURL = URL(fileURLWithPath: workspaceInfoFetcher.getExecutionRoot(),
+                               isDirectory: false)
     aspectInfoExtractor = BazelAspectInfoExtractor(bazelURL: bazelURL,
                                                    workspaceRootURL: workspaceRootURL!,
+                                                   executionRootURL: executionRootURL,
                                                    bazelSettingsProvider: bazelSettingsProvider,
                                                    localizedMessageLogger: localizedMessageLogger)
     installBUILDFile("TestSuiteRoot",