From c05ae0a1d26ed0884fa4ce887cffa4de9a740afb Mon Sep 17 00:00:00 2001 From: Marco Saia Date: Fri, 31 May 2024 12:40:40 +0200 Subject: [PATCH 1/2] Added support for 'alwaysOutOfDate' PBX Shell Script property --- lib/pbxProject.js | 4 ++++ test/addBuildPhase.js | 22 ++++++++++++++++++++++ 2 files changed, 26 insertions(+) diff --git a/lib/pbxProject.js b/lib/pbxProject.js index 41bc398..330a986 100644 --- a/lib/pbxProject.js +++ b/lib/pbxProject.js @@ -1621,6 +1621,10 @@ function pbxShellScriptBuildPhaseObj (obj, options, phaseName) { obj.runOnlyForDeploymentPostprocessing = 1; } + if (options.alwaysOutOfDate !== null) { + obj.alwaysOutOfDate = options.alwaysOutOfDate; + } + return obj; } diff --git a/test/addBuildPhase.js b/test/addBuildPhase.js index d3249b9..1948814 100644 --- a/test/addBuildPhase.js +++ b/test/addBuildPhase.js @@ -197,4 +197,26 @@ describe('addBuildPhase', () => { const buildPhase = proj.addBuildPhase([], 'PBXShellScriptBuildPhase', 'Run a script', proj.getFirstTarget().uuid, options).buildPhase; assert.equal(buildPhase.runOnlyForDeploymentPostprocessing, 1); }); + + it('should add the PBXBuildPhase with alwaysOutOfDate property', () => { + const options = { + shellPath: '/bin/sh', + shellScript: 'test', + alwaysOutOfDate: true + }; + + const buildPhase = proj.addBuildPhase([], 'PBXShellScriptBuildPhase', 'Run a script', proj.getFirstTarget().uuid, options).buildPhase; + assert.equal(buildPhase.shellPath, '/bin/sh'); + assert.equal(buildPhase.shellScript, '"test"'); + assert.equal(buildPhase.alwaysOutOfDate, 1); + }); + + it('should add the PBXBuildPhase without alwaysOutOfDate property', () => { + const options = { shellPath: '/bin/sh', shellScript: 'test' }; + + const buildPhase = proj.addBuildPhase([], 'PBXShellScriptBuildPhase', 'Run a script', proj.getFirstTarget().uuid, options).buildPhase; + assert.equal(buildPhase.shellPath, '/bin/sh'); + assert.equal(buildPhase.shellScript, '"test"'); + assert.equal(buildPhase.alwaysOutOfDate, null); + }); }); From 0bb75ce696a6a40371be074ac8b2845fa4dc05f3 Mon Sep 17 00:00:00 2001 From: Erisu Date: Thu, 18 Jun 2026 12:47:02 +0900 Subject: [PATCH 2/2] feat(alwaysOutOfDate): any truthy value to hard set to 1 --- lib/pbxProject.js | 6 ++++-- test/addBuildPhase.js | 4 ++-- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/lib/pbxProject.js b/lib/pbxProject.js index 330a986..25bd8f3 100644 --- a/lib/pbxProject.js +++ b/lib/pbxProject.js @@ -1621,8 +1621,10 @@ function pbxShellScriptBuildPhaseObj (obj, options, phaseName) { obj.runOnlyForDeploymentPostprocessing = 1; } - if (options.alwaysOutOfDate !== null) { - obj.alwaysOutOfDate = options.alwaysOutOfDate; + // By default, alwaysOutOfDate is not set and treated as false. + // Any truthy value, it will be set to 1, including any non-empty strings. + if (options.alwaysOutOfDate) { + obj.alwaysOutOfDate = 1; } return obj; diff --git a/test/addBuildPhase.js b/test/addBuildPhase.js index 1948814..5d1ace2 100644 --- a/test/addBuildPhase.js +++ b/test/addBuildPhase.js @@ -208,7 +208,7 @@ describe('addBuildPhase', () => { const buildPhase = proj.addBuildPhase([], 'PBXShellScriptBuildPhase', 'Run a script', proj.getFirstTarget().uuid, options).buildPhase; assert.equal(buildPhase.shellPath, '/bin/sh'); assert.equal(buildPhase.shellScript, '"test"'); - assert.equal(buildPhase.alwaysOutOfDate, 1); + assert.strictEqual(buildPhase.alwaysOutOfDate, 1); }); it('should add the PBXBuildPhase without alwaysOutOfDate property', () => { @@ -217,6 +217,6 @@ describe('addBuildPhase', () => { const buildPhase = proj.addBuildPhase([], 'PBXShellScriptBuildPhase', 'Run a script', proj.getFirstTarget().uuid, options).buildPhase; assert.equal(buildPhase.shellPath, '/bin/sh'); assert.equal(buildPhase.shellScript, '"test"'); - assert.equal(buildPhase.alwaysOutOfDate, null); + assert.strictEqual(buildPhase.alwaysOutOfDate, undefined); }); });