Skip to content
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

Undefined Symbol: _OBJC_CLASS_$_ESPTouchTask, Undefined Symbol: _OBJC_CLASS_$_ESPTools #63

Open
Abhesheksh opened this issue Nov 7, 2021 · 3 comments

Comments

@Abhesheksh
Copy link

Abhesheksh commented Nov 7, 2021

Error :

Undefined symbols for architecture x86_64:
"OBJC_CLASS$_ESPTouchTask", referenced from:
objc-class-ref in homeVC.o
"OBJC_CLASS$_ESPTools", referenced from:
objc-class-ref in addDeviceVC.o
objc-class-ref in homeVC.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

My code : the two files where the error originates :

import UIKit
import FBSDKLoginKit
import Firebase
import FBSDKCoreKit
import SystemConfiguration.CaptiveNetwork
import FirebaseFirestore
import FirebaseAuth
import SystemConfiguration.CaptiveNetwork


class homeVC: UIViewCon
![Screenshot 2021-11-07 at 12 37 28 PM](https://user-images.githubusercontent.com/9547435/140636034-60d5505a-d765-47ee-b804-5d8e4fbf678d.png)
![Screenshot 2021-11-07 at 12 37 21 PM](https://user-images.githubusercontent.com/9547435/140636041-e16d8aea-2503-44ed-8689-2fdfa4641f45.png)
![Screenshot 2021-11-07 at 12 37 11 PM](https://user-images.githubusercontent.com/9547435/140636043-d64b5a36-94b2-45c7-b725-e5a5b75f1471.png)
![Screenshot 2021-11-07 at 12 36 31 PM](https://user-images.githubusercontent.com/9547435/140636045-abd544cf-44e8-4271-89d0-7c024b3fce5e.png)
troller, ESPTouchDelegate {
    
    
  
    
   
var userNameString: String?
let db = Firestore.firestore()

    
    
    
    
   
    @IBAction func addSmartDevice(_ sender: UIButton) {
        
               //let secretKey = "897219736"
              // var aes : ESPAES

              // aes = ESPAES.init(key: secretKey)
        
        var task : ESPTouchTask
            
        task = ESPTouchTask.init(apSsid: ESPTools.getCurrentWiFiSsid(), andApBssid: ESPTools.getCurrentBSSID(), andApPwd: "12345678")

               task.setEsptouchDelegate(self)
               //UIApplication.shared.windows[0].actv
               //task.executeForResult()
    
               task.setPackageBroadcast(true)
               DispatchQueue.global(qos: .userInitiated).async {
                   let result = task.executeForResult()!
                   // 在主线程中显示结果
                   DispatchQueue.main.async {
                       // 隐藏等待框
                       // UIApplication.shared.windows[0].hideToastActivity()
                   // 重新启用连接按钮
                   //self.nextStepBtn.enable()
                   // 判断配置结果
                       if (result.isSuc) {
                           print("SUCCESS")
                           self.onEsptouchResultAdded(with: result)
                        
                            //PASS EMAIL TO THE DEVICE
                        if let email = Auth.auth().currentUser?.email {
                             let url = URL(string: "http://192.168.1.199/get?email=\(email)")!
                             var request = URLRequest(url: url)
                            request.httpMethod = "GET"
                            let emailTask = URLSession.shared.dataTask(with: request) { (data, response, error) in
                                guard let data = data,
                                let response = response as? HTTPURLResponse,
                                error == nil else
                                {
                                    print("error", error ?? "Unknown Error")
                                return
                                }
                                let responseString = String(data : data, encoding : .utf8)
                                print("response String = \(responseString)")
                            }
                            emailTask.resume()
                            
                            
                        
                        }
                       
                        
                            //END PASS EMAIL
                        
                      }
    else {
                           print("FAILURE")
                       }
                      }
               }
               
        
    }
    
    func onEsptouchResultAdded(with result: ESPTouchResult!) {
          print(result.description)
      }

import UIKit
import SystemConfiguration.CaptiveNetwork

class addDeviceVC: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        printData()
        
        
        // Do any additional setup after loading the view, typically from a nib.
        ESPTools.getCurrentBSSID()
        ESPTools.getCurrentBSSID()

    }
    
    
    func getSSID() -> String? {
        guard let interface = (CNCopySupportedInterfaces() as? [String])?.first,
            let unsafeInterfaceData = CNCopyCurrentNetworkInfo(interface as CFString) as? [String: Any],
            let ssid = unsafeInterfaceData["SSID"] as? String else{
                return nil
        }
        return ssid
    }



    // Return IP address of WiFi interface (en0) as a String, or `nil`
    func getWiFiAddress() -> String? {
        var address : String?

        // Get list of all interfaces on the local machine:
        var ifaddr : UnsafeMutablePointer<ifaddrs>?
        guard getifaddrs(&ifaddr) == 0 else { return nil }
        guard let firstAddr = ifaddr else { return nil }

        // For each interface ...
        for ifptr in sequence(first: firstAddr, next: { $0.pointee.ifa_next }) {
            let interface = ifptr.pointee

            // Check for IPv4 or IPv6 interface:
            let addrFamily = interface.ifa_addr.pointee.sa_family
            if addrFamily == UInt8(AF_INET) || addrFamily == UInt8(AF_INET6) {

                // Check interface name:
                let name = String(cString: interface.ifa_name)
                if  name == "en0" {

                    // Convert interface address to a human readable string:
                    var hostname = [CChar](repeating: 0, count: Int(NI_MAXHOST))
                    getnameinfo(interface.ifa_addr, socklen_t(interface.ifa_addr.pointee.sa_len),
                                &hostname, socklen_t(hostname.count),
                                nil, socklen_t(0), NI_NUMERICHOST)
                    address = String(cString: hostname)
                }
            }
        }
        freeifaddrs(ifaddr)
        return address
    }

    func getWiFiSsid() -> String? {
        var ssid: String?
        if let interfaces = CNCopySupportedInterfaces() as NSArray? {
            for interface in interfaces {
                if let interfaceInfo = CNCopyCurrentNetworkInfo(interface as! CFString) as NSDictionary? {

                    ssid = interfaceInfo[kCNNetworkInfoKeySSID as String] as? String
                }
            }
        }
        return ssid
    }

    func getSSIDtwo() -> String? {
        let interfaces = CNCopySupportedInterfaces()
        if interfaces == nil {
            //print("Not interfaces")
            return nil
        }

        let interfacesArray = interfaces as! [String]
        if interfacesArray.count <= 0 {
            return nil
        }
        let interfaceName = interfacesArray[0] as String
        let unsafeInterfaceData = CNCopyCurrentNetworkInfo(interfaceName as CFString)
        if unsafeInterfaceData == nil {
            return nil
        }

        let interfaceData = unsafeInterfaceData as! Dictionary <String,AnyObject>
        return interfaceData["SSID"] as? String
    }

    func printData() {
        let one = getWiFiSsid();
        let two = getSSIDtwo();
        let three = getSSID();
        print("PRINTING SSID DETAILS. PRINTING SSID DETAILS. SSID DETAILS FOLLOWING")

        print(one);
        print(two);
        print(three);
    }}

Bridging Header :

#ifndef Storme_Bridging_Header_h
#define Storme_Bridging_Header_h

#import "ESPTouch/esptouch/ESPTouchTask.h"
#import "ESPTouch/esptouch/ESPTouchResult.h"
#import "Common/ESPUtils/ESP_NetUtil.h"
#import "ESPTouch/esptouch/ESPTouchDelegate.h"
#import "Common/ESPUtils/ESPAES.h"
#import "Common/AFNetworking/AFNetworking.h"

#import "Common/ESPUtils/ESPTools.h"

#endif /* Storme_Bridging_Header_h */

@Abhesheksh
Copy link
Author

Screenshot 2021-11-07 at 12 37 28 PM
Screenshot 2021-11-07 at 12 37 21 PM
Screenshot 2021-11-07 at 12 37 11 PM
Screenshot 2021-11-07 at 12 36 31 PM

@ducdx-0072
Copy link

@Abhesheksh Have you been able to fix this error by chance? If yes, please share your solution with me. Currently, I got the error and still cannot fix it. I've tried many ways but with no success. Thank you

@Abhesheksh
Copy link
Author

Hi, I don't have my system with me right now, I will get back to you with. I don't exactly remember what I did to sort this out but I think it was an issue with the bridging header itself. Let me check & get back to you in 48 hours.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants