2012-04-05 5 views
3

私は本当に、誰かが私にそれを説明することを望んでいます。 デバイスのMACアドレスを使用するアプリケーションを作成していますが、このコードはシミュレータでは完全に機能しますが、デバイスでは機能しません。このコードはXcodeシミュレータでは動作しますが、デバイスでは動作しないのはなぜですか?

私は質問Get router mac (without system call for ARP) in Objective-C

#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 

ので、私の質問は、なぜこの出来事は、シミュレータ上で実行中の違いは何ですとデバイス? ありがとうございます。

+0

Hiiあなたは同じ問題に直面している解決策がありますか? – Nikunj

答えて

1

iOSデバイスSDKでは、ヘッダーファイルが欠落しています。 Appleは何らかの理由でそれを使用することを望んでいません。

#define IFT_ETHER 0x6  /* Ethernet CSMACD */ 

と完全にライン

#include <net/if_types.h> 

を削除:あなただけのコードが動作するようにしたい場合は、必要な定義を抽出しようとすることができます。これはプラットフォームとの互換性を損なうが、この定数は他の値に定義することができる。

+0

* "...これは、この定数が他の値に定義されているプラ​​ットフォームとの互換性を損なうものですが" * - まあ、 '/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/ SDKs/iPhoneOS6.1.sdk'はその定義が全くないことを示しています。だから彼は岩と険しい場所の間にいる。彼は可能な値(0から10までのような)を反復し、彼が良い応答を返すまで待ち​​ます。彼が良い応答を得たら、インターフェイスのプロパティをチェックして、メディアが優先されていることを確認します。 – jww

関連する問題