在模拟设备上使用iOS 11 NEHotspotConfiguration功能,而不仅仅是物理设备

时间:2018-05-16 22:18:53

标签: ios xcode react-native ios-simulator

我正在使用iOS 11中的NEHotspotConfiguration类连接到已知的wifi网络。这个React Native应用程序在物理设备上工作正常,我能够使用iOS 11上的NEHotspotConfiguration类以编程方式连接到网络。但是,当我尝试在模拟器中构建/运行它时,我得到以下错误,防止我甚至推出应用程序:

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)

有没有办法继续使用模拟器测试我的应用程序的其余部分启用此功能,即使我无法使用该功能更改模拟器中的wifi?

1 个答案:

答案 0 :(得分:0)

可能还有其他选择,但我在一篇介绍一个解决方案的中篇文章的评论中找到了以下可能的答案:
https://medium.com/@ercp42/i-got-this-error-ceacd08191b3
“对于遇到相同问题的任何人,我通过将NetworkExtension导入和与#if!TARGET_IPHONE_SIMULATOR一起使用的代码包装在一起来修复它。”

但是,至少在我看来,这还不止于此 我确实用@implementation IOSWifiManager#if TARGET_OS_IPHONE && !TARGET_OS_SIMULATOR实现包装在IOSWifiManager.m文件中,并留下了一个更简单的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++",
);

最后,我将网络扩展框架从需要更改为可选,并确保我们支持正确的构建体系结构。希望这可以帮助任何遇到同样问题的人!