美文网首页
Unity Xcode后处理

Unity Xcode后处理

作者: CERI_CHANNEL | 来源:发表于2024-07-04 19:20 被阅读0次

获取Unity-iPhone

string unityIphone = proj.GetUnityMainTargetGuid();

获取UnityFramework

string unityFramework = proj.GetUnityFrameworkTargetGuid();

添加系统库 (proj:PBXProject)

proj.AddFrameworkToProject(unityIphone, "libc++.tbd", false);

修改Info.plist文件

string plistPath = Path.Combine(pathToBuildProject, "info.plist");
PlistDocument plist = new PlistDocument();
plist.ReadFromFile(plistPath);

plist.root.SetString
plist.root.SetBoolean
PlistElementArray array 
PlistElementDict dict
...

File.WriteAllText(plistPath, plist.WriteToString());

添加到 EmbedFrameworks

UnityEditor.iOS.Xcode.Extensions.PBXProjectExtensions.AddFileToEmbedFrameworks(proj, unityFramework, fileGuid);

添加到 Copy Resources

proj.AddFileToBuildSection(unityIphone, proj.GetResourcesBuildPhaseByTarget(unityIphone), fileGuid);

修改 Capability

var capabilityManager = new ProjectCapabilityManager(projectPath, entitlementsPath, "Unity-iPhone", unityIphone);
capabilityManager.AddInAppPurchase();//内购
capabilityManager.AddPushNotifications(true);//推送
...

修改 BuildSettings 中的配置

proj.SetBuildProperty(unityIphone, "ENABLE_BITCODE", "NO");
proj.AddBuildProperty(unityIphone, "LIBRARY_SEARCH_PATHS", "$(SDKROOT)/usr/lib/swift");
...

修改第三方库 Weak -> Optional

/// <summary>
    /// 修改第三方Framework Weak->Optional
    /// </summary>
    public static void EditPBXProjFileToAddFrameworkWeak(string path, string[] frameworkNames)
    {
        const string INSERT_STR = " platformFilter = ios; settings = {ATTRIBUTES = (Weak, ); };";
        const string SEARCH_FLAG_0_FORMAT = "{0}.framework in Frameworks";
        const string SEARCH_FLAG_1 = "= {isa = PBXBuildFile; fileRef =";
        const string LINE_END_FLAG = " };";
        var lines = File.ReadAllLines(path);
        foreach (var frameworkName in frameworkNames)
        {
            var searchFlag0 = string.Format(SEARCH_FLAG_0_FORMAT, frameworkName);
            for (int i = 0; i < lines.Length; i++)
            {
                var line = lines[i];
                if (line.Contains(searchFlag0) && line.Contains(SEARCH_FLAG_1) && !line.Contains(INSERT_STR))
                {
                    //就是他妈的这个
                    var insertIndex = line.LastIndexOf(LINE_END_FLAG);
                    var newLine = line.Insert(insertIndex, INSERT_STR);
                    lines[i] = newLine;
                }
            }
        }
        File.WriteAllLines(path, lines);
    }

苹果登录

/// <summary>
    /// 添加苹果登录
    /// </summary>
    private static void AddSignInWithApple(ProjectCapabilityManager manager)
    {
        var managerType = typeof(ProjectCapabilityManager);
        var capabilityTypeType = typeof(PBXCapabilityType);

        var projectField = managerType.GetField("project", NonPublicInstanceBinding);
        var targetGuidField = managerType.GetField("m_TargetGuid", NonPublicInstanceBinding);
        var entitlementFilePathField = managerType.GetField("m_EntitlementFilePath", NonPublicInstanceBinding);
        var getOrCreateEntitlementDocMethod = managerType.GetMethod("GetOrCreateEntitlementDoc", NonPublicInstanceBinding);
        var constructorInfo = capabilityTypeType.GetConstructor(
            NonPublicInstanceBinding,
            null,
            new[] { typeof(string), typeof(bool), typeof(string), typeof(bool) },
            null);

        if (projectField == null || targetGuidField == null || entitlementFilePathField == null ||
            getOrCreateEntitlementDocMethod == null || constructorInfo == null)
            throw new Exception("Can't Add Sign In With Apple programatically in this Unity version");

        var entitlementDoc = getOrCreateEntitlementDocMethod.Invoke(manager, new object[] { }) as PlistDocument;
        if (entitlementDoc != null)
        {
            var plistArray = new PlistElementArray();
            plistArray.AddString(DefaultAccessLevel);
            entitlementDoc.root[EntitlementsArrayKey] = plistArray;
        }
    }

相关文章

网友评论

      本文标题:Unity Xcode后处理

      本文链接:https://www.haomeiwen.com/subject/vrqwcjtx.html