| Index: tools/gn/xcode_object.h
 | 
| diff --git a/tools/gn/xcode_object.h b/tools/gn/xcode_object.h
 | 
| index a6ab32ad8e06cb432c42631d34f6d16b8679d722..c695dbbeaad39f3d0f53d1387e3d49fe943270f3 100644
 | 
| --- a/tools/gn/xcode_object.h
 | 
| +++ b/tools/gn/xcode_object.h
 | 
| @@ -33,6 +33,7 @@ enum PBXObjectClass {
 | 
|    // Those values needs to stay sorted in alphabetic order.
 | 
|    PBXAggregateTargetClass,
 | 
|    PBXBuildFileClass,
 | 
| +  PBXContainerItemProxyClass,
 | 
|    PBXFileReferenceClass,
 | 
|    PBXFrameworksBuildPhaseClass,
 | 
|    PBXGroupClass,
 | 
| @@ -40,6 +41,7 @@ enum PBXObjectClass {
 | 
|    PBXProjectClass,
 | 
|    PBXShellScriptBuildPhaseClass,
 | 
|    PBXSourcesBuildPhaseClass,
 | 
| +  PBXTargetDependencyClass,
 | 
|    XCBuildConfigurationClass,
 | 
|    XCConfigurationListClass,
 | 
|  };
 | 
| @@ -50,8 +52,9 @@ const char* ToString(PBXObjectClass cls);
 | 
|  
 | 
|  class PBXAggregateTarget;
 | 
|  class PBXBuildFile;
 | 
| -class PBXFileReference;
 | 
|  class PBXBuildPhase;
 | 
| +class PBXContainerItemProxy;
 | 
| +class PBXFileReference;
 | 
|  class PBXFrameworksBuildPhase;
 | 
|  class PBXGroup;
 | 
|  class PBXNativeTarget;
 | 
| @@ -60,6 +63,7 @@ class PBXProject;
 | 
|  class PBXShellScriptBuildPhase;
 | 
|  class PBXSourcesBuildPhase;
 | 
|  class PBXTarget;
 | 
| +class PBXTargetDependency;
 | 
|  class XCBuildConfiguration;
 | 
|  class XCConfigurationList;
 | 
|  
 | 
| @@ -122,13 +126,16 @@ class PBXTarget : public PBXObject {
 | 
|              const PBXAttributes& attributes);
 | 
|    ~PBXTarget() override;
 | 
|  
 | 
| -  // PXBObject implementation.
 | 
| +  void AddDependency(std::unique_ptr<PBXTargetDependency> dependency);
 | 
| +
 | 
| +  // PBXObject implementation.
 | 
|    std::string Name() const override;
 | 
|    void Visit(PBXObjectVisitor& visitor) override;
 | 
|  
 | 
|   protected:
 | 
|    std::unique_ptr<XCConfigurationList> configurations_;
 | 
|    std::vector<std::unique_ptr<PBXBuildPhase>> build_phases_;
 | 
| +  std::vector<std::unique_ptr<PBXTargetDependency>> dependencies_;
 | 
|    PBXSourcesBuildPhase* source_build_phase_;
 | 
|    std::string name_;
 | 
|  
 | 
| @@ -146,7 +153,7 @@ class PBXAggregateTarget : public PBXTarget {
 | 
|                       const PBXAttributes& attributes);
 | 
|    ~PBXAggregateTarget() override;
 | 
|  
 | 
| -  // PXBObject implementation.
 | 
| +  // PBXObject implementation.
 | 
|    PBXObjectClass Class() const override;
 | 
|    void Print(std::ostream& out, unsigned indent) const override;
 | 
|  
 | 
| @@ -163,7 +170,7 @@ class PBXBuildFile : public PBXObject {
 | 
|                 const CompilerFlags compiler_flag);
 | 
|    ~PBXBuildFile() override;
 | 
|  
 | 
| -  // PXBObject implementation.
 | 
| +  // PBXObject implementation.
 | 
|    PBXObjectClass Class() const override;
 | 
|    std::string Name() const override;
 | 
|    void Print(std::ostream& out, unsigned indent) const override;
 | 
| @@ -176,6 +183,25 @@ class PBXBuildFile : public PBXObject {
 | 
|    DISALLOW_COPY_AND_ASSIGN(PBXBuildFile);
 | 
|  };
 | 
|  
 | 
| +// PBXContainerItemProxy ------------------------------------------------------
 | 
| +class PBXContainerItemProxy : public PBXObject {
 | 
| + public:
 | 
| +  PBXContainerItemProxy(const PBXProject* project, const PBXTarget* target);
 | 
| +  ~PBXContainerItemProxy() override;
 | 
| +
 | 
| +  // PBXObject implementation.
 | 
| +  PBXObjectClass Class() const override;
 | 
| +  std::string Name() const override;
 | 
| +  void Visit(PBXObjectVisitor& visitor) override;
 | 
| +  void Print(std::ostream& out, unsigned indent) const override;
 | 
| +
 | 
| + private:
 | 
| +  const PBXProject* project_;
 | 
| +  const PBXTarget* target_;
 | 
| +
 | 
| +  DISALLOW_COPY_AND_ASSIGN(PBXContainerItemProxy);
 | 
| +};
 | 
| +
 | 
|  // PBXFileReference -----------------------------------------------------------
 | 
|  
 | 
|  class PBXFileReference : public PBXObject {
 | 
| @@ -372,6 +398,27 @@ class PBXSourcesBuildPhase : public PBXBuildPhase {
 | 
|    DISALLOW_COPY_AND_ASSIGN(PBXSourcesBuildPhase);
 | 
|  };
 | 
|  
 | 
| +// PBXTargetDependency -----------------------------------------------------
 | 
| +class PBXTargetDependency : public PBXObject {
 | 
| + public:
 | 
| +  PBXTargetDependency(
 | 
| +      const PBXTarget* target,
 | 
| +      std::unique_ptr<PBXContainerItemProxy> container_item_proxy);
 | 
| +  ~PBXTargetDependency() override;
 | 
| +
 | 
| +  // PBXObject implementation.
 | 
| +  PBXObjectClass Class() const override;
 | 
| +  std::string Name() const override;
 | 
| +  void Visit(PBXObjectVisitor& visitor) override;
 | 
| +  void Print(std::ostream& out, unsigned indent) const override;
 | 
| +
 | 
| + private:
 | 
| +  const PBXTarget* target_;
 | 
| +  std::unique_ptr<PBXContainerItemProxy> container_item_proxy_;
 | 
| +
 | 
| +  DISALLOW_COPY_AND_ASSIGN(PBXTargetDependency);
 | 
| +};
 | 
| +
 | 
|  // XCBuildConfiguration -------------------------------------------------------
 | 
|  
 | 
|  class XCBuildConfiguration : public PBXObject {
 | 
| 
 |