Соединение сокета Peertalk возвращает -1 при попытке соединения - PullRequest
0 голосов
/ 22 мая 2019

Я создаю приложение, которое связывается между Mac и iPhone. Я использую Peertalk для этой цели.

Я только что скопировал файлы ядра Peertalk в мой проект и запустил, но соединение через сокет вернуло -1

  // Connect socket
  struct sockaddr_un addr;
  addr.sun_family = AF_UNIX;
  strcpy(addr.sun_path, "/var/run/usbmuxd");
  socklen_t socklen = sizeof(addr);
  if (connect(fd, (struct sockaddr*)&addr, socklen) == -1) {
    if (error) *error = [[NSError alloc] initWithDomain:NSPOSIXErrorDomain code:errno userInfo:nil];
    return NO;
  }

Но когда я запускаю исходный код, соединение было успешным, и я получаю объект PTUsbHub, и соединение возвращает значение success.

Пример кода в объекте c

- (void)startListeningForDevices {
  NSNotificationCenter *nc = [NSNotificationCenter defaultCenter];

  [nc addObserverForName:PTUSBDeviceDidAttachNotification object:PTUSBHub.sharedHub queue:nil usingBlock:^(NSNotification *note) {
NSNumber *deviceID = [note.userInfo objectForKey:@"DeviceID"];
    //code to connect 
  }];

  [nc addObserverForName:PTUSBDeviceDidDetachNotification object:PTUSBHub.sharedHub queue:nil usingBlock:^(NSNotification *note) {
    NSNumber *deviceID = [note.userInfo objectForKey:@"DeviceID"];
    //code to disconnect
  }];
}

Мой быстрый код

@objc private func startListening(){
    let nc = NotificationCenter.default
    nc.addObserver(forName: NSNotification.Name.PTUSBDeviceDidAttach, object: PTUSBHub.shared(), queue: nil) { (notification) in
        let deviceID = notification.userInfo?["DeviceID"] as? NSNumber
    }


    nc.addObserver(forName: NSNotification.Name.PTUSBDeviceDidDetach, object: PTUSBHub.shared(), queue: nil, using: { note in
        let deviceID = note.userInfo?["DeviceID"] as? NSNumber

  }

Таким образом, проблема в том, что я не получаю уведомление о присоединении или отсоединении, потому что соединение было неудачным.

Есть ли необходимость в разрешении? или вы можете кто-нибудь выяснить, в чем реальная проблема?

Заранее спасибо

1 Ответ

0 голосов
/ 22 мая 2019

Наконец-то я нашел свою ошибку. Речь идет о приложении песочнице. Вы можете прочитать статью о песочнице

  1. https://developer.apple.com/documentation/security/app_sandbox_entitlements
  2. https://developer.apple.com/app-sandboxing/

Это функция безопасности Mac.

Я снял флажок в изолированной программной среде приложения, и оно работает.

Thankyou

...