Документация macOS для структур в Security.h

Я пытаюсь использовать framework.h macOS через Java и JNA. Это означает, что мне нужно восстановить некоторые структуры как classы Java.

Проблема в том, что когда я смотрю на документы для структуры (например, это), все, что я вижу, – это краткое описание структуры без упоминания ее полей. Где я могу получить полное описание структуры в документации Apple?

Для быстрого просмотра вы можете найти заголовки на веб-сайте Apple с открытым исходным кодом , но его трудно ориентировать, особенно если заголовки находятся в разных местах в зависимости от версии ОС, которую вы хотите проверить. Во всех случаях я нашел, что он определен в SecBase.h . Например, вот для последнего macOS .

И вы получите это:

 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, связывая с инфраструктурой безопасности, возможно, вы do) и отдать его gdb для печати структуры структуры с помощью ptype :

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

Но, как отмечено в комментариях, если мы попробуем это здесь, мы получим следующее:

 (gdb) ptype SecKeychainItemRef type = struct OpaqueSecKeychainItemRef {  } 

Я боюсь, что этот символ добровольно стал непрозрачным … Подтверждено Бренданом в комментариях:

каждый тип macOS, о котором я могу думать, заканчивается в Ref – это непрозрачный тип (действительно указатель), предназначенный только для передачи функциям

Вот отладочный сеанс с Xcode: Скриншот Xcode