apache / apache/cordova-node-xcode
pbxProject.prototype.addFramework: automatically create Frameworks Group if it does not exist
- Langage dominant
- JavaScript
- Étoiles
- 217
- Forks
- 102
- Merge moyen
- 2 j 3 h
- PR mergées (30 j)
- 6
Description
**This is a feature proposal**
**Initial Situation**:
Your xcode project tree looks like this:

You have a Xcode project without a `Framworks` group and you want to add a new framework using `pbxProject.prototype.addFramework`.
**Current behaviour**:
The `Frameworks` group is created but not added to the `mainGroup` of the project which references all files (that are not part of a subgroup) and all groups (that are no subgroups).
If you open the updated xcode project with xcode you see the following:

This is because xcode cannot find a reference to the `Frameworks` group on the `mainGroup` and therefore "autofixes" the project by adding the library added with `pbxProject.prototype.addFramework` to a newly generated group `Recovered References`.
**Expected behaviour**:
The `Framework` group is created and also automatically added to the `mainGroup`.
When you open the project in xcode it should look like this:

**Current workaround:**
Add the `Frameworks` group to `mainGroup`manually:
```js
const project = xcode.project(projectPath);
project.parseSync();
project.addFramework(path.resolve(frameworksDirectory, 'GoogleInterchangeUtilities.framework'), {
customFramework: true,
embed: true,
link: true,
});
const mainProject = project.getPBXGroupByKey(project.getFirstProject().firstProject.mainGroup);
if (!mainProject.children.some(children => children.comment === 'Frameworks')) {
const [groupKey] = Object.entries(project.hash.project.objects['PBXGroup']).find(
([, group]) => group.name === 'Frameworks',
);
project.addToPbxGroup(groupKey, project.getFirstProject().firstProject.mainGroup);
}
```
If you are okay with this feature proposal I would love to implement it!
Guide de contribution
Ouvrir le guide de contribution
Piste de recherche
Commencez par pbxProject.prototype.addFramework et suivez la manière dont le groupe Frameworks et project mainGroup sont gérés. Utilisez le contournement de l’issue comme référence comportementale. La tâche est terminée lorsqu’un groupe Frameworks manquant est à la fois créé et référencé par mainGroup, afin que Xcode ne place pas le framework dans Recovered References.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Évaluation
- Stack technique
- ios, javascript, nodejs
- Domaine
- mobile
- Type d'issue
- Fonctionnalité
- Difficulté
- 3/5
- Temps estimé
- 1-2 jours
- Activité
- À l'abandon
- Clarté
- Plutôt claire
- Accessibilité débutants
- 42/100