/// <summary> /// ObjC ファイルを書き換える /// </summary> /// <param name="path">出力先のパス(ビルド時に指定するパス)</param> /// <param name="settings">Lobiの設定</param> private static void ReWriteObjCFiles(string path, LobiSettings settings) { // LobiUnityAppController.mm ファイルを書き換える string filePath = string.Empty; #if UNITY_5_AND_LATER filePath = System.IO.Path.Combine(path, "Libraries/Plugins/iOS/LobiUnityAppController.mm"); #else filePath = System.IO.Path.Combine(path, "Libraries/LobiUnityAppController.mm"); #endif if (File.Exists(filePath)) { UpdateStringInFile(filePath, "[LobiCore setupClientId:@\"\"", "[LobiCore setupClientId:@\"" + settings.clientId + "\""); UpdateStringInFile(filePath, "accountBaseName:@\"\"];", "accountBaseName:@\"" + settings.baseName + "\"];"); if (settings.chatEnabled == false) { UpdateStringInFile(filePath, "#define LOBI_CHAT", ""); } if (settings.recEnabled == false) { UpdateStringInFile(filePath, "#define LOBI_REC", ""); } } if (settings.recEnabled == true) { ReWriteMetalFiles(path); } }
/// <summary> /// ObjC ファイルを書き換える /// </summary> /// <param name="path">出力先のパス(ビルド時に指定するパス)</param> /// <param name="settings">Lobiの設定</param> private static void ReWriteObjCFiles (string path, LobiSettings settings) { // LobiUnityAppController.mm ファイルを書き換える string filePath = string.Empty; #if UNITY_5_AND_LATER filePath = System.IO.Path.Combine (path, "Libraries/Plugins/iOS/LobiUnityAppController.mm"); #else filePath = System.IO.Path.Combine (path, "Libraries/LobiUnityAppController.mm"); #endif if (File.Exists (filePath)) { UpdateStringInFile (filePath, "[LobiCore setupClientId:@\"\"", "[LobiCore setupClientId:@\"" + settings.clientId + "\""); UpdateStringInFile (filePath, "accountBaseName:@\"\"];", "accountBaseName:@\"" + settings.baseName + "\"];"); if (settings.chatEnabled == false) { UpdateStringInFile (filePath, "#define LOBI_CHAT", ""); } if (settings.recEnabled == false) { UpdateStringInFile (filePath, "#define LOBI_REC", ""); } } if (settings.recEnabled == true) { ReWriteMetalFiles(path); } }
private float _displayScale; // 1ポイントあたりのピクセル数。Retina なら 2.0 になる // Use this for initialization void Start() { #if (UNITY_IOS || UNITY_IPHONE) && !UNITY_5_AND_LATER AudioSettings.outputSampleRate = 44100; #endif _currentMode = MODE.MAIN; _displayScale = Math.Min(Screen.width, Screen.height) / 320.0f; _isCapturing = false; // テスト用ボタンを表示するかの設定値を取得 LobiSettings settings = (LobiSettings)Resources.Load(SETTING_FILE); _isTestButtonsEnable = settings.IsValid == true && settings.IsEnabled == true && settings.testButtonsEnabled; if (_isTestButtonsEnable == false) { Debug.Log("Invalid or missing game credentials, Lobi disabled"); Debug.Log(settings.IsValid + ", " + settings.IsEnabled); return; } // 各SDKのクラスを取得する。Unityプロジェクトにインポートされていないクラスはnullが返る _recType = Type.GetType(LOBI_REC_BRIDGE); _rankingType = Type.GetType(LOBI_RANKING_BRIDGE); // テストボタンのスタイルを設定する s_buttonStyle = new GUIStyle(); s_buttonStyle.wordWrap = true; s_buttonStyle.fontSize = (int)(BUTTON_HEIGHT * 0.5); s_buttonStyle.alignment = TextAnchor.MiddleCenter; s_buttonStyle.normal.textColor = new Color(0.1f, 0.1f, 0.1f); Texture2D texture = new Texture2D(1, 1, TextureFormat.ARGB32, false); texture.SetPixel(0, 0, new Color(1.0f, 1.0f, 1.0f, 0.8f)); texture.Apply(); s_buttonStyle.normal.background = texture; }
// Inspectorパネルが閉じられたときに呼ばれる(ビルド実行時にも呼ばれる) void OnDisable() { if (_currentSettings != null) { EditorUtility.SetDirty(_currentSettings); _currentSettings = null; } }
/// <summary> /// iOSのビルド設定自動化処理 /// </summary> /// <param name="path">出力先のパス(ビルド時に指定するパス)</param> /// <param name="settings">Lobiの設定</param> private static void PostProcessBuild_iOS(string path, LobiSettings settings) { // ObjC ファイルを書き換える ReWriteObjCFiles(path, settings); // XCode プロジェクトファイルの設定をする CreateModFile(path, settings); ProcessXCodeProject(path); // Info.plist ファイルを書き換える ReWriteInfoPList(path, settings.clientId); }
/// <summary> /// iOSのビルド設定自動化処理 /// </summary> /// <param name="path">出力先のパス(ビルド時に指定するパス)</param> /// <param name="settings">Lobiの設定</param> private static void PostProcessBuild_iOS (string path, LobiSettings settings) { // ObjC ファイルを書き換える ReWriteObjCFiles (path, settings); // XCode プロジェクトファイルの設定をする CreateModFile (path, settings); ProcessXCodeProject (path); // Info.plist ファイルを書き換える ReWriteInfoPList (path, settings.clientId); }
// 設定ファイルの生成 private static LobiSettings CreateLobiSettings() { LobiSettings lobiSettings = (LobiSettings)ScriptableObject.CreateInstance(typeof(LobiSettings)); if (lobiSettings != null) { if (!Directory.Exists(System.IO.Path.Combine(Application.dataPath, "Plugins/Lobi/Resources"))) { AssetDatabase.CreateFolder("Assets/Plugins/Lobi", "Resources"); } // 初期値設定 lobiSettings.iosSupportEnabled = true; AssetDatabase.CreateAsset(lobiSettings, "Assets/Plugins/Lobi/Resources/" + settingsFile + settingsFileExtension); AssetDatabase.SaveAssets(); AssetDatabase.Refresh(); return(lobiSettings); } return(null); }
public static void OnPostProcessBuild(BuildTarget target, string path) { LobiSettings settings = (LobiSettings)Resources.Load(LobiSettingsEditor.settingsFile); if (settings == null) { Debug.Log("Lobi SDK auto build settings will be disabled because client id or base name was not valid.\nLobi SDK Settings: [Edit]-[Lobi Settings]"); return; } if (settings == null || settings.IsEnabled == false) { return; } if (settings.IsValid) { #if UNITY_5_AND_LATER if (target == BuildTarget.iOS) { #else if (target == BuildTarget.iPhone) { #endif PostProcessBuild_iOS(path, settings); } else if (target == BuildTarget.Android) { // TODO: Android //PostProcessBuild_Android(path, settings.clientId); } } else { Debug.LogError("Lobi will be disabled because client id or base name was not valid."); } }
public static void ShowSettings() { LobiSettings settingsInstance = (LobiSettings)Resources.Load(settingsFile); if (settingsInstance == null) { settingsInstance = CreateLobiSettings(); } if (settingsInstance != null) { String dirPath = Application.dataPath; string[] files = System.IO.Directory.GetFiles(dirPath, "*LobiChat*", System.IO.SearchOption.AllDirectories); settingsInstance.chatEnabled = files.Length > 0; files = System.IO.Directory.GetFiles(dirPath, "*LobiRec*", System.IO.SearchOption.AllDirectories); settingsInstance.recEnabled = files.Length > 0; files = System.IO.Directory.GetFiles(dirPath, "*LobiRanking*", System.IO.SearchOption.AllDirectories); settingsInstance.rankingEnabled = files.Length > 0; // 設定ファイルを選択状態にして、Inspectorパネルに表示する Selection.activeObject = settingsInstance; } }
public override void OnInspectorGUI() { try { // Might be null when this gui is open and this file is being reimported if(target == null) { Selection.activeObject = null; return; } _currentSettings = (LobiSettings)target; if(_currentSettings == null) { return; } EditorGUILayout.HelpBox("1) Enter your game credentials", MessageType.None); EditorGUILayout.HelpBox("You can check your game credentials at https://developer.lobi.co/", MessageType.Info); // Client ID EditorGUILayout.BeginHorizontal(); EditorGUILayout.LabelField(_labelClientId, GUILayout.Width(80), GUILayout.Height(18)); _currentSettings.clientId = TrimmedText(EditorGUILayout.TextField(_currentSettings.clientId)); EditorGUILayout.EndHorizontal(); // Base Name EditorGUILayout.BeginHorizontal(); EditorGUILayout.LabelField(_labelBaseName, GUILayout.Width(80), GUILayout.Height(18)); _currentSettings.baseName = TrimmedText(EditorGUILayout.TextField(_currentSettings.baseName)); EditorGUILayout.EndHorizontal(); // プラットフォームのON/OFF設定 EditorGUILayout.HelpBox("2) Enable auto build settings", MessageType.None); EditorGUILayout.BeginVertical(); _currentSettings.iosSupportEnabled = EditorGUILayout.Toggle(_labelIOsSupport, _currentSettings.iosSupportEnabled); if(_currentSettings.iosSupportEnabled == true){ EditorGUILayout.BeginHorizontal(); EditorGUILayout.LabelField("Chat",GUILayout.Width(112)); EditorGUILayout.LabelField(GetOnOffString(_currentSettings.chatEnabled)); EditorGUILayout.EndHorizontal(); EditorGUILayout.BeginHorizontal(); EditorGUILayout.LabelField("Rec",GUILayout.Width(112)); EditorGUILayout.LabelField(GetOnOffString(_currentSettings.recEnabled)); EditorGUILayout.EndHorizontal(); EditorGUILayout.BeginHorizontal(); EditorGUILayout.LabelField("Ranking",GUILayout.Width(112)); EditorGUILayout.LabelField(GetOnOffString(_currentSettings.rankingEnabled)); EditorGUILayout.EndHorizontal(); } EditorGUILayout.EndVertical(); // テストボタンのON/OFF設定 EditorGUILayout.HelpBox("3) Enable test buttons", MessageType.None); EditorGUILayout.BeginVertical(); _currentSettings.testButtonsEnabled = EditorGUILayout.Toggle(_labelTestButtons, _currentSettings.testButtonsEnabled); if(_currentSettings.testButtonsEnabled == true) { EditorGUILayout.HelpBox("Add \"Assets/LobiSDK/Scripts/LobiTestButton(prefab)\" to scene", MessageType.Info); } EditorGUILayout.EndVertical(); EditorGUILayout.BeginHorizontal(); EditorGUILayout.HelpBox("If you use REC SDK,\nadd \"Assets/LobiSDK/Scripts/LobiRec(prefab)\" to scene", MessageType.Info); EditorGUILayout.EndVertical(); } catch(Exception e) { if(e != null) { } } }
// Inspectorパネルが閉じられたときに呼ばれる(ビルド実行時にも呼ばれる) void OnDisable() { if(_currentSettings != null) { EditorUtility.SetDirty(_currentSettings); _currentSettings = null; } }
public override void OnInspectorGUI() { try { // Might be null when this gui is open and this file is being reimported if (target == null) { Selection.activeObject = null; return; } _currentSettings = (LobiSettings)target; if (_currentSettings == null) { return; } EditorGUILayout.HelpBox("1) Enter your game credentials", MessageType.None); EditorGUILayout.HelpBox("You can check your game credentials at https://developer.lobi.co/", MessageType.Info); // Client ID EditorGUILayout.BeginHorizontal(); EditorGUILayout.LabelField(_labelClientId, GUILayout.Width(80), GUILayout.Height(18)); _currentSettings.clientId = TrimmedText(EditorGUILayout.TextField(_currentSettings.clientId)); EditorGUILayout.EndHorizontal(); // Base Name EditorGUILayout.BeginHorizontal(); EditorGUILayout.LabelField(_labelBaseName, GUILayout.Width(80), GUILayout.Height(18)); _currentSettings.baseName = TrimmedText(EditorGUILayout.TextField(_currentSettings.baseName)); EditorGUILayout.EndHorizontal(); // プラットフォームのON/OFF設定 EditorGUILayout.HelpBox("2) Enable auto build settings", MessageType.None); EditorGUILayout.BeginVertical(); _currentSettings.iosSupportEnabled = EditorGUILayout.Toggle(_labelIOsSupport, _currentSettings.iosSupportEnabled); if (_currentSettings.iosSupportEnabled == true) { EditorGUILayout.BeginHorizontal(); EditorGUILayout.LabelField("Chat", GUILayout.Width(112)); EditorGUILayout.LabelField(GetOnOffString(_currentSettings.chatEnabled)); EditorGUILayout.EndHorizontal(); EditorGUILayout.BeginHorizontal(); EditorGUILayout.LabelField("Rec", GUILayout.Width(112)); EditorGUILayout.LabelField(GetOnOffString(_currentSettings.recEnabled)); EditorGUILayout.EndHorizontal(); EditorGUILayout.BeginHorizontal(); EditorGUILayout.LabelField("Ranking", GUILayout.Width(112)); EditorGUILayout.LabelField(GetOnOffString(_currentSettings.rankingEnabled)); EditorGUILayout.EndHorizontal(); } EditorGUILayout.EndVertical(); // テストボタンのON/OFF設定 EditorGUILayout.HelpBox("3) Enable test buttons", MessageType.None); EditorGUILayout.BeginVertical(); _currentSettings.testButtonsEnabled = EditorGUILayout.Toggle(_labelTestButtons, _currentSettings.testButtonsEnabled); if (_currentSettings.testButtonsEnabled == true) { EditorGUILayout.HelpBox("Add \"Assets/LobiSDK/Scripts/LobiTestButton(prefab)\" to scene", MessageType.Info); } EditorGUILayout.EndVertical(); EditorGUILayout.BeginHorizontal(); EditorGUILayout.HelpBox("If you use REC SDK,\nadd \"Assets/LobiSDK/Scripts/LobiRec(prefab)\" to scene", MessageType.Info); EditorGUILayout.EndVertical(); } catch (Exception e) { if (e != null) { } } }
/// <summary> /// Mod ファイルの作成 /// </summary> /// <param name="path">出力先のパス(ビルド時に指定するパス)</param> /// <param name="settings">Lobiの設定</param> private static void CreateModFile(string path, LobiSettings settings) { Dictionary <string, object> mod = new Dictionary <string, object> (); List <string> patches = new List <string> (); List <string> librarysearchpaths = new List <string> (); List <string> folders = new List <string> (); List <string> excludes = new List <string> (); // libs List <string> libs = new List <string> (); libs.Add("libsqlite3.0.dylib"); // フレームワークサーチパス List <string> frameworksearchpaths = new List <string> (); #if !UNITY_5_AND_LATER frameworksearchpaths.Add("Plugins/Lobi/iOS"); #endif // フレームワーク List <string> frameworks = new List <string> (); frameworks.Add("OpenGLES.framework"); frameworks.Add("QuartzCore.framework"); frameworks.Add("MediaPlayer.framework"); frameworks.Add("MessageUI.framework"); frameworks.Add("CoreData.framework"); frameworks.Add("CoreMedia.framework"); frameworks.Add("Security.framework"); frameworks.Add("CoreImage.framework:weak"); frameworks.Add("StoreKit.framework:weak"); frameworks.Add("AVFoundation.framework:weak"); frameworks.Add("Foundation.framework:weak"); frameworks.Add("AudioToolbox.framework:weak"); frameworks.Add("AssetsLibrary.framework:weak"); frameworks.Add("UIKit.framework:weak"); // files List <string> files = new List <string> (); #if !UNITY_5_AND_LATER AddFrameworkFile(ref files, "Plugins/Lobi/iOS/LobiCore.framework"); AddFrameworkFile(ref files, "Plugins/Lobi/iOS/LobiCore.bundle"); if (settings.chatEnabled == true) { AddFrameworkFile(ref files, "Plugins/Lobi/iOS/LobiChat.framework"); AddFrameworkFile(ref files, "Plugins/Lobi/iOS/LobiChat.bundle"); } if (settings.recEnabled == true) { AddFrameworkFile(ref files, "Plugins/Lobi/iOS/LobiRec.framework"); AddFrameworkFile(ref files, "Plugins/Lobi/iOS/LobiRec.bundle"); } if (settings.rankingEnabled == true) { AddFrameworkFile(ref files, "Plugins/Lobi/iOS/LobiRanking.framework"); AddFrameworkFile(ref files, "Plugins/Lobi/iOS/LobiRanking.bundle"); } #endif // headerpaths List <string> headerpaths = new List <string> (); #if !UNITY_5_AND_LATER headerpaths.Add("Plugins/Lobi/iOS"); #endif // ビルド設定 Dictionary <string, List <string> > buildSettings = new Dictionary <string, List <string> > (); List <string> otherLinkerFlags = new List <string> (); otherLinkerFlags.Add("-ObjC"); buildSettings.Add("OTHER_LDFLAGS", otherLinkerFlags); mod.Add("group", "Lobi"); mod.Add("patches", patches); mod.Add("libs", libs); mod.Add("librarysearchpaths", librarysearchpaths); mod.Add("frameworksearchpaths", frameworksearchpaths); mod.Add("frameworks", frameworks); mod.Add("headerpaths", headerpaths); mod.Add("files", files); mod.Add("folders", folders); mod.Add("excludes", excludes); mod.Add("buildSettings", buildSettings); // mod から projmods ファイルを生成する string jsonMod = LobiMiniJSON.Json.Serialize(mod); string modPath = System.IO.Path.Combine(path, "Lobi"); string file = System.IO.Path.Combine(modPath, "LobiXCode.projmods"); if (!Directory.Exists(modPath)) { Directory.CreateDirectory(modPath); } if (File.Exists(file)) { File.Delete(file); } using (StreamWriter streamWriter = File.CreateText(file)) { streamWriter.Write(jsonMod); } }
/// <summary> /// Mod ファイルの作成 /// </summary> /// <param name="path">出力先のパス(ビルド時に指定するパス)</param> /// <param name="settings">Lobiの設定</param> private static void CreateModFile (string path, LobiSettings settings) { Dictionary<string, object> mod = new Dictionary<string, object> (); List<string> patches = new List<string> (); List<string> librarysearchpaths = new List<string> (); List<string> folders = new List<string> (); List<string> excludes = new List<string> (); // libs List<string> libs = new List<string> (); libs.Add ("libsqlite3.0.dylib"); // フレームワークサーチパス List<string> frameworksearchpaths = new List<string> (); #if !UNITY_5_AND_LATER frameworksearchpaths.Add ("Plugins/Lobi/iOS"); #endif // フレームワーク List<string> frameworks = new List<string> (); frameworks.Add ("OpenGLES.framework"); frameworks.Add ("QuartzCore.framework"); frameworks.Add ("MediaPlayer.framework"); frameworks.Add ("MessageUI.framework"); frameworks.Add ("CoreData.framework"); frameworks.Add ("CoreMedia.framework"); frameworks.Add ("Security.framework"); frameworks.Add ("CoreImage.framework:weak"); frameworks.Add ("StoreKit.framework:weak"); frameworks.Add ("AVFoundation.framework:weak"); frameworks.Add ("Foundation.framework:weak"); frameworks.Add ("AudioToolbox.framework:weak"); frameworks.Add ("AssetsLibrary.framework:weak"); frameworks.Add ("UIKit.framework:weak"); // files List<string> files = new List<string> (); #if !UNITY_5_AND_LATER AddFrameworkFile (ref files, "Plugins/Lobi/iOS/LobiCore.framework"); AddFrameworkFile (ref files, "Plugins/Lobi/iOS/LobiCore.bundle"); if (settings.chatEnabled == true) { AddFrameworkFile (ref files, "Plugins/Lobi/iOS/LobiChat.framework"); AddFrameworkFile (ref files, "Plugins/Lobi/iOS/LobiChat.bundle"); } if (settings.recEnabled == true) { AddFrameworkFile (ref files, "Plugins/Lobi/iOS/LobiRec.framework"); AddFrameworkFile (ref files, "Plugins/Lobi/iOS/LobiRec.bundle"); } if (settings.rankingEnabled == true) { AddFrameworkFile (ref files, "Plugins/Lobi/iOS/LobiRanking.framework"); AddFrameworkFile (ref files, "Plugins/Lobi/iOS/LobiRanking.bundle"); } #endif // headerpaths List<string> headerpaths = new List<string> (); #if !UNITY_5_AND_LATER headerpaths.Add ("Plugins/Lobi/iOS"); #endif // ビルド設定 Dictionary<string,List<string>> buildSettings = new Dictionary<string,List<string>> (); List<string> otherLinkerFlags = new List<string> (); otherLinkerFlags.Add ("-ObjC"); buildSettings.Add ("OTHER_LDFLAGS", otherLinkerFlags); mod.Add ("group", "Lobi"); mod.Add ("patches", patches); mod.Add ("libs", libs); mod.Add ("librarysearchpaths", librarysearchpaths); mod.Add ("frameworksearchpaths", frameworksearchpaths); mod.Add ("frameworks", frameworks); mod.Add ("headerpaths", headerpaths); mod.Add ("files", files); mod.Add ("folders", folders); mod.Add ("excludes", excludes); mod.Add ("buildSettings", buildSettings); // mod から projmods ファイルを生成する string jsonMod = LobiMiniJSON.Json.Serialize (mod); string modPath = System.IO.Path.Combine (path, "Lobi"); string file = System.IO.Path.Combine (modPath, "LobiXCode.projmods"); if (!Directory.Exists (modPath)) { Directory.CreateDirectory (modPath); } if (File.Exists (file)) { File.Delete (file); } using (StreamWriter streamWriter = File.CreateText (file)) { streamWriter.Write (jsonMod); } }