diff --git a/src/gn/xcode_object.cc b/src/gn/xcode_object.cc
index 1b139a8..471a201 100644
--- a/src/gn/xcode_object.cc
+++ b/src/gn/xcode_object.cc
@@ -303,6 +303,8 @@
       return "PBXNativeTarget";
     case PBXProjectClass:
       return "PBXProject";
+    case PBXResourcesBuildPhaseClass:
+      return "PBXResourcesBuildPhase";
     case PBXShellScriptBuildPhaseClass:
       return "PBXShellScriptBuildPhase";
     case PBXSourcesBuildPhaseClass:
@@ -368,6 +370,25 @@
 
 PBXBuildPhase::~PBXBuildPhase() = default;
 
+void PBXBuildPhase::AddBuildFile(std::unique_ptr<PBXBuildFile> build_file) {
+  DCHECK(build_file);
+  files_.push_back(std::move(build_file));
+}
+
+void PBXBuildPhase::Visit(PBXObjectVisitor& visitor) {
+  PBXObject::Visit(visitor);
+  for (const auto& file : files_) {
+    file->Visit(visitor);
+  }
+}
+
+void PBXBuildPhase::Visit(PBXObjectVisitorConst& visitor) const {
+  PBXObject::Visit(visitor);
+  for (const auto& file : files_) {
+    file->Visit(visitor);
+  }
+}
+
 // PBXTarget ------------------------------------------------------------------
 
 PBXTarget::PBXTarget(const std::string& name,
@@ -442,7 +463,7 @@
 // PBXBuildFile ---------------------------------------------------------------
 
 PBXBuildFile::PBXBuildFile(const PBXFileReference* file_reference,
-                           const PBXSourcesBuildPhase* build_phase,
+                           const PBXBuildPhase* build_phase,
                            const CompilerFlags compiler_flag)
     : file_reference_(file_reference),
       build_phase_(build_phase),
@@ -568,7 +589,7 @@
   out << indent_str << Reference() << " = {\n";
   PrintProperty(out, rules, "isa", ToString(Class()));
   PrintProperty(out, rules, "buildActionMask", 0x7fffffffu);
-  PrintProperty(out, rules, "files", EmptyPBXObjectVector());
+  PrintProperty(out, rules, "files", files_);
   PrintProperty(out, rules, "runOnlyForDeploymentPostprocessing", 0u);
   out << indent_str << "};\n";
 }
@@ -701,10 +722,19 @@
       static_cast<PBXSourcesBuildPhase*>(build_phases_.back().get());
 
   build_phases_.push_back(std::make_unique<PBXFrameworksBuildPhase>());
+  build_phases_.push_back(std::make_unique<PBXResourcesBuildPhase>());
+  resource_build_phase_ =
+      static_cast<PBXResourcesBuildPhase*>(build_phases_.back().get());
 }
 
 PBXNativeTarget::~PBXNativeTarget() = default;
 
+void PBXNativeTarget::AddResourceFile(const PBXFileReference* file_reference) {
+  DCHECK(file_reference);
+  resource_build_phase_->AddBuildFile(std::make_unique<PBXBuildFile>(
+      file_reference, resource_build_phase_, CompilerFlags::NONE));
+}
+
 void PBXNativeTarget::AddFileForIndexing(const PBXFileReference* file_reference,
                                          const CompilerFlags compiler_flag) {
   DCHECK(file_reference);
@@ -913,6 +943,31 @@
   out << indent_str << "};\n";
 }
 
+// PBXResourcesBuildPhase -----------------------------------------------------
+
+PBXResourcesBuildPhase::PBXResourcesBuildPhase() = default;
+
+PBXResourcesBuildPhase::~PBXResourcesBuildPhase() = default;
+
+PBXObjectClass PBXResourcesBuildPhase::Class() const {
+  return PBXResourcesBuildPhaseClass;
+}
+
+std::string PBXResourcesBuildPhase::Name() const {
+  return "Resources";
+}
+
+void PBXResourcesBuildPhase::Print(std::ostream& out, unsigned indent) const {
+  const std::string indent_str(indent, '\t');
+  const IndentRules rules = {false, indent + 1};
+  out << indent_str << Reference() << " = {\n";
+  PrintProperty(out, rules, "isa", ToString(Class()));
+  PrintProperty(out, rules, "buildActionMask", 0x7fffffffu);
+  PrintProperty(out, rules, "files", files_);
+  PrintProperty(out, rules, "runOnlyForDeploymentPostprocessing", 0u);
+  out << indent_str << "};\n";
+}
+
 // PBXShellScriptBuildPhase ---------------------------------------------------
 
 PBXShellScriptBuildPhase::PBXShellScriptBuildPhase(
@@ -937,7 +992,7 @@
   out << indent_str << Reference() << " = {\n";
   PrintProperty(out, rules, "isa", ToString(Class()));
   PrintProperty(out, rules, "buildActionMask", 0x7fffffffu);
-  PrintProperty(out, rules, "files", EmptyPBXObjectVector());
+  PrintProperty(out, rules, "files", files_);
   PrintProperty(out, rules, "inputPaths", EmptyPBXObjectVector());
   PrintProperty(out, rules, "name", name_);
   PrintProperty(out, rules, "outputPaths", EmptyPBXObjectVector());
@@ -954,11 +1009,6 @@
 
 PBXSourcesBuildPhase::~PBXSourcesBuildPhase() = default;
 
-void PBXSourcesBuildPhase::AddBuildFile(
-    std::unique_ptr<PBXBuildFile> build_file) {
-  files_.push_back(std::move(build_file));
-}
-
 PBXObjectClass PBXSourcesBuildPhase::Class() const {
   return PBXSourcesBuildPhaseClass;
 }
@@ -967,20 +1017,6 @@
   return "Sources";
 }
 
