flyingwitch
@flyingwitch

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

Unity6でアッSign In With Apple SDKが使用できません。

解決したいこと

Unity 6000.0.023f1バージョンをインストールしました。

Sign In With Apple SDKをインストールした後、ビルドを試みましたが、以下のようなエラーメッセージが出ました。

発生している問題・エラー

Exception: Can't Add Sign In With Apple programatically in this Unity version
AppleAuth.Editor.ProjectCapabilityManagerExtension.AddSignInWithAppleWithCompatibility (UnityEditor.iOS.Xcode.ProjectCapabilityManager manager, System.String unityFrameworkTargetGuid) (at Assets/AppleAuth/Editor/ProjectCapabilityManagerExtension.cs:65)
AppleAuthSample.Editor.SignInWithApplePostprocessor.OnPostProcessBuild (UnityEditor.BuildTarget target, System.String path) (at Assets/AppleAuthSample/Editor/SignInWithApplePostprocessor.cs:29)
System.Reflection.RuntimeMethodInfo.Invoke (System.Object obj, System.Reflection.BindingFlags invokeAttr, System.Reflection.Binder binder, System.Object[] parameters, System.Globalization.CultureInfo culture) (at <a6d715f5ce8c4754a140b50ff638878a>:0)
UnityEditor.BuildPipeline:BuildPlayer(BuildPlayerOptions)

今のバージョンでは使えないとエラーが出ますが、現在Sign In With Apple SDKはUnity6では使えないのですか?

0

1Answer

Comments

  1. @flyingwitch

    Questioner

    コードの問題ではないと思います。 単純にSign In With Apple SDKをインストールしてビルドしただけでエラーが出たのです。

    1. アプリケーションを設定して Apple でのサインインを有効にします。
    2. Unity Authentication について、ID プロバイダーを Apple に設定します。
    3. Unity プロジェクト内で Apple サインインを統合するには、Unity Asset Store からの SDK ライブラリパッケージを利用することをお勧めします。

    とあるので前提設定が必要とかではないでしょうか?

  2. @flyingwitch

    Questioner

    まず、1番と2番は該当事項がないと思われます。2022バージョンでビルドがよくできるプロジェクトをコピーしてUnity6で使用しているだけなので、ビルドセッティングには問題がないと思います。
    3番はUnity Asset Storeからダウンロードしてビルドしてみましたが、同じエラーが出ました。

    私の考えでは現在Unity6ではApple Loginを支援していないのではないかという考えですが、現実的に話にならないと思うのがApple SDKを支援していないのにUnity6を出したはずがないという考えなので、何か方法はあると思います。

  3. そのメッセージを検索したところ次のソースが見つかりました。

    どうも UnityEditor.iOS.Xcode.ProjectCapabilityManager の内部構造を確認している様で、そのソースが見れるのであれば 満たしているか確認できますでしょうか?

                var managerType = typeof(ProjectCapabilityManager);
                
                var projectField = managerType.GetField("project", NonPublicInstanceBinding);
                var targetGuidField = managerType.GetField("m_TargetGuid", NonPublicInstanceBinding);
                var entitlementFilePathField = managerType.GetField("m_EntitlementFilePath", NonPublicInstanceBinding);
                var getOrCreateEntitlementDocMethod = managerType.GetMethod("GetOrCreateEntitlementDoc", NonPublicInstanceBinding);
    
                // in old unity versions PBXCapabilityType had internal ctor; that was changed to public afterwards - try both
                var constructorInfo = GetPBXCapabilityTypeConstructor(PublicInstanceBinding) ??
                                      GetPBXCapabilityTypeConstructor(NonPublicInstanceBinding);
                
                if (projectField == null || targetGuidField == null  || entitlementFilePathField == null ||
                    getOrCreateEntitlementDocMethod == null || constructorInfo == null)
                    throw new Exception("Can't Add Sign In With Apple programatically in this Unity version");
    

Your answer might help someone💌