在为 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 应用程序时发生位码错误