2016-02-04 2 views
4

Проблема:Unity Cloud Build: post export method

Я не могу найти правильную подпись для метода экспорта почтовых сообщений Unity cloud build. Согласно документации:

The fully-qualified name of a public static method you want us to call after we finish the Unity build process (but before Xcode). For example: ClassName.CoolMethod or NameSpace.ClassName.CoolMethod. No trailing parenthesis, and it can't have the same name as your Pre-Export method! This method must accept a string parameter, which will receive the path to the exported Unity player (or Xcode project in the case of iOS).

Вот мой код:

public static void OnPostprocessDevBuildIOS(string ExportPath) 
    { 
     var projPath = ExportPath + "/Unity-iPhone.xcodeproj/project.pbxproj"; 

     var proj = new PBXProject(); 
     var nativeTarget = 
      proj.TargetGuidByName(PBXProject.GetUnityTargetName()); 
     var testTarget = 
      proj.TargetGuidByName(PBXProject.GetUnityTestTargetName()); 
     string[] buildTargets = {nativeTarget, testTarget}; 

     proj.ReadFromString(File.ReadAllText(projPath)); 
     proj.SetBuildProperty(buildTargets, "ENABLE_BITCODE", "NO"); 
     File.WriteAllText(projPath, proj.WriteToString()); 
    } 

и вот ошибка:

enter image description here

Я пробовал несколько подписей методов испытаний и может» Кажется, что все работает. Я даже попробовал только метод, который выводит путь.

Дополнительная информация:

  • Unity Версия: 5.3.1f
  • Unity Облако Сложение: 5.3.1f
  • Цель: IOS 8.0+

Кроме того, мое облако построить настройки скрипта находится в папке редактора по мере необходимости.

enter image description here

Ok так что я получил инвалидизирующий процесс после битового кода для работы со следующим кодом, но только тогда, когда я строю вручную. Когда я строю из облачной сборки, без ошибок приложение зависает на экране заставки. Когда я строю с моей локальной машины, приложение работает нормально.

[PostProcessBuild] 
public static void OnPostprocessBuild(BuildTarget buildTarget, string path) 
{ 
    if (buildTarget == BuildTarget.iOS) 
    { 
     string projPath = path + "/Unity-iPhone.xcodeproj/project.pbxproj"; 
     PBXProject proj = new PBXProject(); 
     proj.ReadFromString(File.ReadAllText(projPath)); 

     string nativeTarget = proj.TargetGuidByName(PBXProject.GetUnityTargetName()); 
     string testTarget = proj.TargetGuidByName(PBXProject.GetUnityTestTargetName()); 
     string[] buildTargets = new string[]{nativeTarget, testTarget}; 

     proj.SetBuildProperty(buildTargets, "ENABLE_BITCODE", "NO"); 
     File.WriteAllText(projPath, proj.WriteToString()); 
    } 
} 

ответ

-1

На самом деле OnPostprocessBuild всегда называется, так что вы не должны положить что-нибудь в пост поле метода экспорта, который предназначен для более специфических методов.

+0

без OnPostProcessBuild, как я могу отключить BITCODE? – Kenshin

0

У меня тоже была такая же проблема «заставка заставки» сразу после запуска ... Я решил эту проблему. Используйте приведенный ниже код. Протестировано в Unity 5.4.1p2 и Xcode 7.3.

using UnityEngine; 
using System.Collections; 
using UnityEditor; 
using System.IO; 
using UnityEditor.Callbacks; 
#if UNITY_IOS 
using UnityEditor.iOS.Xcode; 
#endif 

public class Postprocessor : AssetPostprocessor 
{ 
#if UNITY_IOS 
    [PostProcessBuild] 
    public static void OnPostprocessBuild(BuildTarget buildTarget, string path) 
    { 
     if (buildTarget == BuildTarget.iOS) 
     { 
      string projPath = path + "/Unity-iPhone.xcodeproj/project.pbxproj"; 

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

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

      proj.SetBuildProperty(target, "ENABLE_BITCODE", "false"); 

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



      // Add url schema to plist file 
      string plistPath = path + "/Info.plist"; 
      PlistDocument plist = new PlistDocument(); 
      plist.ReadFromString(File.ReadAllText(plistPath)); 

      // Get root 
      PlistElementDict rootDict = plist.root; 
      rootDict.SetBoolean("UIRequiresFullScreen",true); 
      plist.WriteToFile(plistPath); 
     } 
    } 
#endif 
}