-void PBXSourcesBuildPhase::Visit(PBXObjectVisitor& visitor) {
-  PBXBuildPhase::Visit(visitor);
-  for (const auto& file : files_) {
-    file->Visit(visitor);
-  }
-}
-
-void PBXSourcesBuildPhase::Visit(PBXObjectVisitorConst& visitor) const {
-  PBXBuildPhase::Visit(visitor);
-  for (const auto& file : files_) {
-    file->Visit(visitor);
-  }
-}
-
 void PBXSourcesBuildPhase::Print(std::ostream& out, unsigned indent) const {
   const std::string indent_str(indent, '\t');
   const IndentRules rules = {false, indent + 1};
diff --git a/src/gn/xcode_object.h b/src/gn/xcode_object.h
index aaa494c..78bdc92 100644
--- a/src/gn/xcode_object.h
+++ b/src/gn/xcode_object.h
@@ -40,6 +40,7 @@
   PBXGroupClass,
   PBXNativeTargetClass,
   PBXProjectClass,
+  PBXResourcesBuildPhaseClass,
   PBXShellScriptBuildPhaseClass,
   PBXSourcesBuildPhaseClass,
   PBXTargetDependencyClass,
@@ -61,6 +62,7 @@
 class PBXNativeTarget;
 class PBXObject;
 class PBXProject;
+class PBXResourcesBuildPhase;
 class PBXShellScriptBuildPhase;
 class PBXSourcesBuildPhase;
 class PBXTarget;
@@ -126,6 +128,15 @@
   PBXBuildPhase();
   ~PBXBuildPhase() override;
 
+  void AddBuildFile(std::unique_ptr<PBXBuildFile> build_file);
+
+  // PBXObject implementation.
+  void Visit(PBXObjectVisitor& visitor) override;
+  void Visit(PBXObjectVisitorConst& visitor) const override;
+
+ protected:
+  std::vector<std::unique_ptr<PBXBuildFile>> files_;
+
  private:
   DISALLOW_COPY_AND_ASSIGN(PBXBuildPhase);
 };
@@ -152,6 +163,7 @@
   std::vector<std::unique_ptr<PBXBuildPhase>> build_phases_;
   std::vector<std::unique_ptr<PBXTargetDependency>> dependencies_;
   PBXSourcesBuildPhase* source_build_phase_ = nullptr;
+  PBXResourcesBuildPhase* resource_build_phase_ = nullptr;
   std::string name_;
 
  private:
@@ -181,7 +193,7 @@
 class PBXBuildFile : public PBXObject {
  public:
   PBXBuildFile(const PBXFileReference* file_reference,
-               const PBXSourcesBuildPhase* build_phase,
+               const PBXBuildPhase* build_phase,
                const CompilerFlags compiler_flag);
   ~PBXBuildFile() override;
 
@@ -192,7 +204,7 @@
 
  private:
   const PBXFileReference* file_reference_ = nullptr;
-  const PBXSourcesBuildPhase* build_phase_ = nullptr;
+  const PBXBuildPhase* build_phase_ = nullptr;
   const CompilerFlags compiler_flag_;
 
   DISALLOW_COPY_AND_ASSIGN(PBXBuildFile);
@@ -315,6 +327,8 @@
                   const PBXFileReference* product_reference);
   ~PBXNativeTarget() override;
 
+  void AddResourceFile(const PBXFileReference* file_reference);
+
   void AddFileForIndexing(const PBXFileReference* file_reference,
                           const CompilerFlags compiler_flag);
 
@@ -388,6 +402,22 @@
   DISALLOW_COPY_AND_ASSIGN(PBXProject);
 };
 
+// PBXResourcesBuildPhase -----------------------------------------------------
+
+class PBXResourcesBuildPhase : public PBXBuildPhase {
+ public:
+  PBXResourcesBuildPhase();
+  ~PBXResourcesBuildPhase() override;
+
+  // PBXObject implementation.
+  PBXObjectClass Class() const override;
+  std::string Name() const override;
+  void Print(std::ostream& out, unsigned indent) const override;
+
+ private:
+  DISALLOW_COPY_AND_ASSIGN(PBXResourcesBuildPhase);
+};
+
 // PBXShellScriptBuildPhase ---------------------------------------------------
 
 class PBXShellScriptBuildPhase : public PBXBuildPhase {
@@ -415,18 +445,12 @@
   PBXSourcesBuildPhase();
   ~PBXSourcesBuildPhase() override;
 
-  void AddBuildFile(std::unique_ptr<PBXBuildFile> build_file);
-
   // PBXObject implementation.
   PBXObjectClass Class() const override;
   std::string Name() const override;
-  void Visit(PBXObjectVisitor& visitor) override;
-  void Visit(PBXObjectVisitorConst& visitor) const override;
   void Print(std::ostream& out, unsigned indent) const override;
 
  private:
-  std::vector<std::unique_ptr<PBXBuildFile>> files_;
-
   DISALLOW_COPY_AND_ASSIGN(PBXSourcesBuildPhase);
 };
 
