AppleCapabilities.cs 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. #if UNITY_TVOS || UNITY_IOS
  2. using System;
  3. using UnityEditor.Build;
  4. using UnityEditor.Build.Reporting;
  5. using UnityEditor.iOS.Xcode;
  6. using UnityEngine;
  7. namespace UnityEditor.Purchasing
  8. {
  9. class AppleCapabilities : IPostprocessBuildWithReport
  10. {
  11. const string k_StorekitFramework = "StoreKit.framework";
  12. public int callbackOrder => 0;
  13. public void OnPostprocessBuild(BuildReport report)
  14. {
  15. if (report.summary.platform == BuildTarget.tvOS || report.summary.platform == BuildTarget.iOS)
  16. {
  17. OnPostprocessBuild(report.summary.platform, report.summary.outputPath);
  18. }
  19. }
  20. static void OnPostprocessBuild(BuildTarget buildTarget, string path)
  21. {
  22. OnPostprocessBuildForApple(path);
  23. }
  24. static void OnPostprocessBuildForApple(string path)
  25. {
  26. var projPath = PBXProject.GetPBXProjectPath(path);
  27. var proj = new PBXProject();
  28. proj.ReadFromFile(projPath);
  29. AddStoreKitFramework(proj, projPath);
  30. AddInAppPurchasingCapability(projPath, proj);
  31. }
  32. static void AddInAppPurchasingCapability(string projPath, PBXProject proj)
  33. {
  34. var manager = new ProjectCapabilityManager(
  35. projPath,
  36. null,
  37. targetGuid: proj.GetUnityMainTargetGuid()
  38. );
  39. manager.AddInAppPurchase();
  40. manager.WriteToFile();
  41. }
  42. static void AddStoreKitFramework(PBXProject proj, string projPath)
  43. {
  44. foreach (var targetGuid in new [] {proj.GetUnityMainTargetGuid(), proj.GetUnityFrameworkTargetGuid()})
  45. {
  46. proj.AddFrameworkToProject(targetGuid, k_StorekitFramework, false);
  47. System.IO.File.WriteAllText(projPath, proj.WriteToString());
  48. }
  49. }
  50. }
  51. }
  52. #endif