diff --git a/lib/pbxProject.js b/lib/pbxProject.js
index c568e50..13e7246 100644
--- a/lib/pbxProject.js
+++ b/lib/pbxProject.js
@@ -230,7 +230,7 @@
         file = this.addPluginFile(path, opt);
         if (!file) return false;
     } else {
-        file = new pbxFile(path, opt);       
+        file = new pbxFile(path, opt);
         if (this.hasFile(file.path)) return false;
     }
 
@@ -241,10 +241,10 @@
         correctForResourcesPath(file, this);
         file.fileRef = this.generateUuid();
     }
-    
+
     this.addToPbxBuildFileSection(file);        // PBXBuildFile
     this.addToPbxResourcesBuildPhase(file);     // PBXResourcesBuildPhase
-    
+
     if (!opt.plugin) {
         this.addToPbxFileReferenceSection(file);    // PBXFileReference
         if (group) {
@@ -253,9 +253,9 @@
         else {
             this.addToResourcesPbxGroup(file);          // PBXGroup
         }
-        
+
     }
-    
+
     return file;
 }
 
@@ -279,7 +279,7 @@
     }
     else {
         this.removeFromResourcesPbxGroup(file);          // PBXGroup
-    }    
+    }
     this.removeFromPbxResourcesBuildPhase(file);     // PBXResourcesBuildPhase
 
     return file;
@@ -1906,5 +1906,25 @@
     return file;
 }
 
+pbxProject.prototype.addTargetAttribute = function(prop, value, target) {
+    var attributes = this.getFirstProject()['firstProject']['attributes'];
+    if (attributes['TargetAttributes'] === undefined) {
+        attributes['TargetAttributes'] = {};
+    }
+    target = target || this.getFirstTarget();
+    if (attributes['TargetAttributes'][target.uuid] === undefined) {
+      attributes['TargetAttributes'][target.uuid] = {};
+    }
+    attributes['TargetAttributes'][target.uuid][prop] = value;
+}
+
+pbxProject.prototype.removeTargetAttribute = function(prop, target) {
+    var attributes = this.getFirstProject()['firstProject']['attributes'];
+    target = target || this.getFirstTarget();
+    if (attributes['TargetAttributes'] &&
+        attributes['TargetAttributes'][target.uuid]) {
+        delete attributes['TargetAttributes'][target.uuid][prop];
+    }
+}
 
 module.exports = pbxProject;
diff --git a/test/group.js b/test/group.js
index 8eb5b00..b907c7e 100644
--- a/test/group.js
+++ b/test/group.js
@@ -215,7 +215,7 @@
 
 exports.addResourceFileToGroup = {
     'should add resource file (PNG) to the splash group' : function(test) {
-        
+
         var testKey = project.findPBXGroupKey({path:'splash'});
         var file = project.addResourceFile('DefaultTest-667h.png', {}, testKey);
 
@@ -311,7 +311,6 @@
 }
 
 exports.testWritingPBXProject = {
-
     'should successfully write to PBXProject TargetAttributes': function(test) {
         var pbxProjectObj = project.getPBXObject('PBXProject');
         var pbxProject;
@@ -346,5 +345,35 @@
         var output = project.writeSync();
 
         test.done();
+    },
+    'should add target attribute to PBXProject TargetAttributes': function(test) {
+        project.addTargetAttribute('ProvisioningStyle', 'Manual');
+        var output = project.writeSync();
+        test.equal(output.match(/ProvisioningStyle\s*=\s*Manual/g).length, 1);
+
+        test.done();
+    },
+    'should change target attribute at PBXProject TargetAttributes': function(test) {
+        project.addTargetAttribute('ProvisioningStyle', 'Manual');
+        var output = project.writeSync();
+        test.equal(output.match(/ProvisioningStyle\s*=\s*Manual/g).length, 1);
+
+        project.addTargetAttribute('ProvisioningStyle', 'Automatic');
+        output = project.writeSync();
+        test.equal(output.match(/ProvisioningStyle\s*=\s*Manual/g), null);
+        test.equal(output.match(/ProvisioningStyle\s*=\s*Automatic/g).length, 1);
+
+        test.done();
+    },
+    'should remove target attribute from PBXProject TargetAttributes': function(test) {
+        project.addTargetAttribute('ProvisioningStyle', 'Manual');
+        var output = project.writeSync();
+        test.equal(output.match(/ProvisioningStyle\s*=\s*Manual/g).length, 1);
+
+        project.removeTargetAttribute('ProvisioningStyle');
+        output = project.writeSync();
+        test.equal(output.match(/ProvisioningStyle\s*=\s*Manual/g), null);
+
+        test.done();
     }
 }
