2012-10-29 9 views
5

मैं एक ओएस एक्स एप्लीकेशन लिख रहा हूं जो वायरलेस सिग्नल शक्ति निर्धारित करने की क्षमता पर निर्भर करता है, लेकिन मैं यह नहीं समझ सकता कि इसे सैंडबॉक्स में किस हकदारता का उपयोग करना है।सैंडबॉक्सिंग coreWLAN?

जब भी मैं

NSMutableArray *scanResults; 
CWInterface *currentInterface = [CWInterface interface]; 
NSLog(@"currInterface: %@\n", currentInterface); 
NSMutableDictionary *signalsDict = [[NSMutableDictionary alloc] init]; 
    NSError *err = nil; 
    scanResults = [NSMutableSet setWithSet:[currentInterface scanForNetworksWithSSID:nil error:&err]]; 

का उपयोग मैं सभी हकों XCode में चेक करने के बाद त्रुटि The operation couldn't be completed. (com.apple.coreWLAN.error error 1.) मिलता है। मुझे क्या हकदारता है?

CoreWLANWirelessManager नमूना प्रोजेक्ट एक ही समस्या है।

+0

क्या आपके पास कोई भाग्य है? –

+0

दुर्भाग्य से, मैंने नहीं किया। आपके पास कोई विचार है? –

+0

आप CWInterface ऑब्जेक्ट पर rssi प्रॉपर्टी का उपयोग करने का प्रयास कर सकते हैं। यह "इंटरफेस के लिए वर्तमान कुल सिग्नल शक्ति संकेत (आरएसएसआई) माप (डीबीएम) दिखाता है।" यह सैंडबॉक्स पर्यावरण में काम करता है। –

उत्तर

0

आप dlfcn.h लाइब्रेरी का उपयोग कर Apple80211 निजी ढांचे का उपयोग करना चाह सकते हैं। एक iPhone उदाहरण यहां पाया जा सकता:

http://www.csse.uwa.edu.au/~chris/iphone/APlogger/

स्रोत फ़ाइल डाउनलोड करें और स्कैनर मॉड्यूल की जांच।

सारांश में, आप कुछ इस तरह के साथ ऊपर आ जाएगा:

#define IF_NAME "en0" 
#include <dlfcn.h> 

- (void)performScan 
{ 
    int (*open)(void *); 
    int (*bind)(void *, NSString *); 
    int (*close)(void *); 
    int (*scan)(void *, NSArray **, void *); 
    void *libHandle; 
    void *airportHandle; 

    libHandle = dlopen("/System/Library/Frameworks/Preferences.framework/Preferences", RTLD_LAZY); 
    open = dlsym(libHandle, "Apple80211Open"); 
    bind = dlsym(libHandle, "Apple80211BindToInterface"); 
    scan = dlsym(libHandle, "Apple80211Scan"); 
    close = dlsym(libHandle, "Apple80211Close"); 

    open(&airportHandle); 
    bind(airportHandle, @IF_NAME); 
    NSArray  *found; 
    NSDictionary *params = [[NSDictionary alloc] init]; 
    scan(airportHandle, &found, params); 

    int nnw = [found count]; 
    for(int i=0 ; i < nnw ; i++) { 
     NSDictionary *nw = [found objectAtIndex:i]; 
     NSString *ssid = [self fixSSID:nw]; 
     // RSSI indicates signal strength 
     int rssi = [[nw objectForKey:@"RSSI"] intValue]; 
    } 
    // Cleanup 
    close(airportHandle); 
    dlclose(libHandle); 
} 

-(NSString *)fixSSID:(NSDictionary *)nw 
{ 
    if ([[nw objectForKey:@"HIDDEN_NETWORK"] boolValue]) 
    return @"<hidden>"; 
    else 
    return [nw objectForKey:@"SSID_STR"]; 
} 

ध्यान दें कि अगर आप अपने iOS एप्लिकेशन में निजी चौखटे का उपयोग करें, आप एप्लिकेशन स्टोर पर उन्हें प्रकाशित करने के लिए सक्षम नहीं होगा (एप्पल को अस्वीकार कर देंगे आपका ऐप क्योंकि Apple80211 ढांचे के लिए कोई सार्वजनिक दस्तावेज नहीं है)। लेकिन चूंकि आपका प्रश्न ओएसएक्स विकास के संबंध में है, यह आपके मामले के लिए लागू नहीं होता है।

उम्मीद है कि यह मदद करता है।
फ़ारज़ान डोरूडगर

+1

एंटाइटेलमेंट्स और सैंडबॉक्सिंग के साथ मेरा उद्देश्य ओएस एक्स ऐप स्टोर पर एप्लिकेशन को वितरित करने में सक्षम होना था। अगर मैं सैंडबॉक्सिंग बंद कर देता हूं, तो CWInterface पूरी तरह से काम करता है। –

0

कोरवॉलन सैंडबॉक्स किए गए ऐप्स पर बिल्कुल उपलब्ध नहीं प्रतीत होता है।

ऐप्पल के डेवलपर दस्तावेज़ों में कहा गया है "ऐप सैंडबॉक्स के साथ, आपका ऐप सिस्टम के नेटवर्क कॉन्फ़िगरेशन को संशोधित नहीं कर सकता है (चाहे सिस्टम कॉन्फ़िगरेशन फ्रेमवर्क, कोरवालैन फ्रेमवर्क या अन्य समान एपीआई के साथ)", जो कि पढ़ने के लिए लगता है लेकिन सेटिंग्स लिखना नहीं ठीक हो सकता है, लेकिन यह प्रैक्टिस में काम नहीं कर रहा है, और इसकी पुष्टि ऐप्पल डीटीएस द्वारा की गई है: https://forums.developer.apple.com/thread/11307

0

वाईफ़ाई डायग्नोस्टिक ऐप के लिए एंटाइटेलमेंट्स जो मैक ओएस एक्स 10.11.1 के साथ जहाजों के बारे में है,/सिस्टम/लाइब्रेरी/कोर सर्विसेज/एप्लीकेशन/पर स्थित है। एंटाइटेलमेंट की जांच करना मुझे लगता है कि इसमें निम्नलिखित हैं: com.apple.wifi.associate, com.apple.wifi.scan, com.apple.wifi.set_channel, com.apple.wifi.start_autojoin, com.apple.wireless-diagnostics, और com.apple.wireless-diagnostics.basic_report।

क्या हम केवल एक सैंडबॉक्स में काम कर रहे प्राणियों को प्राप्त करने में सक्षम नहीं हैं?

+0

यह एक अच्छा विचार है, लेकिन जैसा कि आप नहीं जानते कि वे एंटाइटेलमेंट काम करेंगे या गैर-ऐप्पल अनुप्रयोगों द्वारा उपयोग किए जा सकते हैं, यह वास्तव में एक उत्तर से अधिक टिप्पणी है। – blm

+0

मैंने अपने ऐप्स एंटाइटेलमेंट में 'com.apple.wifi.scan' जोड़ने की कोशिश की और यह त्रुटि मिली: '5/30/16 9: 57: 13.925 पूर्वाह्न कार्यरत [526]: नेट की मौत हो गई।istumbler [pid 42688] क्योंकि com.apple.wifi.scan एंटाइटेलमेंट का उपयोग करने की अनुमति नहीं है (त्रुटि कोड -67050) ' – alfwatt

संबंधित मुद्दे