2017-06-01 67 views
0

我有一個Unity3D iOS項目,我使用Game Center和應用程序內購買(通過第三方插件),但是當我將Unity3D項目構建到xCode時,在功能部分中的遊戲中心和應用程序內購買被禁用。我需要在PostProcessBuild方法中啓用它們。我想通過這個代碼使用xCodeApi:在後期處理中啓用Unity3D xCode項目的功能

string projPath = PBXProject.GetPBXProjectPath(pathToBuiltProject); 
    PBXProject proj = new PBXProject(); 

    proj.ReadFromString(File.ReadAllText(projPath)); 
    string target = proj.TargetGuidByName("Unity-iPhone"); 

    proj.AddCapability (target, PBXCapabilityType.GameCenter); 
    proj.AddCapability (target, PBXCapabilityType.InAppPurchase); 

    File.WriteAllText(projPath, proj.ToString()); 

但這Xcode中後,仍無法打開創建的項目(它只是崩潰immidietly)。如何在xCode中手動添加這兩個功能?

回答

2

所以問題是無效的projPath,我沒有啓用iCloud。此代碼的工作:

[PostProcessBuild(999)] 
public static void AddCapabilities(BuildTarget buildTarget, string pathToBuiltProject) 
{ 
    if (buildTarget == BuildTarget.iOS) { 
    string projPath = pathToBuiltProject + "/Unity-iPhone.xcodeproj/project.pbxproj"; 

    PBXProject proj = new PBXProject(); 
    proj.ReadFromString (File.ReadAllText (projPath)); 

    string target = proj.TargetGuidByName ("Unity-iPhone"); 

    proj.AddCapability (target, PBXCapabilityType.iCloud); 
    proj.AddCapability (target, PBXCapabilityType.GameCenter); 
    proj.AddCapability (target, PBXCapabilityType.InAppPurchase); 

    File.WriteAllText (projPath, proj.WriteToString()); 

    } 
} 

現在我有隻鍵值存儲和CloudKit設置iCloud的標誌爲真麻煩。據我閱讀,它需要一些權利文件,我不知道在哪裏可以找到。如果你知道如何提供幫助,我將不勝感激。

0

可以使用ProjectCapabilityManager添加iCloud能力與key-value存儲標識

using XcodeUnityCapability = UnityEditor.iOS.XcodeUnity.ProjectCapabilityManager; 
public class IosPostProcessBuild : MonoBehaviour 
{ 
    [PostProcessBuild] 
    private static void PostBuildActions(BuildTarget buildTarget, string path) 
    { 
     if (buildTarget == BuildTarget.iOS) 
     { 
      string projPath = path + "/Unity-iPhone.xcodeproj/project.pbxproj"; 
      XcodeUnityCapability projCapability = new XcodeUnityCapability(projPath, "Unity-iPhone/mmk.entitlements", "Unity-iPhone"); 

      projCapability.AddGameCenter(); 
      string[] empty = null; 
      projCapability.AddiCloud(true, false, empty); 
      projCapability.WriteToFile(); 
     } 
    } 
} 

XcodeUnity被重命名的命名空間,你可以採取的Xcode API從這裏https://bitbucket.org/Unity-Technologies/xcodeapi/src