为什么这个代码在Xcode模拟器上工作,但不能在设备上工作?

我真的希望有人向我解释。 我正在编写一个使用它的设备MAC地址的应用程序,这个代码完全可以在模拟器上工作,但是在设备上不起作用。

我从Objective-C的问题获取路由器mac(没有系统调用ARP)的代码

#include <stdio.h> #include <sys/types.h> #include <stdio.h> #include <string.h> #include <sys/socket.h> #include <net/if_dl.h> #include <ifaddrs.h> #include <net/if_types.h> char* getMacAddress(char* macAddress, char* ifName) { int success; struct ifaddrs *addrs; struct ifaddrs *cursor; const struct sockaddr_dl *dlAddr; const unsigned char* base; int i; success = getifaddrs(&addrs) == 0; if (success) { cursor = addrs; while (cursor != 0) { const struct sockaddr_dl *socAddr = (const struct sockaddr_dl *)cursor->ifa_addr; _Bool afLinkFamily = (cursor->ifa_addr->sa_family == AF_LINK); /* Ethernet CSMA/CD */ _Bool sdlIFTEther = (socAddr->sdl_type == IFT_ETHER); if ((afLinkFamily) && sdlIFTEther && strcmp(ifName, cursor->ifa_name) == 0) { dlAddr = (const struct sockaddr_dl *) cursor->ifa_addr; base = (const unsigned char*)&dlAddr->sdl_data[dlAddr->sdl_nlen]; strcpy(macAddress, ""); for (i = 0; i < dlAddr->sdl_alen; i++) { if (i != 0) { strcat(macAddress, ":"); } char partialAddr[3]; sprintf(partialAddr, "%02X", base[i]); strcat(macAddress, partialAddr); } } cursor = cursor->ifa_next; } freeifaddrs(addrs); } return macAddress; } 

它给了我一个错误:

 'net/if_types.h' file not found 

所以我的问题是为什么会发生这种情况,在模拟器和设备上运行有什么区别? 先谢谢你。

头文件只是在iOS设备SDK中丢失。 苹果不希望你使用它,不pipe出于何种原因。 如果你只是想让代码工作,你可以尝试提取所需的定义:

 #define IFT_ETHER 0x6 /* Ethernet CSMACD */ 

并删除线

 #include <net/if_types.h> 

完全。 虽然这打破了与常量可能被定义为其他值的平台的兼容性。