В Unity BuildPostProcessor, как именно вы просто «копируете» один файл? - PullRequest
0 голосов
/ 10 января 2019

в Unity У меня просто есть файл afile.ts, сидящий в Assets /

enter image description here

Во встроенном Xcode я просто хочу, чтобы он находился в папке проекта (действительно, в любом месте, в порядке), включенной в проект.

enter image description here

Вы делаете это, используя

    project.AddFileToBuild(g, something something something);

Но я просто не могу понять .

(Очевидно, в Unity это совершенно недокументировано.)

Как это сделать? Только один простой файл - фактически скопируйте его из Assets / filename в проект Xcode (и он будет иметь целевое членство и находиться в основном комплекте).

Вот идеальный пост-скрипт сборки Unity BuildPostProcessor.cs, который удивителен и делает все остальное:

https://stackoverflow.com/a/54370793/294884

но я не могу скопировать проклятый файл! Как?


Примечание - альтернатива

Примечание. Если вы очень просто поместите файл в магическую папку Unity с плохим названием:

/ StreamingAssets

фактически он делает именно то, что обсуждается в этом QA.

  1. Unity .. есть файл music.mp4 или mesh.txt в / StreamingAssets
  2. сборка в Xcode
  3. у вас будет файл music.mp4 или mesh.txt в проекте Xcode, включенный в Target
  4. и расположение iOS будет ...

имя папки на iOS по какой-либо причине становится: / Data / Raw

Таким образом, ваш низкоуровневый код стороны iOS будет:

вместо, например:

CFURLRef imageURL = CFBundleCopyResourceURL(
  mainBundle, CFSTR("music"), CFSTR("mp4"), NULL);

у вас будет:

CFURLRef imageURL = CFBundleCopyResourceURL(
  mainBundle, CFSTR("Data/Raw/music"), CFSTR("mp4"), NULL);

Это отлично работает. Но, конечно, мы можем научиться использовать .AddFileToBuild, который, кажется, существует для этой цели.

Ответы [ 2 ]

0 голосов
/ 15 января 2019

Я получил его для своего рода работы (все еще Xcode выделяет папку красным цветом), но мой плагин распознает этот файл правильно

Вы должны добавить свой файл в папку / StreamingAssets, чтобы ваш файл действительно появился в пути «Data / Raw /» в проекте Xcode. Затем просто добавьте этот код в вашу функцию [PostProcessBuild]

    PBXProject project = new PBXProject();
    string sPath = PBXProject.GetPBXProjectPath(pathToBuiltProject);
    project.ReadFromFile(sPath);
    string tn = PBXProject.GetUnityTargetName();
    string g = project.TargetGuidByName(tn);

    project.AddFileToBuild(g, project.AddFile("Data/Raw/<YourFile.png>", "<YourPathInXcodeProject>/<YourFile.png>"));

    File.WriteAllText(sPath, project.WriteToString());

это добавит ваш файл к желаемому пути в «желтых» папках, а не в «голубых», как / StreamingAssets доза.

[Я не эксперт по XCode, но я заметил, что в «синих» папках функции изменения значков приложений не могли их там найти, только после добавления моих альтернативных значков в желтую папку XCode с радостью распознал их как файлы]

0 голосов
/ 14 января 2019

FTR Я наткнулся на некоторый пример кода Unity (в несвязанном примере проекта), который может помочь ..

public class MyBuildPostprocessor
{
    // Build postprocessor. Currently only needed on:
    // - iOS: no dynamic libraries, so plugin source files have to be copied into Xcode project
    [PostProcessBuild]
    public static void OnPostprocessBuild(BuildTarget target, string pathToBuiltProject)
    {
        if (target == BuildTarget.iOS)
            OnPostprocessBuildIOS(pathToBuiltProject);
    }

    private static void OnPostprocessBuildIOS(string pathToBuiltProject)
    {
        // We use UnityEditor.iOS.Xcode API which only exists in iOS editor module
        #if UNITY_IOS

        string projPath = pathToBuiltProject + "/Unity-iPhone.xcodeproj/project.pbxproj";

        UnityEditor.iOS.Xcode.PBXProject proj = new UnityEditor.iOS.Xcode.PBXProject();
        proj.ReadFromString(File.ReadAllText(projPath));
        string target = proj.TargetGuidByName("Unity-iPhone");

        Directory.CreateDirectory(Path.Combine(pathToBuiltProject, "Libraries/Unity"));

        string[] filesToCopy = new string[]
        {
            "PlatformBase.h",
            "RenderAPI_Metal.mm",
            "RenderAPI_OpenGLCoreES.cpp",
            "RenderAPI.cpp",
            "RenderAPI.h",
            "RenderingPlugin.cpp",
        };

        for(int i = 0 ; i < filesToCopy.Length ; ++i)
        {
            var srcPath = Path.Combine("../PluginSource/source", filesToCopy[i]);
            var dstLocalPath = "Libraries/" + filesToCopy[i];
            var dstPath = Path.Combine(pathToBuiltProject, dstLocalPath);
            File.Copy(srcPath, dstPath, true);
            proj.AddFileToBuild(target, proj.AddFile(dstLocalPath, dstLocalPath));
        }

        File.WriteAllText(projPath, proj.WriteToString());
        #endif // #if UNITY_IOS
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...