为OS X创建静态框架
通过使用轻微的黑客攻击,可以为iOS创建静态框架。 静态框架使用起来非常方便:它们可以简单地放入新的项目中而无需额外的步骤(如将它们添加到构建中并添加标题搜索路径)。
我最近开始做OS X编程,我注意到的第一件事情是静态框架似乎不可用。 动态框架显然是可用的并且是推荐的,但是因为我想为应用程序使用(而不是安装在/Library/Frameworks
)创建一个小型私有框架,所以在新的应用程序项目中使用动态框架仍然需要一些额外的步骤。
在我的理想世界中,我会创建一个静态框架(一个包含头文件和一个编译后的.a
文件的框架),将框架拖放到一个新项目上,然后开始编码。 有什么办法可以在OS X上创建这样的静态框架吗?
PS我已经尝试在正常的框架项目中将Mach-O输出类型设置为“静态库”,但我刚刚得到错误Framework target has invalid MACH_O_TYPE value of 'staticlib'.
。
您可以在Mac OS X上创建动态框架。在动态框架中,您可以将LD_DYLIB_INSTALL_NAME设置为@ rpath / Foo.framework / Versions / A / Foo
如果你有一个应用程序想要链接这个框架,那么你确保你运行的是
install_name_tool -add_rpath <rpath> <full-path-to-app-binary>
所以如果我有Foo.app
install_name_tool -add_rpath Foo.app/Contents/Library Foo.app/Contents/MacOS/Foo
现在,如果你只是将你的Foo.framework复制到内容/库中,它应该被加载并且一切都应该工作。
我希望这有帮助。
可能更简单的是使用带有公共标题的静态库。 当您构建静态库时,您可以让Xcode自动为您复制标题。 在您的目标中,您可以将文件夹添加到搜索路径中。
如果您使用静态库,Xcode将剥离您的应用程序并不真正需要的一些死代码,但会将其编译到静态库中。
静态框架在OS X上并不真正支持。无论如何它们都非常脆弱,并且解决了iOS上存在的特定问题,而不是OS X上的问题。
如果您想让开发人员轻松使用您创建的库,您可以选择以下几个选项:
@rpath/<library name>
),则下游开发人员只需将框架复制到其Xcode项目中,并将其应用程序的运行时搜索路径设置为@executable_path/../Frameworks
)。