1

My project is Unity in Native integration, had problem with clang error: Build failed refer image. I had gone through other sources in stack overflow to clear with clang error. I tried to remove my main.mm file, then build get succeeded but app will crash when calling unity screen. So I have to keep both files AppDelgate and main.mm file. Couldn't fix this....issue. if anyone could please..enter image description here

  • See if there is one or more missing files. – El Tomato Mar 13 '19 at 07:07
  • try this https://stackoverflow.com/a/43801476/10150796 – Nikunj Kumbhani Mar 13 '19 at 07:09
  • 1
    Have you tried **disabling the bit code** in build settings? what are all the **plugins** you are using in your project? – Karthi Mar 20 '19 at 08:40
  • @Karthi I have disable bitcode in my build settings,, and its fine with other build settings. If I remove main.mm file build get succeeds but unity view doesn't appear. I found the solution from below answer... –  Mar 20 '19 at 09:08

1 Answers1

0

Based on your question, hope that it's unity in swift native integration.

NOTE: This solution is only for case: Unity in Native iOS

From your screen shot it show that you are using 2 main files in Xcode. There are 2 options to fix this out.

Option 1) you may keep both files in Build Phases --> Compile sources , but in your AppDelegate, command @UIApplicationMain

import UIKit
//@UIApplicationMain 
class AppDelegate: UIResponder, UIApplicationDelegate {
.......................................}

This will build succeeded and unity view appears at initial stage.

Option 2) If you want to show unity view with button, Remove your main.mm file from Build Phases --> Compile sources, so app won't crash in unity view by using 'shared window appDelegate' and try this code in your AppDelegate (uncommand @UIApplicationMain)

 func unityWindow() -> UIWindow? {
        return UnityGetMainWindow()
    }

    func showUnityWindow() {
        unityWindow()?.makeKeyAndVisible()
    }

    func hideUnityWindow() {
        window!.makeKeyAndVisible()
    }

then, in your View Controller

 private var isShowUnityWindow = false
     override func viewDidLoad()
        {
            super.viewDidLoad()
           isShowUnityWindow = false

        }
         @IBAction func startUnityandHide(_ sender: UIButton)
            {

                isShowUnityWindow = !isShowUnityWindow
                var appDelegate = UIApplication.shared.delegate as? AppDelegate

                if isShowUnityWindow {
                    appDelegate?.unityWindow()!.frame = CGRect(x: 40, y: 200, width: 300, height: 300)
                    appDelegate?.showUnityWindow()
                } else {
                    appDelegate?.hideUnityWindow()
                }
            }
AzeTech
  • 623
  • 11
  • 21
  • 1
    Finally u made it, solved my issue after 10 days!!!>>>..........Cheers buddy ........Your solution works in both options.... –  Mar 20 '19 at 09:10