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メソッドのタグ付け
プラグインをプロジェクトに追加
プラグインが含まれている場合は.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