Unity 打包到XCode自動化設置參數


    [PostProcessBuild]
    public static void OnPostprocessBuild(BuildTarget buildTarget, string buildPath)
    {
        if (buildTarget != BuildTarget.iOS)
            return;

        string pbxProjPath = PBXProject.GetPBXProjectPath(buildPath);
        var pbxProject = new PBXProject();
        pbxProject.ReadFromString(File.ReadAllText(pbxProjPath));
        string targetGuid = pbxProject.GetUnityMainTargetGuid();
        string frameworkGuid = pbxProject.GetUnityFrameworkTargetGuid();


        // 設置關閉Bitcode
        pbxProject.SetBuildProperty(targetGuid, ENABLE_BITCODE_KEY, "NO");
        pbxProject.SetBuildProperty(frameworkGuid, ENABLE_BITCODE_KEY, "NO");

        // xcode archive filed
        var token = pbxProject.GetBuildPropertyForAnyConfig(targetGuid, "USYM_UPLOAD_AUTH_TOKEN");
        if (string.IsNullOrEmpty(token))
        {
            token = "FakeToken";
        }
        pbxProject.SetBuildProperty(targetGuid, USYM_UPLOAD_AUTH_TOKEN, token);
        pbxProject.SetBuildProperty(frameworkGuid, USYM_UPLOAD_AUTH_TOKEN, token);

        //添加系統庫(Unity默認會添加部分庫,不能添加重復的庫,否則會有問題)
        //例 
        pbxProject.AddFrameworkToProject(frameworkGuid, "CoreTelephony.framework", false);


        //添加tbd
        //例 
        string fileGuidSqlite = pbxProject.AddFile("usr/lib/libsqlite3.tbd", "Libraries/libsqlite3.tbd", PBXSourceTree.Sdk);

        //添加引用的資源 如 .bundle文件
        //例 
        string p = .bundle地址;

        string bun = pbxProject.AddFile(p, "名稱.bundle", PBXSourceTree.Absolute);
        pbxProject.AddFileToBuild(targetGuid,  bun);

        //修改Info.plist文件
        SetInfoPlist(buildPath);

        File.WriteAllText(pbxProjPath, pbxProject.WriteToString());

        UnityEngine.Debug.Log("PBXProject : ---->" + pbxProject.WriteToString());
    }

    public static void SetInfoPlist(string buildPath)
    {
        List<string> privacySensiticeData = new List<string>();

        PlistDocument plist = GetInfoPlist(buildPath);

        //選擇語言(字符串)
        plist.root.SetString("NSPhotoLibraryAddUsageDescription", "此App需要您的同意,才能保存圖片到您的相冊");
        plist.root.SetString("NSPhotoLibraryUsageDescription", "此App需要您的同意才能讀取媒體資料庫");
        //(bool值)
        plist.root.SetBoolean("ITSAppUsesNonExemptEncryption", false);

        //設置LSApplicationQueriesSchemes(數組)
        //例
        PlistElementArray loginChannelsArr;
        loginChannelsArr = plist.root.CreateArray("LSApplicationQueriesSchemes");
        loginChannelsArr.AddString("mqqapi");
        loginChannelsArr.AddString("mqq");

        //配置(字典)
        PlistElementDict plistDic;
        plistDic = plist.root.CreateDict("NSAppTransportSecurity");
        plistDic.SetBoolean("NSAllowsArbitraryLoads", true);

        // 添加 url scheme 
        PlistElementArray urlTypes = plist.root.CreateArray("CFBundleURLTypes");
        PlistElementDict wxUrl = urlTypes.AddDict();
        wxUrl.SetString("CFBundleTypeRole", "Editor");
        wxUrl.SetString("CFBundleURLName", "weixin");
        wxUrl.SetString("CFBundleURLSchemes", "wx...............");
        PlistElementArray wxUrlScheme = wxUrl.CreateArray("CFBundleURLSchemes");
        wxUrlScheme.AddString( "wx...............");

        plist.WriteToFile(GetInfoPlistPath(buildPath));
    }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM