ios - 在后处理中启用 Unity3D xCode 项目的功能

标签 ios xcode unity-game-engine post-processing

我有一个 Unity3D iOS 项目,我在其中使用 Game Center 和应用内购买(通过第三方插件),但是当我将 Unity3D 项目构建到 xCode 中时,在功能部分游戏中心和应用内购买被禁用.我需要在 PostProcessBuild 方法中启用它们。我尝试通过这段代码使用 xCodeApi:

   string projPath = PBXProject.GetPBXProjectPath(pathToBuiltProject);
   PBXProject proj = new PBXProject();

   proj.ReadFromString(File.ReadAllText(projPath));
   string target = proj.TargetGuidByName("Unity-iPhone");

   proj.AddCapability (target, PBXCapabilityType.GameCenter);
   proj.AddCapability (target, PBXCapabilityType.InAppPurchase);

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

但是在此之后 xCode 无法打开创建的项目(它只是立即崩溃)。如何在不在 xCode 中手动设置的情况下添加这两个功能?

最佳答案

这是可以实现的新方法:

using UnityEditor;
using UnityEditor.Build;
using UnityEditor.Build.Reporting;
using UnityEditor.iOS.Xcode;

public class CapabilityPostprocessBuild : IPostprocessBuildWithReport
{
    public int callbackOrder => 999;

    public void OnPostprocessBuild(BuildReport report)
    {
        OnPostprocessBuild(report.summary.platform, report.summary.outputPath);
    }

    public void OnPostprocessBuild(BuildTarget buildTarget, string path)
    {
        if (buildTarget == BuildTarget.iOS)
        {
            string projPath = PBXProject.GetPBXProjectPath(path);

            PBXProject proj = new PBXProject();
            proj.ReadFromFile(projPath);

            ProjectCapabilityManager manager = new ProjectCapabilityManager(
                projPath,
                "Entitlements.entitlements",
                targetGuid: proj.GetUnityMainTargetGuid()
            );

            manager.AddiCloud(true, false, null);

            manager.WriteToFile();
        }
    }
}

关于ios - 在后处理中启用 Unity3D xCode 项目的功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44311313/

相关文章:

iphone - iOS 应用程序在线程 0 中崩溃

ios - Xcode:@1x 的图像尺寸从未被使用过

ios - 该证书由未知机构签署

unity-game-engine - Unity - 盒子碰撞器无法正常工作

ios - 在一个 ViewController 中创建类的实例并使用它在另一个中显示数据

ios - 加载 .xib 文件时 Cocoapod 编译失败

ios - 使用推送通知快速打开特定 View

unity-game-engine - Unity即时模拟游戏

c# - 为什么不调用OnDrop? (统一)

ios - 组织地理引用数据的最佳方式是什么?