Skip to content

Commit 035d3ec

Browse files
committedApr 3, 2019
fix: return existing reference in addFramework and tests
1 parent 9436a01 commit 035d3ec

File tree

3 files changed

+48
-22
lines changed

3 files changed

+48
-22
lines changed
 

‎lib/pbxProject.js

+26-18
Original file line numberDiff line numberDiff line change
@@ -348,27 +348,33 @@ pbxProject.prototype.addFramework = function(fpath, opt) {
348348
}
349349

350350
if (link) {
351-
if(this.addToPbxFrameworksBuildPhase(file)) { // PBXFrameworksBuildPhase)
351+
const buildFileUuid = this.addToPbxFrameworksBuildPhase(file);
352+
if(buildFileUuid === file.uuid) { // PBXFrameworksBuildPhase)
352353
this.addToPbxBuildFileSection(file); // PBXBuildFile
354+
} else {
355+
file.uuid = buildFileUuid;
353356
}
354357
}
355358

356359
if (customFramework) {
357360
this.addToFrameworkSearchPaths(file);
358361

359362
if (embed) {
360-
opt.embed = embed;
361-
var embeddedFile = new pbxFile(fpath, opt);
362-
363-
embeddedFile.uuid = this.generateUuid();
364-
embeddedFile.fileRef = file.fileRef;
365-
embeddedFile.target = file.target;
366-
367-
if(this.addToPbxEmbedFrameworksBuildPhase(embeddedFile)) { // PBXCopyFilesBuildPhase
363+
opt.embed = embed;
364+
var embeddedFile = new pbxFile(fpath, opt);
365+
366+
embeddedFile.uuid = this.generateUuid();
367+
embeddedFile.fileRef = file.fileRef;
368+
embeddedFile.target = file.target;
369+
const embedBuildFileUuid = this.addToPbxEmbedFrameworksBuildPhase(embeddedFile);
370+
if(embedBuildFileUuid === embeddedFile.uuid) { // PBXCopyFilesBuildPhase
368371
//keeping a separate PBXBuildFile entry for Embed Frameworks
369372
this.addToPbxBuildFileSection(embeddedFile); // PBXBuildFile
370-
return embeddedFile;
373+
} else {
374+
embeddedFile.uuid = embedBuildFileUuid;
371375
}
376+
377+
return embeddedFile;
372378
}
373379
}
374380

@@ -861,11 +867,11 @@ pbxProject.prototype.removeFromFrameworksPbxGroup = function(file) {
861867
}
862868
}
863869

864-
function hasReferenceInPbxBuildFile(buildFileReferences, fileReference) {
870+
function getReferenceInPbxBuildFile(buildFileReferences, fileReference) {
865871
var buildFileSection = this.pbxBuildFileSection();
866872
for(let buildFileReference of buildFileReferences) {
867873
if(buildFileSection[buildFileReference.value] && buildFileSection[buildFileReference.value].fileRef === fileReference.fileRef){
868-
return true;
874+
return buildFileReference.value;
869875
}
870876
}
871877
}
@@ -874,12 +880,13 @@ pbxProject.prototype.addToPbxEmbedFrameworksBuildPhase = function (file) {
874880
var sources = this.pbxEmbedFrameworksBuildPhaseObj(file.target);
875881

876882
if (sources) {
877-
if(hasReferenceInPbxBuildFile.call(this, sources.files, file)){
878-
return false;
883+
var referenceUuid = getReferenceInPbxBuildFile.call(this, sources.files, file)
884+
if(referenceUuid){
885+
return referenceUuid;
879886
}
880887

881888
sources.files.push(pbxBuildPhaseObj(file));
882-
return true;
889+
return file.uuid;
883890
}
884891
}
885892

@@ -955,12 +962,13 @@ pbxProject.prototype.addToPbxFrameworksBuildPhase = function(file) {
955962
var sources = this.pbxFrameworksBuildPhaseObj(file.target);
956963

957964
if (sources) {
958-
if (hasReferenceInPbxBuildFile.call(this, sources.files, file)) {
959-
return false;
965+
var frameworkBuildUuid = getReferenceInPbxBuildFile.call(this, sources.files, file);
966+
if (frameworkBuildUuid) {
967+
return frameworkBuildUuid;
960968
}
961969

962970
sources.files.push(pbxBuildPhaseObj(file));
963-
return true;
971+
return file.uuid;
964972
}
965973
}
966974

‎test/addFramework.js

+12-2
Original file line numberDiff line numberDiff line change
@@ -188,10 +188,20 @@ exports.addFramework = {
188188
test.done();
189189
},
190190
'duplicate entries': {
191-
'should return false': function (test) {
191+
'should return same build file': function (test) {
192192
var newFile = proj.addFramework('libsqlite3.dylib');
193+
var sameFile = proj.addFramework('libsqlite3.dylib');
193194

194-
test.ok(!proj.addFramework('libsqlite3.dylib'));
195+
test.equal(newFile.uuid, sameFile.uuid);
196+
test.equal(newFile.fileRef, sameFile.fileRef);
197+
test.done();
198+
},
199+
'should return different build file with same ref for different target': function (test) {
200+
var newFile = proj.addFramework('libsqlite3.dylib');
201+
var differentFile = proj.addFramework('libsqlite3.dylib', { target: "1D6058900D05DD3D006BFB54"});
202+
203+
test.notEqual(newFile.uuid, differentFile.uuid);
204+
test.equal(newFile.fileRef, differentFile.fileRef);
195205
test.done();
196206
}
197207
},

‎test/fixtures/full-project.json

+10-2
Original file line numberDiff line numberDiff line change
@@ -564,7 +564,15 @@
564564
],
565565
"runOnlyForDeploymentPostprocessing": 0
566566
},
567-
"1D60588F0D05DD3D006BFB54_comment": "Frameworks"
567+
"1D60588F0D05DD3D006BFB54_comment": "Frameworks",
568+
"2D60588F0D05DD3D006BFB55": {
569+
"isa": "PBXFrameworksBuildPhase",
570+
"buildActionMask": 2147483647,
571+
"files": [
572+
],
573+
"runOnlyForDeploymentPostprocessing": 0
574+
},
575+
"2D60588F0D05DD3D006BFB55_comment": "Frameworks"
568576
},
569577
"PBXGroup": {
570578
"080E96DDFE201D6D7F000001": {
@@ -866,7 +874,7 @@
866874
"comment": "Sources"
867875
},
868876
{
869-
"value": "1D60588F0D05DD3D006BFB54",
877+
"value": "2D60588F0D05DD3D006BFB55",
870878
"comment": "Frameworks"
871879
}
872880
],

0 commit comments

Comments
 (0)
Please sign in to comment.