在为 iOS 编译时,如何让 Unity 自动添加 Sign In With Apple 功能?

Posted

技术标签:

【中文标题】在为 iOS 编译时,如何让 Unity 自动添加 Sign In With Apple 功能?【英文标题】:How can I get Unity to automatically add the Sign In With Apple capability when compiling for iOS? 【发布时间】:2020-08-02 06:17:45 【问题描述】:

我已经在谷歌上搜索了几个小时并尝试了我能想到的所有代码变体,但我无法自动添加 Sign In With 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() 提供)

我真的需要一些帮助。

【问题讨论】:

【参考方案1】:

我正在使用 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();

【讨论】:

我已经关注了这个,但是我没有为 Release 和 Debug 启用 SignInWithApple 功能,知道吗?具有后处理脚本的功能:i.stack.imgur.com/VjsaN.png 手动启用的功能:i.stack.imgur.com/0t2OA.png

以上是关于在为 iOS 编译时,如何让 Unity 自动添加 Sign In With Apple 功能?的主要内容,如果未能解决你的问题,请参考以下文章

在为 iOS 编译语音演示应用程序时,是不是有人遇到 Xcode 构建错误?

使用 P/Invoke 从 Unity 高效地与非托管代码对话

Unity System 和 Newtonsoft 库在为 android 构建时不起作用

在为 iOS 编写 Bluemix Cordova 应用程序时发生位码错误

如何在为服务器开发但不重新编译 webpack 客户端配置时使用 nodemon?

如何在为音频会议混合音频时自动增益控制 (AGC)