upsertEntitlement function
Future<void>
upsertEntitlement(
{ - required String key,
- required XmlNode valueNode,
})
Implementation
Future<void> upsertEntitlement({
required String key,
required XmlNode valueNode,
}) async {
final file = File('ios/Runner/Runner.entitlements');
if (!file.existsSync()) return;
final document = XmlDocument.parse(await file.readAsString());
final dict = document.findAllElements('dict').first;
final children = dict.children;
XmlElement? existingKey;
for (var node in children) {
if (node is XmlElement && node.name.local == 'key' && node.innerText == key) {
existingKey = node;
break;
}
}
if (existingKey != null) {
print('$key already exists → updating');
final index = children.indexOf(existingKey);
if (index + 1 < children.length) {
children.removeAt(index + 1);
}
children.insert(index + 1, valueNode);
} else {
print('Adding $key');
dict.children.add(XmlElement(XmlName('key'), [], [XmlText(key)]));
dict.children.add(valueNode);
}
await file.writeAsString(document.toXmlString(pretty: true));
}