diff --git a/src/TulsiGenerator/Bazel/tulsi/tulsi_aspects.bzl b/src/TulsiGenerator/Bazel/tulsi/tulsi_aspects.bzl
index 2d8d4ba..3d0e35c 100644
--- a/src/TulsiGenerator/Bazel/tulsi/tulsi_aspects.bzl
+++ b/src/TulsiGenerator/Bazel/tulsi/tulsi_aspects.bzl
@@ -266,7 +266,7 @@
     )
 
 def _depset_to_file_metadata_list(a_depset):
-    """"Converts a depset of files into a list of _file_metadata structs."""
+    """Converts a depset of files into a list of _file_metadata structs."""
     return [_file_metadata(f) for f in a_depset.to_list()]
 
 def _collect_artifacts(obj, attr_path, exclude_xcdatamodel = False, exclude_xcassets = False):
@@ -569,11 +569,14 @@
 
 def _extract_generated_sources(target):
     """Returns (source_metadatas, includes) generated by the given target."""
-    file_metadatas = []
+    transitive_depsets = []
     objc_provider = _get_opt_provider(target, ObjcInfo)
-    if hasattr(objc_provider, "source") and hasattr(objc_provider, "header"):
-        all_files = depset(transitive = [objc_provider.source, objc_provider.header])
-        file_metadatas = _depset_to_file_metadata_list(all_files)
+    if hasattr(objc_provider, "source"):
+        transitive_depsets.append(objc_provider.source)
+    cc_info = _get_opt_provider(target, CcInfo)
+    if cc_info:
+        transitive_depsets.append(cc_info.compilation_context.headers)
+    file_metadatas = _depset_to_file_metadata_list(depset(transitive = transitive_depsets))
 
     return file_metadatas
 
@@ -650,25 +653,13 @@
                 depsets.append(objc.strict_include)
     return depset(transitive = depsets)
 
-def _collect_objc_defines(objc_provider, cc_provider, rule_attr):
-    """Returns a depset of C-compiler defines."""
-    if cc_provider and not objc_provider:
-        return cc_provider.compilation_context.defines
-    depsets = [objc_provider.define] if objc_provider else []
-    for dep in _collect_dependencies(rule_attr, "deps"):
-        if CcInfo in dep:
-            compilation_context = dep[CcInfo].compilation_context
-            depsets.append(compilation_context.defines)
-    return depset(transitive = depsets)
-
 # TODO(b/64490743): Add these files to the Xcode project.
 def _collect_swift_header(target):
     """Returns a depset of Swift generated headers found on the given target."""
 
-    # swift_* targets put the generated header into their objc provider HEADER
-    # field.
-    if SwiftInfo in target and ObjcInfo in target:
-        return target[ObjcInfo].header
+    # swift_* targets put the generated header into CcInfo.
+    if SwiftInfo in target and CcInfo in target:
+        return target[CcInfo].compilation_context.headers
     return depset()
 
 def _target_filtering_info(ctx):
@@ -826,21 +817,19 @@
 
     objc_strict_includes = _collect_objc_strict_includes(target, rule_attr)
 
-    objc_provider = _get_opt_provider(target, ObjcInfo)
     cc_provider = _get_opt_provider(target, CcInfo)
     objc_defines = []
-    includes_depsets = []
 
-    if objc_provider:
+    if cc_provider:
+        cc_ctx = cc_provider.compilation_context
         includes_depsets = [
             objc_strict_includes,
-            objc_provider.include,
-            objc_provider.iquote,
-            objc_provider.include_system,
+            cc_ctx.includes,
+            cc_ctx.quote_includes,
+            cc_ctx.system_includes,
         ]
-    elif cc_provider:
-        cc_ctx = cc_provider.compilation_context
-        includes_depsets = [cc_ctx.includes, cc_ctx.quote_includes, cc_ctx.system_includes]
+    else:
+        includes_depsets = [objc_strict_includes]
 
     if includes_depsets:
         # Use a depset here to remove duplicates which is possible since
@@ -852,7 +841,8 @@
     else:
         target_includes = []
 
-    objc_defines = _collect_objc_defines(objc_provider, cc_provider, rule_attr).to_list()
+    if cc_provider:
+        objc_defines = cc_provider.compilation_context.defines.to_list()
 
     platform_type, os_deployment_target = _get_deployment_info(target, ctx)
     non_arc_srcs = _collect_files(rule, "attr.non_arc_srcs")
@@ -1089,9 +1079,11 @@
     all_files_depsets = []
     if target_kind in _SOURCE_GENERATING_RULES + _NON_ARC_SOURCE_GENERATING_RULES:
         objc_provider = _get_opt_provider(target, ObjcInfo)
-        if hasattr(objc_provider, "source") and hasattr(objc_provider, "header"):
+        if hasattr(objc_provider, "source"):
             all_files_depsets.append(objc_provider.source)
-            all_files_depsets.append(objc_provider.header)
+        cc_info = _get_opt_provider(target, CcInfo)
+        if cc_info:
+            all_files_depsets.append(cc_info.compilation_context.headers)
 
     all_files_depsets.append(_collect_swift_header(target))
     all_files_depsets.append(_collect_swift_modules(target))
