Skip to content

Commit 6245e12

Browse files
committed
Merge pull request #9 from goya/master
Update to support escaped characters and weak linked frameworks
2 parents 2d6a0ee + 293ca2c commit 6245e12

10 files changed

+65
-18
lines changed

lib/pbxFile.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,9 @@ function pbxFile(filepath, opt) {
8080

8181
this.sourceTree = opt.sourceTree || defaultSourceTree(this);
8282
this.fileEncoding = opt.fileEncoding || fileEncoding(this);
83+
84+
if (opt.weak && opt.weak === true)
85+
this.settings = { ATTRIBUTES: ['Weak'] };
8386
}
8487

8588
module.exports = pbxFile;

lib/pbxProject.js

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -485,6 +485,7 @@ function pbxBuildFileObj(file) {
485485
obj.isa = 'PBXBuildFile';
486486
obj.fileRef = file.fileRef;
487487
obj.fileRef_comment = file.basename;
488+
if (file.settings) obj.settings = file.settings;
488489

489490
return obj;
490491
}
@@ -494,8 +495,10 @@ function pbxFileReferenceObj(file) {
494495

495496
obj.isa = 'PBXFileReference';
496497
obj.lastKnownFileType = file.lastType;
497-
obj.name = file.basename;
498-
obj.path = file.path;
498+
499+
obj.name = "\"" + file.basename + "\"";
500+
obj.path = "\"" + file.path + "\"";
501+
499502
obj.sourceTree = file.sourceTree;
500503

501504
if (file.fileEncoding)

test/addFramework.js

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -52,8 +52,8 @@ exports.addFramework = {
5252

5353
test.equal(fileRefEntry.isa, 'PBXFileReference');
5454
test.equal(fileRefEntry.lastKnownFileType, '"compiled.mach-o.dylib"');
55-
test.equal(fileRefEntry.name, 'libsqlite3.dylib');
56-
test.equal(fileRefEntry.path, 'usr/lib/libsqlite3.dylib');
55+
test.equal(fileRefEntry.name, '"libsqlite3.dylib"');
56+
test.equal(fileRefEntry.path, '"usr/lib/libsqlite3.dylib"');
5757
test.equal(fileRefEntry.sourceTree, 'SDKROOT');
5858

5959
test.done();
@@ -85,9 +85,22 @@ exports.addFramework = {
8585
test.equal(buildFileEntry.isa, 'PBXBuildFile');
8686
test.equal(buildFileEntry.fileRef, newFile.fileRef);
8787
test.equal(buildFileEntry.fileRef_comment, 'libsqlite3.dylib');
88+
test.equal(buildFileEntry.settings, undefined);
8889

8990
test.done();
9091
},
92+
'should add the PBXBuildFile object correctly /w weak linked frameworks': function (test) {
93+
var newFile = proj.addFramework('libsqlite3.dylib', { weak: true }),
94+
buildFileSection = proj.pbxBuildFileSection(),
95+
buildFileEntry = buildFileSection[newFile.uuid];
96+
97+
test.equal(buildFileEntry.isa, 'PBXBuildFile');
98+
test.equal(buildFileEntry.fileRef, newFile.fileRef);
99+
test.equal(buildFileEntry.fileRef_comment, 'libsqlite3.dylib');
100+
test.deepEqual(buildFileEntry.settings, { ATTRIBUTES: [ 'Weak' ] });
101+
102+
test.done();
103+
},
91104
'should add to the Frameworks PBXGroup': function (test) {
92105
var newLength = proj.pbxGroupByName('Frameworks').children.length + 1,
93106
newFile = proj.addFramework('libsqlite3.dylib'),

test/addHeaderFile.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -53,8 +53,8 @@ exports.addHeaderFile = {
5353
test.equal(fileRefEntry.isa, 'PBXFileReference');
5454
test.equal(fileRefEntry.fileEncoding, 4);
5555
test.equal(fileRefEntry.lastKnownFileType, 'sourcecode.c.h');
56-
test.equal(fileRefEntry.name, 'file.h');
57-
test.equal(fileRefEntry.path, 'file.h');
56+
test.equal(fileRefEntry.name, '"file.h"');
57+
test.equal(fileRefEntry.path, '"file.h"');
5858
test.equal(fileRefEntry.sourceTree, '"<group>"');
5959

6060
test.done();

test/addResourceFile.js

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -91,8 +91,8 @@ exports.addResourceFile = {
9191
test.equal(fileRefEntry.isa, 'PBXFileReference');
9292
test.equal(fileRefEntry.fileEncoding, undefined);
9393
test.equal(fileRefEntry.lastKnownFileType, '"wrapper.plug-in"');
94-
test.equal(fileRefEntry.name, 'assets.bundle');
95-
test.equal(fileRefEntry.path, 'Resources/assets.bundle');
94+
test.equal(fileRefEntry.name, '"assets.bundle"');
95+
test.equal(fileRefEntry.path, '"Resources/assets.bundle"');
9696
test.equal(fileRefEntry.sourceTree, '"<group>"');
9797

9898
test.done();
@@ -152,8 +152,8 @@ exports.addResourceFile = {
152152
test.equal(fileRefEntry.isa, 'PBXFileReference');
153153
test.equal(fileRefEntry.fileEncoding, undefined);
154154
test.equal(fileRefEntry.lastKnownFileType, '"wrapper.plug-in"');
155-
test.equal(fileRefEntry.name, 'assets.bundle');
156-
test.equal(fileRefEntry.path, 'Plugins/assets.bundle');
155+
test.equal(fileRefEntry.name, '"assets.bundle"');
156+
test.equal(fileRefEntry.path, '"Plugins/assets.bundle"');
157157
test.equal(fileRefEntry.sourceTree, '"<group>"');
158158
test.done();
159159
},

test/addSourceFile.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -89,8 +89,8 @@ exports.addSourceFile = {
8989
test.equal(fileRefEntry.isa, 'PBXFileReference');
9090
test.equal(fileRefEntry.fileEncoding, 4);
9191
test.equal(fileRefEntry.lastKnownFileType, 'sourcecode.c.objc');
92-
test.equal(fileRefEntry.name, 'file.m');
93-
test.equal(fileRefEntry.path, 'file.m');
92+
test.equal(fileRefEntry.name, '"file.m"');
93+
test.equal(fileRefEntry.path, '"file.m"');
9494
test.equal(fileRefEntry.sourceTree, '"<group>"');
9595

9696
test.done();

test/addStaticLibrary.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -123,8 +123,8 @@ exports.addStaticLibrary = {
123123

124124
test.equal(fileRefEntry.isa, 'PBXFileReference');
125125
test.equal(fileRefEntry.lastKnownFileType, 'archive.ar');
126-
test.equal(fileRefEntry.name, 'libGoogleAnalytics.a');
127-
test.equal(fileRefEntry.path, 'libGoogleAnalytics.a');
126+
test.equal(fileRefEntry.name, '"libGoogleAnalytics.a"');
127+
test.equal(fileRefEntry.path, '"libGoogleAnalytics.a"');
128128
test.equal(fileRefEntry.sourceTree, '"<group>"');
129129

130130
test.done();

test/pbxFile.js

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -165,3 +165,31 @@ exports['path'] = {
165165
test.done();
166166
}
167167
}
168+
169+
exports['settings'] = {
170+
'should not be defined by default': function (test) {
171+
var sourceFile = new pbxFile('social.framework');
172+
173+
test.equal(undefined, sourceFile.settings);
174+
test.done();
175+
},
176+
177+
'should be undefined if weak is false or non-boolean': function (test) {
178+
var sourceFile1 = new pbxFile('social.framework',
179+
{ weak: false });
180+
var sourceFile2 = new pbxFile('social.framework',
181+
{ weak: 'bad_value' });
182+
183+
test.equal(undefined, sourceFile1.settings);
184+
test.equal(undefined, sourceFile2.settings);
185+
test.done();
186+
},
187+
188+
'should be {ATTRIBUTES:["Weak"]} if weak linking specified': function (test) {
189+
var sourceFile = new pbxFile('social.framework',
190+
{ weak: true });
191+
192+
test.deepEqual({ATTRIBUTES:["Weak"]}, sourceFile.settings);
193+
test.done();
194+
}
195+
}

test/removeHeaderFile.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -77,8 +77,8 @@ exports.removeHeaderFile = {
7777
test.equal(fileRefEntry.isa, 'PBXFileReference');
7878
test.equal(fileRefEntry.fileEncoding, 4);
7979
test.equal(fileRefEntry.lastKnownFileType, 'sourcecode.c.h');
80-
test.equal(fileRefEntry.name, 'file.h');
81-
test.equal(fileRefEntry.path, 'file.h');
80+
test.equal(fileRefEntry.name, '"file.h"');
81+
test.equal(fileRefEntry.path, '"file.h"');
8282
test.equal(fileRefEntry.sourceTree, '"<group>"');
8383

8484
var deletedFile = proj.removeHeaderFile('Plugins/file.h'),

test/removeResourceFile.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -141,8 +141,8 @@ exports.removeResourceFile = {
141141
test.equal(fileRefEntry.isa, 'PBXFileReference');
142142
test.equal(fileRefEntry.fileEncoding, undefined);
143143
test.equal(fileRefEntry.lastKnownFileType, '"wrapper.plug-in"');
144-
test.equal(fileRefEntry.name, 'assets.bundle');
145-
test.equal(fileRefEntry.path, 'Resources/assets.bundle');
144+
test.equal(fileRefEntry.name, '"assets.bundle"');
145+
test.equal(fileRefEntry.path, '"Resources/assets.bundle"');
146146
test.equal(fileRefEntry.sourceTree, '"<group>"');
147147

148148
var deletedFile = proj.removeResourceFile('Resources/assets.bundle'),

0 commit comments

Comments
 (0)