Фон:
- Использование Unity 2018.3.5f1 для сборки проекта iOS
- Использование атрибута PostProcessBuild для изменения info.plist
- Код работал в другом проекте вUnity 2018.2.1f1
Мне кажется, я делаю то, что предлагается в этой статье: От Unity до iOS, как идеально автоматизировать фреймворки, настройки и списки?
Я подтвердил, что вызвана функция PostBuildProcess и изменен список info.plist.Я регистрирую вывод, и он кажется правильным.Я также сохранил 2-й файл в своем коде (info2.plist), и он содержит все ожидаемые изменения.Однако исходный файл (info.plist) перезаписывается другими значениями.
Кажется, что Unity перезаписывает файл info.plist после запуска функций PostProcessBuild.
Код находится в папке / Assets / Editor в проекте Unity.
Вот одна из моих функций:
[PostProcessBuild(1)]
public static void ChangeXcodePlist(BuildTarget buildTarget, string pathToBuiltProject)
{
if (buildTarget == BuildTarget.iOS)
{
// Get plist file and read it.
string plistPath = pathToBuiltProject + "/Info.plist";
Debug.Log("In the ChangeXCodePlist, path is: " + plistPath);
PlistDocument plist = new PlistDocument();
plist.ReadFromString(File.ReadAllText(plistPath));
Debug.Log("In the ChangeXCodePlist");
// Get root
PlistElementDict rootDict = plist.root;
// Required when using camera for demos, e.g. AR demos.
rootDict.SetString("NSCameraUsageDescription", "Uses the camera for Augmented Reality");
// Required when using photo library in demo (i.e. reading library).
rootDict.SetString("NSPhotoLibraryUsageDescription", "${PRODUCT_NAME} photo use");
// Required when adding images to photo library in demos.
rootDict.SetString("NSPhotoLibraryAddUsageDescription", "${PRODUCT_NAME} photo use");
//ITSAppUsesNonExemptEncryption, this value is required for release in TestFlight.
rootDict.SetBoolean("ITSAppUsesNonExemptEncryption", false);
Debug.Log("PLIST: " + plist.WriteToString());
// Write to file
File.WriteAllText(plistPath, plist.WriteToString());
File.WriteAllText(pathToBuiltProject + "/info2.plist", plist.WriteToString());
}
}