Unity Cloud Build:发布导出方法

时间:2016-02-04 20:18:24

标签: c# ios .net unity3d

问题:

我似乎无法为Unity云构建的帖子导出方法找出正确的签名。根据文件:

  

您希望我们调用的公共静态方法的完全限定名称   在我们完成Unity构建过程之后(但在Xcode之前)。对于   示例:ClassName.CoolMethod或NameSpace.ClassName.CoolMethod。没有   尾随括号,它不能与你的名字相同   出口前方法!此方法必须接受字符串参数,即   将收到导出的Unity播放器(或Xcode项目)的路径   在iOS的情况下。)

这是我的代码:

 public static void OnPostprocessDevBuildIOS(string ExportPath)
    {
        var projPath = ExportPath + "/Unity-iPhone.xcodeproj/project.pbxproj";

        var proj = new PBXProject();
        var nativeTarget =
            proj.TargetGuidByName(PBXProject.GetUnityTargetName());
        var testTarget =
            proj.TargetGuidByName(PBXProject.GetUnityTestTargetName());
        string[] buildTargets = {nativeTarget, testTarget};

        proj.ReadFromString(File.ReadAllText(projPath));
        proj.SetBuildProperty(buildTargets, "ENABLE_BITCODE", "NO");
        File.WriteAllText(projPath, proj.WriteToString());
    }

这是错误:

enter image description here

我尝试了多种测试方法签名,似乎无法正常工作。我甚至尝试过一种记录路径的方法。

其他信息:

  • Unity版本:5.3.1f
  • Unity Cloud Build:5.3.1f
  • 目标:iOS 8.0 +

此外,我的云构建设置脚本根据需要位于编辑器文件夹中。

enter image description here

好的,所以我得到了bitCode禁用后期处理以使用以下代码,但仅限于我手动构建时。当我从云构建构建时,没有错误,应用程序在启动屏幕上冻结。当我从本地机器构建时,应用程序运行正常。

[PostProcessBuild]
public static void OnPostprocessBuild(BuildTarget buildTarget, string path)
{
    if (buildTarget == BuildTarget.iOS)
    {
        string projPath = path + "/Unity-iPhone.xcodeproj/project.pbxproj";
        PBXProject proj = new PBXProject();
        proj.ReadFromString(File.ReadAllText(projPath));

        string nativeTarget = proj.TargetGuidByName(PBXProject.GetUnityTargetName());
        string testTarget = proj.TargetGuidByName(PBXProject.GetUnityTestTargetName());
        string[] buildTargets = new string[]{nativeTarget, testTarget};

        proj.SetBuildProperty(buildTargets, "ENABLE_BITCODE", "NO");
        File.WriteAllText(projPath, proj.WriteToString());
    }
}

2 个答案:

答案 0 :(得分:0)

我也有同样的问题"闪屏卡住"发布后...... 我解决了这个问题。请使用以下代码。 在Unity 5.4.1p2和Xcode 7.3中测试。

using UnityEngine;
using System.Collections;
using UnityEditor;
using System.IO;
using UnityEditor.Callbacks;
#if UNITY_IOS
using UnityEditor.iOS.Xcode;
#endif

public class Postprocessor : AssetPostprocessor
{   
#if UNITY_IOS
    [PostProcessBuild]
    public static void OnPostprocessBuild(BuildTarget buildTarget, string path)
    {
        if (buildTarget == BuildTarget.iOS)
        {
            string projPath = path + "/Unity-iPhone.xcodeproj/project.pbxproj";

            PBXProject proj = new PBXProject();
            proj.ReadFromString(File.ReadAllText(projPath));

            string target = proj.TargetGuidByName("Unity-iPhone");

            proj.SetBuildProperty(target, "ENABLE_BITCODE", "false");

            File.WriteAllText(projPath, proj.WriteToString());



            // Add url schema to plist file
            string plistPath = path + "/Info.plist";
            PlistDocument plist = new PlistDocument();
            plist.ReadFromString(File.ReadAllText(plistPath));

            // Get root
            PlistElementDict rootDict = plist.root;
            rootDict.SetBoolean("UIRequiresFullScreen",true);
            plist.WriteToFile(plistPath);
        }
    }
#endif
}

答案 1 :(得分:-1)

实际上总是调用OnPostprocessBuild,因此您不必在post export方法字段中放置任何内容,该字段是为更具体的方法设计的。