一、 获取 PBXProject PBXProject的很多操作都是通过guid的
var pbxProject = new PBXProject();
二 、获取projectPath
var projectPath = PBXProject.GetPBXProjectPath(iosProjectPath);
三 、读取pbxProject 文件
pbxProject.ReadFromFile(projectPath);
四 、 读取Unity-iPhone"对应的target和UnityFramework
GetUnityMainTargetGuid是获取XCode工程中"Unity-iPhone"对应的target,GetUnityFrameworkTargetGuid则对应"UnityFramework"
var mainTargetGuid = pbxProject.GetUnityMainTargetGuid();//
//这个对应target中的Unity-iPhone
var frameworkTargetGuid = pbxProject.GetUnityFrameworkTargetGuid();//
//这个对应target中UnityFramework
五 、添加
pbxProject.AddBuildProperty(mainTargetGuid, "OTHER_LDFLAGS", "-ObjC");
pbxProject.AddBuildProperty(frameworkTargetGuid, "OTHER_LDFLAGS", "-ObjC");
pbxProject.SetTeamId(mainTargetGuid, "");
pbxProject.SetTeamId(frameworkTargetGuid, "");
pbxProject.SetBuildProperty(mainTargetGuid, "ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES", "YES");
pbxProject.SetBuildProperty(frameworkTargetGuid, "ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES", "NO");
pbxProject.SetBuildProperty(mainTargetGuid, "GCC_ENABLE_OBJC_EXCEPTIONS", "YES");
pbxProject.SetBuildProperty(frameworkTargetGuid, "GCC_ENABLE_OBJC_EXCEPTIONS", "YES");
pbxProject.SetBuildProperty(mainTargetGuid, "GCC_C_LANGUAGE_STANDARD", "gnu11");
pbxProject.SetBuildProperty(frameworkTargetGuid, "GCC_C_LANGUAGE_STANDARD", "gnu11");
pbxProject.AddFrameworkToProject(frameworkTargetGuid, "Photos.framework", false);
// info.plist 设置
var plistPath = Path.Combine(iosProjectPath, "Info.plist");
var plist = new PlistDocument();
plist.ReadFromString(File.ReadAllText(plistPath, Encoding.ASCII));
plist.root.values.Add("NSPhotoLibraryUsageDescription", new PlistElementString("We will use this permission if the child sends lessons and feedback through the album."));
plist.root.values.Add("ITSAppUsesNonExemptEncryption", new PlistElementBoolean(false));
AddPlistElementDict(plist,"NSAppTransportSecurity","NSAllowsArbitraryLoads",new PlistElementBoolean(true));
六、操作完后要写回文件,否则无效
File.WriteAllText(plistPath, plist.WriteToString());
七 、总结
string pbxProjectPath = PBXProject.GetPBXProjectPath(path);
pbxProject = new PBXProject();
pbxProject.ReadFromString(File.ReadAllText(pbxProjectPath));
mainTarget = pbxProject.GetUnityMainTargetGuid();//这个对应target中的Unity-iPhone
frameworkTarget = pbxProject.GetUnityFrameworkTargetGuid();//这个对应target中UnityFramework
//...
//你的操作
//...
pbxProject.WriteToFile(pbxProjectPath); //操作完后要写回文件,否则无效