Security.h 中结构的 macOS 文档

2024-04-29

我正在尝试使用Security.h通过 Java 和 JNA 的 macOS 框架。这意味着我需要将某些结构重建为 Java 类。

问题是,当我查看文档中的结构时(this one https://developer.apple.com/reference/security/seckeychainitemref?language=objc,例如),我看到的只是该结构的简短描述,没有提及其字段。在哪里可以获取 Apple 文档中结构体的完整描述?


为了快速查看,您可以找到标题Apple 的开源网站 https://opensource.apple.com/,但很难导航,特别是根据您要检查的操作系统版本,标题位于不同的位置。在所有情况下,我发现它的定义是SecBase.h。例如这是最新 macOS 的版本 https://opensource.apple.com/source/Security/Security-57740.51.3/base/SecBase.h.auto.html.

你就得到了这个:

typedef struct CF_BRIDGED_TYPE(id) SECTYPE(SecKeychainItem) *SecKeychainItemRef;

因此,您可能需要其他标头来跟踪结构的确切字段。更好的方法是安装 XCode 以及您想要的操作系统的框架,然后您将在本地系统上获得标头。例如:

$ ls /Applications/Xcode.app/Contents/Developer/Platforms/*.platform/Developer/SDKs/*.sdk/System/Library/Frameworks/Security.framework/Headers/SecBase.h
/Applications/Xcode.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/Security.framework/Headers/SecBase.h
/Applications/Xcode.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS9.2.sdk/System/Library/Frameworks/Security.framework/Headers/SecBase.h
/Applications/Xcode.app/Contents/Developer/Platforms/AppleTVSimulator.platform/Developer/SDKs/AppleTVSimulator.sdk/System/Library/Frameworks/Security.framework/Headers/SecBase.h
/Applications/Xcode.app/Contents/Developer/Platforms/AppleTVSimulator.platform/Developer/SDKs/AppleTVSimulator9.2.sdk/System/Library/Frameworks/Security.framework/Headers/SecBase.h
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.11.sdk/System/Library/Frameworks/Security.framework/Headers/SecBase.h
/Applications/Xcode.app/Contents/Developer/Platforms/WatchOS.platform/Developer/SDKs/WatchOS.sdk/System/Library/Frameworks/Security.framework/Headers/SecBase.h
/Applications/Xcode.app/Contents/Developer/Platforms/WatchOS.platform/Developer/SDKs/WatchOS2.2.sdk/System/Library/Frameworks/Security.framework/Headers/SecBase.h
/Applications/Xcode.app/Contents/Developer/Platforms/WatchSimulator.platform/Developer/SDKs/WatchSimulator.sdk/System/Library/Frameworks/Security.framework/Headers/SecBase.h
/Applications/Xcode.app/Contents/Developer/Platforms/WatchSimulator.platform/Developer/SDKs/WatchSimulator2.2.sdk/System/Library/Frameworks/Security.framework/Headers/SecBase.h
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/Security.framework/Headers/SecBase.h
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.3.sdk/System/Library/Frameworks/Security.framework/Headers/SecBase.h
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator.sdk/System/Library/Frameworks/Security.framework/Headers/SecBase.h
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator9.3.sdk/System/Library/Frameworks/Security.framework/Headers/SecBase.h

不过,我对在线文档没有很好的解决方案。

另一种方式,从记忆中,它对于在 Java 中为 JNA 重新创建结构的任务更有帮助,那就是构建一个最小的 C 程序(但我不确定如何在 macOS 上做到这一点,与安全框架链接,也许你做),并且将其交给 gdb 打印结构布局 using ptype:

(gdb) whatis v
type = struct complex
(gdb) ptype v
type = struct complex {
    double real;
    double imag;
}

但正如评论中指出的,如果我们在这里尝试,我们会得到:

(gdb) ptype SecKeychainItemRef
type = struct OpaqueSecKeychainItemRef {
  <incomplete type>
}

恐怕这个符号是自愿变得不透明的......由 Brendan 在评论中确认:

我能想到的每一种 macOS 类型都以Ref是不透明类型 (实际上是一个指针),仅用于传递给函数

Here is a debug session with Xcode: Xcode screenshot

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Security.h 中结构的 macOS 文档 的相关文章

随机推荐

  • 引用计数类和多线程

    我是多线程编程的新手 对此我仍然感到困惑 下面是我的引用计数类 class Rbuffer private char m pnData volatile unsigned int mRefCount public Rbuffer int n
  • Twitter Bootstrap - 动态添加/删除选项卡和选项卡内容

    预先感谢您的任何和所有输入 帮助 建议 我正在使用 Twitter Bootstrap 选项卡来组织一些信息 这些选项卡将位于表单页面上 每个选项卡将包含一个 联系人表单 用户可以在提交整个表单之前将多个联系人添加到此页面 div clas
  • ASP.Net Core 中没有智能感知

    通过 Visual Studio 安装 ASP Net Core gt 新项目 gt Web gt ASP Net Web 应用程序 gt 确定 gt ASP Net 5 模板 安装后重新启动系统 然后创建一个新项目ASP NET 5 Te
  • 用 Ruby 或 Python 解析 SVG 的库 [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 SVG 是一个庞大的标准 它基于 XML 我过去曾将 SVG 解析为 XML 然而 有些事情很难 例如
  • 将 tiff 像素长宽比更改为正方形

    我正在尝试对多页 tiff 文件执行条形码识别 但是 tiff 文件是从传真服务器 我无法控制 发送给我的 该服务器以非方形像素长宽比保存 tiff 这导致图像由于纵横比而被严重挤压 我需要将 tiff 转换为方形像素长宽比 但不知道如何在
  • 类型“CombinedVueInstance>>”上不存在属性“XXX”

    我使用 TypeScript 创建了一个 vue 组件 并且在以下位置收到此错误data and in methods Property xxx does not exist on type CombinedVueInstance
  • 制作一个网络爬虫/蜘蛛

    我正在考虑制作一个网络爬虫 蜘蛛 但我需要有人为我指明正确的方向才能开始 基本上 我的蜘蛛将搜索音频文件并为其建立索引 我只是想知道是否有人对我应该如何做有任何想法 我听说用 PHP 完成它会非常慢 我知道 vb net 那么这能派上用场吗
  • 图像未按顺序添加到 pdf 文档 itextsharp 中(元素顺序错误)

    我现在正在使用 iTextSharp 5 4 5 几个星期 本周 我在文档中的元素顺序方面遇到了一些奇怪的事情 我正在制作一份包含主题和图像 图表 的 pdf 报告 该文档的格式如下 NR 主题 1 的主题标题 主题 1 的图表图像 来自
  • Javascript增加最大数组大小[重复]

    这个问题在这里已经有答案了 我正在尝试创建一个大小的数组2 32 4294967296 因为我试图通过运行筛算法来获取 2 32 之前的所有素数 但是 该数组中的任何操作都会出现以下错误 致命错误 CALL AND RETRY LAST 分
  • 增加导航栏高度

    我有以下代码 func navbarbutton UIView animateWithDuration 0 2 animations gt Void in let current self navigationController navi
  • hreflang 应该如何构建?

    我的问题是 应该像上面的所有页面一样 或者应该用每个页面的实际 url 进行更改 例如
  • 缓存行对齐(需要文章澄清)

    我最近在我的应用程序中遇到了我认为是错误共享的问题 我查了一下关于如何将我的数据与缓存行对齐 他建议使用以下 C 代码 C using C 0x alignment syntax template
  • PyCharm 无法解析 docker-compose.yml 以添加 Python 解释器,似乎正在使用旧版本

    我正在设置 PyCharm 的新实例 并想使用 docker compose 设置 Python 解释器 但 PyCharm 似乎不喜欢我的 docker compose 版本 首先 在 构建 执行 部署 gt Docker gt 工具 中
  • 根据内容对列表视图中的相似行进行分组

    i have a listview that displays a set of rows each row is clickable now i wish to group similar type of rows under one h
  • Oracle 的商业 Hotspot JVM 相对于 OpenJDK 有哪些性能优势?

    正如这个问题中所描述的 OpenJDK 与 Java HotspotVM https stackoverflow com q 44335605 1593077 Oracle 的商业 Hotspot JVM 本质上是 OpenJDK 加上一些
  • JavaScript 中的异步事件处理

    我在防止双重 多重 方面遇到问题eventListener代码中的处理 var locked button addEventListener click function if locked return locked true calcu
  • 使用 JPA2/Hibernate 保留 java.time.Instant (JDK8)

    JPA 和 Hibernate 目前都不支持 JDK8 中 JSR 310 带来的新日期 时间类 JPAticket https java net jira browse JPA SPEC 63 休眠ticket https hiberna
  • 在 Blazor 中显示计时器

    我正在尝试在服务器端 Blazor 应用程序中显示倒计时器 我的代码同时使用 F 和 C 语言 该代码在某种程度上可以工作 但计时器永远不会按预期停止 并且计时器显示偶尔不会呈现所有数字 这是我第一次尝试 Blazor 服务器端应用程序 我
  • 具有 SSL 客户端证书的 iPhone 应用程序

    我正在构建一个 iPhone 应用程序 需要使用客户端证书通过 https 访问 Web 服务 如果我将客户端证书 pkcs12 格式 放入应用程序包中 我就可以将其加载到应用程序中并进行 https 调用 很大程度上要感谢 stackov
  • Security.h 中结构的 macOS 文档

    我正在尝试使用Security h通过 Java 和 JNA 的 macOS 框架 这意味着我需要将某些结构重建为 Java 类 问题是 当我查看文档中的结构时 this one https developer apple com refe