2014-09-12 2 views
5

Поскольку фреймворки не поддерживают перемычки заголовков, как мне импортировать ifaddrs.h в быстрый файл внутри рамки?ifaddrs в Swift Framework

Или есть другой способ получить IP-адрес устройства в локальной сети, который будет работать как на iOS, так и на OS X?

ответ

0

NSHostaddress или addresses методы.

+0

Мне нужно, чтобы он работал как на iOS, так и на OS X, так как NSHost доступен только в OS X, я не могу его использовать. – Asyra

+2

Возможно, вы захотите добавить это к своему вопросу. – zneak

6

В целевом приложении мостовой заголовок делает трюк. Внутри рамочной цели все сложнее. Внутри кода Swift мы можем импортировать только так называемые модули. Фокус в том, чтобы определить карту модуля, которая предоставляет нужный ресурс библиотеки C и сделать его видимым, установив SWIFT_INCLUDE_PATHS внутри параметров сборки (Build Settings-> Swift Compiler-> Import Paths) на путь файла карты модуля. Для этого есть два способа:

1) Ниже приведена возможность реализации чистой быстрой реализации путем непосредственного воздействия на интерфейс ifadds.s.htm, но, к сожалению, требуется точный путь к файлу заголовка, что нежелательно, если вы когда-либо собирается выпустить вашу библиотеку как открытый источник.

module.modulemap

module ifaddrs [system] { 
    header 
"/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/usr/include/ifaddrs.h" 
    export * 
} 

Добавить в стремительный код

import ifaddrs 

2) Второй способ заключается в создании класса Objective-C, который обеспечивает интерфейс для ifaddrs.h но скрывает фактический импорт ifaddrs.h исходного файла * .m.

NetworkTools.h

@interface NetworkTools : NSObject 

+ (NSDictionary *)getIFAddresses; 

@end 

NetworkTools.m

#import "NetworkTools.h" 
#include <ifaddrs.h> 
#include <arpa/inet.h> 
#include <net/if.h> 
#include <netdb.h> 

@implementation NetworkTools 

+ (NSDictionary *)getIFAddresses { 
    NSDictionary *addresses; 
// code 
    return addresses; 
} 

module.modulemap

module NetworkTools { 
    header "Obj-C Tools/NetworkTools.h" 
    export * 
} 

Добавить в стремительный код

import NetworkTools 

Для получения дополнительной информации о том, как все это работает вместе, проверьте:

Пример проекта на Github: https://github.com/danieleggert/mixed-swift-objc-framework

Как также статью о модулях лязга: http://clang.llvm.org/docs/Modules.html

Смежные вопросы