I am using UIActivityViewController to share image. After the WhatsApp recent changes to allow share i am able to see WhatsApp in the share option. I am sharing an          
        
It seems like WhatsApp shares image only when the array contains images and not combination of both image and text.
func shareImage() {
    //var messageStr:String  = "Check out my awesome iPicSafe photo!"
    var img: UIImage = currentPhoto!
    //var shareItems:Array = [img, messageStr]
    var shareItems:Array = [img]
    let activityViewController:UIActivityViewController = UIActivityViewController(activityItems: shareItems, applicationActivities: nil)
    activityViewController.excludedActivityTypes = [UIActivityTypePrint, UIActivityTypePostToWeibo, UIActivityTypeCopyToPasteboard, UIActivityTypeAddToReadingList, UIActivityTypePostToVimeo]
    self.presentViewController(activityViewController, animated: true, completion: nil)
}
In Swift 3 use this code
 @IBAction func whatsappShareWithImages(_ sender: AnyObject)
    {
        let urlWhats = "whatsapp://app"
        if let urlString = urlWhats.addingPercentEncoding(withAllowedCharacters:CharacterSet.urlQueryAllowed) {
            if let whatsappURL = URL(string: urlString) {
                if UIApplication.shared.canOpenURL(whatsappURL as URL) {
                    if let image = UIImage(named: "whatsappIcon") {
                        if let imageData = UIImageJPEGRepresentation(image, 1.0) {
                            let tempFile = URL(fileURLWithPath: NSHomeDirectory()).appendingPathComponent("Documents/whatsAppTmp.wai")
                            do {
                                try imageData.write(to: tempFile, options: .atomic)
                                self.documentInteractionController = UIDocumentInteractionController(url: tempFile)
                                self.documentInteractionController.uti = "net.whatsapp.image"
                                self.documentInteractionController.presentOpenInMenu(from: CGRect.zero, in: self.view, animated: true)
                            } catch {
                                print(error)
                            }
                        }
                    }
                } else {
                    // Cannot open whatsapp
                }
            }
        }
    }
Add this code in your app "plist"
  <key>LSApplicationQueriesSchemes</key>
    <array>
        <string>whatsapp</string>
    </array>
You can also refer to small app for reference : https://github.com/nithinbemitk/iOS-Whatsapp-Share
To share Text || Image try this Swift.
func share(shareText shareText:String?,shareImage:UIImage?){
    var objectsToShare = [AnyObject]()
    if let shareTextObj = shareText{
        objectsToShare.append(shareTextObj)
    }
    if let shareImageObj = shareImage{
        objectsToShare.append(shareImageObj)
    }
    if shareText != nil || shareImage != nil{
        let activityViewController = UIActivityViewController(activityItems: objectsToShare, applicationActivities: nil)
        activityViewController.popoverPresentationController?.sourceView = self.view
        presentViewController(activityViewController, animated: true, completion: nil)
    }else{
        print("There is nothing to share")
    }
}
To share just call like this:
let imageToShare = UIImage(named: "myImage")
share(shareText: "Sharing this text", shareImage: imageToShare)