This commit is contained in:
Alex
2025-12-11 21:01:00 +11:00
parent b573a25203
commit fd2d420320
3 changed files with 119 additions and 1 deletions

View File

@@ -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

View File

@@ -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;

View File

@@ -0,0 +1,5 @@
{
"name": "addSPMDependenciesToMainTarget",
"version": "1.0.0",
"main": "app.plugin.js"
}