/usr/include 中的所有标头是不是都被视为 MAS 上的公共 API?

Posted

技术标签:

【中文标题】/usr/include 中的所有标头是不是都被视为 MAS 上的公共 API?【英文标题】:Are all headers in /usr/include considered to be Public API on the MAS?/usr/include 中的所有标头是否都被视为 MAS 上的公共 API? 【发布时间】:2011-06-21 09:49:52 【问题描述】:

在提交 Mac App Store 时,是否保证 /usr/include 中的所有标头都被视为公共 API 的一部分?

以文件 /usr/include/copyfile.h 为例

此文件中的 cmets 表示:“此实现不完整,接口可能会在未来版本中更改。”这是否会使标头不公开?如何确定标头是否被视为公开?

【问题讨论】:

【参考方案1】:

如果有记录,它就是公开的。您的系统上有很多 .h 文件引用私有 API。这不是你知道它是否安全的方式。它是存储安全的,它记录在框架文档中。

【讨论】:

您有时间在 Xcode 文档中查找 copyfile 吗?你会在那里看到它。它说“在 Mac OS X 10.5 中引入了 copyfile() API”。这是否意味着使用 /usr/include/copyfile.h 标头可以保证 MAS 安全?【参考方案2】:

阅读this 文档页面的底部。

摘录:

Mac OS X 在 /usr/lib 目录及其子目录中包含许多动态库。动态共享库由它们的 .dylib 扩展名标识。库的头文件位于 /usr/include。

这里似乎暗示了 OS X 中包含的 .dylib 库是在您的应用程序中使用的公平游戏,但您需要注意,它们不保证具有特定版本的库例如Lion,因此您应该尽可能包含最通用的版本。

正如@Dan 所说,另一个可以提示您使用可以使用的库的事情是它是否具有联机帮助页。 copyfile 有一个手册页,所以可以使用(因为他们正在向您展示如何使用它!)。为了让事情变得更加模糊,请查看getattrlist 手册页,然后搜索“copyfile”。您可以阅读的卷功能标志之一表示支持 second copyfile() API。因此,在这种情况下,有 2 个 copyfile() API,您只能将一个与手册页一起使用,因为另一个在此处被标记为私有且未记录。

任何不包含在框架文件夹中且与.dylib 或联机帮助页不匹配的标题,我通常会避免使用。

【讨论】:

以上是关于/usr/include 中的所有标头是不是都被视为 MAS 上的公共 API?的主要内容,如果未能解决你的问题,请参考以下文章

CMake 是不是将包含的标头中的所有内容编译到可执行文件中,还是仅将主类中使用的部分编译为可执行文件?

c++ 的路径设置包括 vim 的标头

“usr/include/dbus-1.0”对于maliit框架中的交叉编译是不安全的

javascript执行环境以及作用域链的理解

分块传输编码 - 浏览器行为

HttpRequestMessage 多个自定义标头相互覆盖