Search code examples
iosswiftmfmessagecomposeviewcontroller

App crash when MFMessageComposeViewController is initialisation


I want to send a message through my app. I call the following method on click

@IBAction func sendMessage(_ sender: Any) {
     if (MFMessageComposeViewController.canSendText()) {
         let composeVC = MFMessageComposeViewController()
         composeVC.messageComposeDelegate = self

         // Configure the fields of the interface.
         composeVC.recipients = ["4085551212"]
         composeVC.body = "Hello from California!"

         // Present the view controller modally.
         self.presentViewController(composeVC, animated: true, completion: nil)
     }
}

The problem is if I run the app on device, it crashes at MFMessageComposeViewController initialisation i.e.

let composeVC = MFMessageComposeViewController()

If I run the app in simulator, it crashes on presentation i.e.

self.present(composeVC, animated: true, completion: nil)

Error log when I run the app on device

2018-01-29 12:03:57.826816+0530 EWS[2495:806400] *** Assertion failure in -[UICGColor encodeWithCoder:], /BuildRoot/Library/Caches/com.apple.xbs/Sources/UIKit/UIKit-3698.33.7/UIColor.m:1722
2018-01-29 12:03:57.827522+0530 EWS[2495:806400] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Only RGBA or White color spaces are supported in this situation.'
*** First throw call stack:
(0x183702364 0x182948528 0x183702238 0x18409d7f4 0x18d08fffc 0x1840574dc 0x18405e8d8 0x18d4ebf20 0x18d4eb74c 0x18d4e7044 0x1835d03c0 0x18d4e6d44 0x18d7f16fc 0x18d60bd18 0x18d60b94c 0x19aee4534 0x19aecbff4 0x19aecc314 0x1984ce830 0x101159ec0 0x101158888 0x1011584b4 0x1011589c0 0x18cc186b4 0x18cc18634 0x18cc031dc 0x18cc17f28 0x18cc17a48 0x18cc12f60 0x18cbe3f64 0x18d53931c 0x18d53b8a8 0x18d5347c0 0x1836aa97c 0x1836aa8fc 0x1836aa184 0x1836a7d5c 0x1835c7e58 0x185474f84 0x18cc4767c 0x101157170 0x1830e456c)
libc++abi.dylib: terminating with uncaught exception of type NSException

Error log when I run the app on simulator (without checking if(MFMessageComposeViewController.canSendText()))

2018-01-29 12:07:49.395714+0530 EWS[3533:67163] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Application tried to present a nil modal view controller on target <EWS.BlockVC: 0x7f899c61db10>.'
*** First throw call stack:

Any help would be appreciated.


Solution

  • Okay,

    When you run it in iPhone : The crash log clearly states that "Only RGBA or White color spaces are supported in this situation." So by hint I would say you are assigning color somewhere, (Some Global tint, navigation bar tint) , which doesn't apply to a MFMessageComposeViewController, hence its crashing.

    When you run it in the simulator :

    if (MFMessageComposeViewController.canSendText()), this line will prevent it from initialising the MFMessageComposeViewController, in the simulator as it cant send text, hence when you try to present it, its not yet initialised and crashing.

    On a second thought, as per your code : self.presentViewController(composeVC, animated: true, completion: nil), this line should not even be called while running in the simulator as this line is inside the if statement, which wont get through.

    Also change the tint color or any while initialising the controller, and tell me what the results are.