Swift框架下的IFADRS

Swift框架下的IFADRS,swift,Swift,由于框架不支持桥接头,如何将ifaddrs.h导入框架内的swift文件 或者有没有其他方法可以在局域网上获取设备ip地址,这在iOS和OS X上都可以使用?您可以使用的地址或地址方法。在应用程序目标中,桥接头起作用。在框架目标中,事情更加棘手。在Swift代码中,我们只能导入所谓的模块。诀窍是定义一个模块映射,该映射提供所需的C库资源,并通过将构建设置(build settings->SWIFT Compiler->Import path)中的SWIFT\u INCLUDE\u路径设置为模块映

由于框架不支持桥接头,如何将
ifaddrs.h
导入框架内的swift文件


或者有没有其他方法可以在局域网上获取设备ip地址,这在iOS和OS X上都可以使用?

您可以使用的
地址
地址
方法。

在应用程序目标中,桥接头起作用。在框架目标中,事情更加棘手。在Swift代码中,我们只能导入所谓的模块。诀窍是定义一个模块映射,该映射提供所需的C库资源,并通过将构建设置(build settings->SWIFT Compiler->Import path)中的SWIFT\u INCLUDE\u路径设置为模块映射文件的路径,使其可见。有两种方法可以做到这一点:

1) 下面允许通过直接公开ifaddrs.h接口实现纯swift实现,但遗憾的是需要头文件的精确路径,如果您打算将库作为开源发布,这是不可取的

模块模块映射

module ifaddrs [system] {
    header
"/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/usr/include/ifaddrs.h"
    export *
}
module NetworkTools {
    header "Obj-C Tools/NetworkTools.h"
    export *
}
添加到swift代码中

import ifaddrs
import NetworkTools
2) 第二种方法是创建Objective-C类,该类提供到ifaddrs.h的接口,但隐藏了源*.m文件中ifaddrs.h的实际导入

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;
}
添加到swift代码中

import ifaddrs
import NetworkTools
有关这一切如何协同工作的更多信息,请查看:

Github上的示例项目:


以及关于Clang模块的文章:

我需要它在iOS和OS X上工作,因此由于NSHost仅在OS X中可用,因此我无法使用它。您可能需要将其添加到您的问题中。