Skip to content

Commit 3ffaa39

Browse files
authored
Fix #218 - Crashlytics editor tool not loading (#457)
Crashlytics editor tool will not load if the user only adds Android build support to the Unity editor. This is because Unity has more restricted validation to function signature when loading dlls. This fix avoids passing `UnityEditor.iOS.Extensions.Xcode.PBXProject` directly but passing an `object` instead. Also fixes the integration test script just in case we want to run the test against only one build target.
1 parent d13c7d6 commit 3ffaa39

File tree

3 files changed

+22
-9
lines changed

3 files changed

+22
-9
lines changed

docs/readme.md

+5
Original file line numberDiff line numberDiff line change
@@ -155,6 +155,11 @@ Support
155155

156156
Release Notes
157157
-------------
158+
### 9.5.0
159+
- Changes
160+
- Crashlytics: Fix #218 that Firebase editor tool not loading when iOS
161+
build support is not installed.
162+
158163
### 9.4.0
159164
- Changes
160165
- General: Updated Firebase C++ SDK dependencies to v9.4.0.

editor/crashlytics/src/iOSPostBuild.cs

+5-3
Original file line numberDiff line numberDiff line change
@@ -109,8 +109,9 @@ private static void PrepareProject(string projectPath, IFirebaseConfigurationSto
109109
pbxProject.WriteToFile(projectPath);
110110
}
111111

112-
private static void SetupGUIDForSymbolUploads(UnityEditor.iOS.Xcode.PBXProject pbxProject,
112+
private static void SetupGUIDForSymbolUploads(object pbxProjectObj,
113113
string completeRunScriptBody, string targetGuid) {
114+
var pbxProject = (UnityEditor.iOS.Xcode.PBXProject) pbxProjectObj;
114115
try {
115116
// Use reflection to append a Crashlytics Run Script
116117
BindingFlags bindingFlags = BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Public;
@@ -152,8 +153,9 @@ internal static iOSBuildPhaseMethodCall GetBuildPhaseMethodCall(string unityVers
152153
}
153154
}
154155

155-
private static string GetUnityFrameworkTargetGuid(UnityEditor.iOS.Xcode.PBXProject project) {
156-
// var project = (UnityEditor.iOS.Xcode.PBXProject)projectObj;
156+
private static string GetUnityFrameworkTargetGuid(object projectObj) {
157+
var project = (UnityEditor.iOS.Xcode.PBXProject)projectObj;
158+
157159
MethodInfo getUnityFrameworkTargetGuid =
158160
project.GetType().GetMethod("GetUnityFrameworkTargetGuid");
159161

scripts/gha/integration_testing/XcodeCapabilities.cs

+12-6
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,8 @@ public static void OnPostprocessBuild (BuildTarget buildTarget, string path)
8787
File.WriteAllText(projectPath, tempProject.WriteToString());
8888
}
8989

90-
static void AddEntitlements(PBXProject project, string path, string targetId){
90+
static void AddEntitlements(object projectObj, string path, string targetId){
91+
var project = (PBXProject)projectObj;
9192
string[] entitlements = AssetDatabase.FindAssets("dev")
9293
.Select(AssetDatabase.GUIDToAssetPath)
9394
.Where(p => p.Contains("dev.entitlements"))
@@ -112,20 +113,23 @@ static void AddEntitlements(PBXProject project, string path, string targetId){
112113
Debug.Log("Added entitlement to xcode project.");
113114
}
114115

115-
static void MakeChangesForMessaging(PBXProject project, string path, string targetId) {
116+
static void MakeChangesForMessaging(object projectObj, string path, string targetId) {
117+
var project = (PBXProject)projectObj;
116118
Debug.Log("Messaging testapp detected.");
117119
AddFramework(project, targetId, "UserNotifications.framework");
118120
EnableRemoteNotification(project, path, targetId);
119121
Debug.Log("Finished making messaging-specific changes.");
120122
}
121123

122-
static void MakeChangesForAuth(PBXProject project, string path, string targetId) {
124+
static void MakeChangesForAuth(object projectObj, string path, string targetId) {
125+
var project = (PBXProject)projectObj;
123126
Debug.Log("Auth testapp detected.");
124127
AddFramework(project, targetId, "UserNotifications.framework");
125128
Debug.Log("Finished making auth-specific changes.");
126129
}
127130

128-
static void EnableRemoteNotification(PBXProject project, string path, string targetId) {
131+
static void EnableRemoteNotification(object projectObj, string path, string targetId) {
132+
var project = (PBXProject)projectObj;
129133
Debug.Log("Adding remote-notification to UIBackgroundModes");
130134
var plist = new PlistDocument();
131135
string plistPath = path + "/Info.plist";
@@ -137,13 +141,15 @@ static void EnableRemoteNotification(PBXProject project, string path, string tar
137141
Debug.Log("Finished adding remote-notification.");
138142
}
139143

140-
static void AddFramework(PBXProject project, string targetId, string framework) {
144+
static void AddFramework(object projectObj, string targetId, string framework) {
145+
var project = (PBXProject)projectObj;
141146
Debug.LogFormat("Adding framework to xcode project: {0}.", framework);
142147
project.AddFrameworkToProject(targetId, framework, false);
143148
Debug.Log("Finished adding framework.");
144149
}
145150

146-
static string GetMainTargetGUID(PBXProject pbxProject) {
151+
static string GetMainTargetGUID(object pbxProjectObj) {
152+
var pbxProject = (PBXProject)pbxProjectObj;
147153
// In 2019.3 Unity changed this API without an automated update path via the api-updater.
148154
// There doesn't seem to be a clean version-independent way to handle this logic.
149155
#if UNITY_2019_3_OR_NEWER

0 commit comments

Comments
 (0)