ios - 为iOS编译时,如何让Unity自动添加“使用Apple登录”功能?

标签 ios unity3d post-processing capability sign-in-with-apple

我已经使用Google搜索了几个小时,并尝试了该代码的所有变体,但我一直无法自动添加“使用Apple登录”功能。

我已经尝试过这个Github项目的示例:
https://github.com/lupidan/apple-signin-unity/blob/master/AppleAuth/Editor/ProjectCapabilityManagerExtension.cs

我一直在关注这些帖子:
https://forum.unity.com/threads/how-to-put-ios-entitlements-file-in-a-unity-project.442277/

https://answers.unity.com/questions/1224123/enable-push-notification-in-xcode-project-by-defau.html

没有此功能的授权文件如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
</dict>
</plist>

具有此功能的一个看起来像这样:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>com.apple.developer.applesignin</key>
    <array>
        <string>Default</string>
    </array>
</dict>
</plist>

我试图用下面的代码来评价:
proj.AddBuildProperty(target, "SystemCapabilities", "{com.apple.developer.applesignin = [Default];}");
proj.AddCapability(target, PBXCapabilityType.SignInWithApple, relativeDestination, true);

但是这些都没有修改权利文件或添加功能。

我为此使用了ProjectCapabilityManager:
ProjectCapabilityManager capabilityManager = new ProjectCapabilityManager(buildPath, filename, targetName);
capabilityManager.AddSignInWithApple();
capabilityManager.WriteToFile();

但是我在控制台中收到一条错误消息,指出对buildPath的访问被拒绝(由OnPostProcessBuild()提供)

我真的可以使用一些帮助。

最佳答案

我在Unity3D 5.6.7f上,这是我使其工作的结果:

  • 从Unity官方网站下载XcodeAPI
    bitbucket repositry
  • 打开CapabilityManager.cs并添加以下代码
    /// <summary>
    /// Add Sign In With Apple capability to the project.
    /// </summary>
    public void AddSignInWithApple()
    {
        var arr = (GetOrCreateEntitlementDoc().root[SignInWithAppleEntitlements.Key] = new PlistElementArray()) as PlistElementArray;
        arr.values.Add(new PlistElementString("Default"));
    }
    

    还有这个
    internal class SignInWithAppleEntitlements
    {
        internal static readonly string Key = "com.apple.developer.applesignin";
    }
    

    现在,您可以使用类似这样的后期处理功能添加“使用Apple登录”功能
    ProjectCapabilityManager projCapManager = new ProjectCapabilityManager(projectPath,"YouAppName.entitlements","Unity-iPhone");
    projCapManager.AddSignInWithApple();
    
  • 关于ios - 为iOS编译时,如何让Unity自动添加“使用Apple登录”功能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61310717/

    相关文章:

    ios - Ibeacon和建议的应用程序

    c# - Unity LineRenderer - 无法设置位置

    c# - 更改AudioSource音量

    OpenGL 帧缓冲区后处理

    css - 用不寻常的字符模板化 css 伪命名空间,然后后处理为正常字符。任何缺点/完全不允许的问题?

    objective-c - UITableViewCell 的 backgroundView 重叠 contentView

    ios - div 不应该在 iPhone 上的另一个 div 之上

    ios - 在调试 session 期间将矢量保存到文件 (Xcode)

    c# - 如何在 Android 构建的 Unity 上读取文本文件?

    user-interface - Unity - 对所有 UI 元素应用后处理效果