unity xcodeエンジニアリングをエクスポートした後、自動的に構成

3424 ワード

前節に続く:iOSとunityのインタラクティブなミキシング、閉パッケージ方式で相互呼び出しを実現
プラグインをプロジェクトに追加
プラグインが含まれている場合は.h/.m/.mm/.c/.cpp/.aファイルは、Unity Assets/Plugins/iOSディレクトリに直接入れます.UnityがXcodeプロジェクトをエクスポートすると、これらのファイルはUnity-iPhone/Libraries/Plugins/iOSディレクトリに配置されます.
プラグインが含まれている場合.framework/.bundleファイルは、UnityがXCodeプロジェクトをエクスポートした後、手動またはunityのスクリプト機能を利用してXcodeプロジェクトに参加する必要があります.Copy items if neededをチェックし、Create groupsを選択し、Add to targets:Unity-iPhoneをチェックします.
iOSエンジニアリングのエクスポート後の設定
XcodeをエクスポートするたびにPBXProjectとPlistを手動で変更すると、非常に面倒になります.UnityEditorは[PostProcessBuild]のラベルを提供し、Xcodeをエクスポートした後、いくつかの自動化操作を実行するのに役立ちます.
PostProcessBuildメソッドのタグ付け
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System.IO;
using UnityEditor;
using UnityEditor.Callbacks;
using UnityEditor.iOS.Xcode;



#if UNITY_IOS || UNITY_EDITOR
public class XcodeBuildPostprocessor
{
    //    
    [PostProcessBuild(1)]
    public static void OnPostprocessBuild(BuildTarget buildTarget, string path)
    {
        if (buildTarget == BuildTarget.iOS)
        {
            UnityEngine.Debug.Log("XCodePostProcess: Starting to perform post build tasks for iOS platform.");

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

            PBXProject proj = new PBXProject();
            proj.ReadFromFile(projPath);

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

            // ENABLE_BITCODE=False
            proj.SetBuildProperty(target, "ENABLE_BITCODE", "false");

            // add extra framework(s) 
            proj.AddFrameworkToProject(target, "Accelerate.framework", true);
            proj.AddFrameworkToProject(target, "AddressBook.framework", true);
            proj.AddFrameworkToProject(target, "AdSupport.framework", true);
            proj.AddFrameworkToProject(target, "CoreTelephony.framework", true);
            proj.AddFrameworkToProject(target, "ImageIO.framework", true);
            proj.AddFrameworkToProject(target, "MessageUI.framework", true);
            proj.AddFrameworkToProject(target, "MobileCoreServices.framework", true);
            proj.AddFrameworkToProject(target, "libc++.tbd", true);
            proj.AddFrameworkToProject(target, "libsqlite3.tbd", true);
            proj.AddFrameworkToProject(target, "libxml2.tbd", true);

            // rewrite to file
            File.WriteAllText(projPath, proj.WriteToString());


            /*====plist=====*/
            string plistPath = path + "/Info.plist";
            PlistDocument plist = new PlistDocument();
            plist.ReadFromString(File.ReadAllText(plistPath));
            // Get root
            PlistElementDict rootDict = plist.root;

            //   
            rootDict.SetString("NSCameraUsageDescription", "        ");
            rootDict.SetString("NSMicrophoneUsageDescription", "        ");

            //   http
            var atsKey = "NSAppTransportSecurity";
            PlistElementDict dictTmp = rootDict.CreateDict(atsKey);
            dictTmp.SetBoolean("NSAllowsArbitraryLoads", true);

            // Write to file
            File.WriteAllText(plistPath, plist.WriteToString());
        }
    }
}
#endif