Использование возможности iOS 11 NEHotspotConfiguration на моделируемом устройстве, а не только на физическом устройстве - PullRequest
0 голосов
/ 17 мая 2018

Я использую класс NEHotspotConfiguration в iOS 11 для подключения к известной сети Wi-Fi. Это приложение React Native отлично работает на физическом устройстве, и я могу программно подключиться к сети, используя класс NEHotspotConfiguration на iOS 11. Однако, когда я пытаюсь собрать / запустить его в симуляторе, я получаю следующую ошибку, которая предотвращает я даже от запуска приложения:

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

Есть ли способ продолжать использовать симулятор для тестирования остальной части моего приложения с включенной этой возможностью, даже если я не смогу использовать эту возможность для изменения Wi-Fi в симуляторе?

1 Ответ

0 голосов
/ 19 мая 2018

Могут быть и другие варианты, но я нашел следующий потенциальный ответ в комментариях к средней статье, которая привела меня к одному решению:
https://medium.com/@ercp42/i-got-this-error-ceacd08191b3
«Для тех, кто испытывает ту же проблему, я исправил ее, обернув импорт NetworkExtension и код, в котором он используется, с #if! TARGET_IPHONE_SIMULATOR, чтобы обойти эту проблему».

Это было немного больше, по крайней мере для меня.
Я действительно обернул реализацию @implementation IOSWifiManager в файле IOSWifiManager.m с #if TARGET_OS_IPHONE && !TARGET_OS_SIMULATOR и оставил гораздо более простое выражение else, чтобы построить его на симуляторе:

#else

@implementation IOSWifiManager  
RCT_EXPORT_MODULE();  
@end

#endif

Я также вошел в настройки сборки и в разделе «Связывание других флагов компоновщика» изменил значения для симулятора iOS и любой архитектуры на следующее:

"OTHER_LDFLAGS[arch=*]" = (
    "$(inherited)",
    "-ObjC",
    "-lc++",
    "-framework",
    NetworkExtension,
);
    "OTHER_LDFLAGS[sdk=iphonesimulator*]" = (
    "$(inherited)",
    "-ObjC",
    "-lc++",
);

Наконец, я изменил инфраструктуру сетевых расширений с обязательной на необязательную и убедился, что мы поддерживаем правильные архитектуры сборки. Надеюсь, это поможет любому, кто столкнется с той же проблемой!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...