From fd2d420320f1be8e9810abaa332c99a952042045 Mon Sep 17 00:00:00 2001 From: Alex <111128610+Alexk2309@users.noreply.github.com> Date: Thu, 11 Dec 2025 21:01:00 +1100 Subject: [PATCH] WIP --- app.json | 11 +- .../app.plugin.js | 104 ++++++++++++++++++ .../package.json | 5 + 3 files changed, 119 insertions(+), 1 deletion(-) create mode 100644 plugins/addSPMDependenciesToMainTarget/app.plugin.js create mode 100644 plugins/addSPMDependenciesToMainTarget/package.json diff --git a/app.json b/app.json index 5d4e9f4a..9eb5aff0 100644 --- a/app.json +++ b/app.json @@ -133,7 +133,16 @@ ["./plugins/withChangeNativeAndroidTextToWhite.js"], ["./plugins/withAndroidManifest.js"], ["./plugins/withTrustLocalCerts.js"], - ["./plugins/withGradleProperties.js"] + ["./plugins/withGradleProperties.js"], + [ + "./plugins/addSPMDependenciesToMainTarget", + { + "version": "0.40.0", + "repositoryUrl": "https://github.com/Alexk2309/mpvkit-private", + "repoName": "mpvkit-private", + "productName": "MPVKit" + } + ] ], "experiments": { "typedRoutes": true diff --git a/plugins/addSPMDependenciesToMainTarget/app.plugin.js b/plugins/addSPMDependenciesToMainTarget/app.plugin.js new file mode 100644 index 00000000..4c53a161 --- /dev/null +++ b/plugins/addSPMDependenciesToMainTarget/app.plugin.js @@ -0,0 +1,104 @@ +const { withXcodeProject } = require("@expo/config-plugins"); + +const addSPMDependenciesToMainTarget = (config, options) => + withXcodeProject(config, (config) => { + const { version, repositoryUrl, repoName, productName } = options; + const xcodeProject = config.modResults; + + // update XCRemoteSwiftPackageReference + const spmReferences = + xcodeProject.hash.project.objects.XCRemoteSwiftPackageReference; + + if (!spmReferences) { + xcodeProject.hash.project.objects.XCRemoteSwiftPackageReference = {}; + } + + const packageReferenceUUID = xcodeProject.generateUuid(); + + xcodeProject.hash.project.objects.XCRemoteSwiftPackageReference[ + `${packageReferenceUUID} /* XCRemoteSwiftPackageReference "${repoName}" */` + ] = { + isa: "XCRemoteSwiftPackageReference", + repositoryURL: repositoryUrl, + requirement: { + kind: "upToNextMajorVersion", + minimumVersion: version, + }, + }; + + // update XCSwiftPackageProductDependency + const spmProducts = + xcodeProject.hash.project.objects.XCSwiftPackageProductDependency; + + if (!spmProducts) { + xcodeProject.hash.project.objects.XCSwiftPackageProductDependency = {}; + } + + const packageUUID = xcodeProject.generateUuid(); + + xcodeProject.hash.project.objects.XCSwiftPackageProductDependency[ + `${packageUUID} /* ${productName} */` + ] = { + isa: "XCSwiftPackageProductDependency", + // from step before + package: `${packageReferenceUUID} /* XCRemoteSwiftPackageReference "${repoName}" */`, + productName: productName, + }; + + // update PBXProject + const projectId = Object.keys( + xcodeProject.hash.project.objects.PBXProject, + ).at(0); + + if ( + !xcodeProject.hash.project.objects.PBXProject[projectId].packageReferences + ) { + xcodeProject.hash.project.objects.PBXProject[ + projectId + ].packageReferences = []; + } + + xcodeProject.hash.project.objects.PBXProject[projectId].packageReferences = + [ + ...xcodeProject.hash.project.objects.PBXProject[projectId] + .packageReferences, + `${packageReferenceUUID} /* XCRemoteSwiftPackageReference "${repoName}" */`, + ]; + + // update PBXBuildFile + const frameworkUUID = xcodeProject.generateUuid(); + + xcodeProject.hash.project.objects.PBXBuildFile[`${frameworkUUID}_comment`] = + `${productName} in Frameworks`; + xcodeProject.hash.project.objects.PBXBuildFile[frameworkUUID] = { + isa: "PBXBuildFile", + productRef: packageUUID, + productRef_comment: productName, + }; + + // update PBXFrameworksBuildPhase + const buildPhaseId = Object.keys( + xcodeProject.hash.project.objects.PBXFrameworksBuildPhase, + ).at(0); + + if ( + !xcodeProject.hash.project.objects.PBXFrameworksBuildPhase[buildPhaseId] + .files + ) { + xcodeProject.hash.project.objects.PBXFrameworksBuildPhase[ + buildPhaseId + ].files = []; + } + + xcodeProject.hash.project.objects.PBXFrameworksBuildPhase[ + buildPhaseId + ].files = [ + ...xcodeProject.hash.project.objects.PBXFrameworksBuildPhase[buildPhaseId] + .files, + `${frameworkUUID} /* ${productName} in Frameworks */`, + ]; + + return config; + }); + +module.exports = addSPMDependenciesToMainTarget; diff --git a/plugins/addSPMDependenciesToMainTarget/package.json b/plugins/addSPMDependenciesToMainTarget/package.json new file mode 100644 index 00000000..3008e7e7 --- /dev/null +++ b/plugins/addSPMDependenciesToMainTarget/package.json @@ -0,0 +1,5 @@ +{ + "name": "addSPMDependenciesToMainTarget", + "version": "1.0.0", + "main": "app.plugin.js" +}