Skip to content

add log to react-native (only ios) #15

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 2 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
73 changes: 58 additions & 15 deletions unity/Cube/Assets/Scripts/Editor/Build.cs
Original file line number Diff line number Diff line change
Expand Up @@ -4,17 +4,19 @@
using System.Linq;
using System.Text.RegularExpressions;
using UnityEditor;
#if UNITY_2018
using UnityEditor.Build.Reporting;
#endif
using UnityEngine;
using Application = UnityEngine.Application;
using BuildResult = UnityEditor.Build.Reporting.BuildResult;

public class Build : MonoBehaviour
{
static readonly string ProjectPath = Path.GetFullPath(Path.Combine(Application.dataPath, ".."));

static readonly string apkPath = Path.Combine(ProjectPath, "Builds/" + Application.productName + ".apk");

[MenuItem("Build/Export Android %&a", false, 1)]
[MenuItem("Build/Export Android %a", false, 1)]
public static void DoBuildAndroid()
{
string buildPath = Path.Combine(apkPath, Application.productName);
Expand All @@ -29,24 +31,29 @@ public static void DoBuildAndroid()
EditorUserBuildSettings.androidBuildSystem = AndroidBuildSystem.Gradle;

var options = BuildOptions.AcceptExternalModificationsToPlayer;
var report = BuildPipeline.BuildPlayer(
var status = BuildPipeline.BuildPlayer(
GetEnabledScenes(),
apkPath,
BuildTarget.Android,
options
);

if (report.summary.result != BuildResult.Succeeded)
#if UNITY_2018
if (status.summary.result != BuildResult.Succeeded)
throw new Exception("Build failed");

#else
if (!string.IsNullOrEmpty(status))
throw new Exception("Build failed: " + status);
#endif

Copy(buildPath, exportPath);

// Modify build.gradle
var build_file = Path.Combine(exportPath, "build.gradle");
var build_text = File.ReadAllText(build_file);
build_text = build_text.Replace("com.android.application", "com.android.library");
build_text = Regex.Replace(build_text, @"\n.*applicationId '.+'.*\n", "\n");
File.WriteAllText(build_file, build_text);
var build_file = Path.Combine(exportPath, "build.gradle");
var build_text = File.ReadAllText(build_file);
build_text = build_text.Replace("com.android.application", "com.android.library");
build_text = Regex.Replace(build_text, @"\n.*applicationId '.+'.*\n", "");
File.WriteAllText(build_file, build_text);

// Modify AndroidManifest.xml
var manifest_file = Path.Combine(exportPath, "src/main/AndroidManifest.xml");
Expand All @@ -57,7 +64,7 @@ public static void DoBuildAndroid()
File.WriteAllText(manifest_file, manifest_text);
}

[MenuItem("Build/Export IOS %&i", false, 2)]
[MenuItem("Build/Export IOS %i", false, 2)]
public static void DoBuildIOS()
{
string exportPath = Path.GetFullPath(Path.Combine(ProjectPath, "../../ios/UnityExport"));
Expand All @@ -67,16 +74,52 @@ public static void DoBuildIOS()

EditorUserBuildSettings.iOSBuildConfigType = iOSBuildType.Release;

PlayerSettings.iOS.sdkVersion = iOSSdkVersion.DeviceSDK; //iOSSdkVersion.SimulatorSDK

var options = BuildOptions.AcceptExternalModificationsToPlayer;
var status = BuildPipeline.BuildPlayer(
GetEnabledScenes(),
exportPath,
BuildTarget.iOS,
options
);

#if UNITY_2018
if (status.summary.result != BuildResult.Succeeded)
throw new Exception("Build failed");
#else
if (!string.IsNullOrEmpty(status))
throw new Exception("Build failed: " + status);
#endif
}

[MenuItem("Build/Export IOS Simulator", false, 3)]
public static void DoBuildIOSSimulator()
{
string exportPath = Path.GetFullPath(Path.Combine(ProjectPath, "../../ios/UnityExport"));

if (Directory.Exists(exportPath))
Directory.Delete(exportPath, true);

EditorUserBuildSettings.iOSBuildConfigType = iOSBuildType.Release;

PlayerSettings.iOS.sdkVersion = iOSSdkVersion.SimulatorSDK;

var options = BuildOptions.AcceptExternalModificationsToPlayer;
var report = BuildPipeline.BuildPlayer(
var status = BuildPipeline.BuildPlayer(
GetEnabledScenes(),
exportPath,
BuildTarget.iOS,
options
);

if (report.summary.result != BuildResult.Succeeded)
throw new Exception("Build failed");
#if UNITY_2018
if (status.summary.result != BuildResult.Succeeded)
throw new Exception("Build failed");
#else
if (!string.IsNullOrEmpty(status))
throw new Exception("Build failed: " + status);
#endif
}

static void Copy(string source, string destinationPath)
Expand Down Expand Up @@ -104,4 +147,4 @@ static string[] GetEnabledScenes()

return scenes;
}
}
}
26 changes: 26 additions & 0 deletions unity/Cube/Assets/Scripts/UnityMessageManager.cs
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,9 @@ public class UnityMessageManager : MonoBehaviour
#if UNITY_IOS && !UNITY_EDITOR
[DllImport("__Internal")]
private static extern void onUnityMessage(string message);

[DllImport("__Internal")]
private static extern void logToRN(string message, int level);
#endif

public const string MessagePrefix = "@UnityMessage@";
Expand Down Expand Up @@ -97,6 +100,29 @@ void Awake()
{
}

public static void SetLogToRN(bool enable)
{
if (enable)
{
Application.logMessageReceived += UnityMessageManager.LogToRN;
}
else
{
Application.logMessageReceived -= UnityMessageManager.LogToRN;
}
}

public static void LogToRN(string logString, string stackTrace, LogType type)
{
// We check for UNITY_IPHONE again so we don't try this if it isn't iOS platform.
#if UNITY_IOS && !UNITY_EDITOR
// Now we check that it's actually an iOS device/simulator, not the Unity Player. You only get plugins on the actual device or iOS Simulator.
if (Application.platform == RuntimePlatform.IPhonePlayer) {
logToRN(type + ":" + logString + "\n===============\n" + stackTrace, 1);
}
#endif
}

public void SendMessageToRN(string message)
{
if (Application.platform == RuntimePlatform.Android)
Expand Down