【问题标题】:Accessing OSX APIs from iOS app running in Simulator for debugging从模拟器中运行的 iOS 应用程序访问 OSX API 以进行调试
【发布时间】:2012-10-30 14:32:36
【问题描述】:

出于调试目的,我正在寻找一种 iOS 应用程序(我可以访问其源代码)可以与单独的 OSX 应用程序通信的方式,例如通过套接字。

由于在模拟器中运行的 iOS 应用程序在 Mac 上本地运行,通过使用专门设计的 iOS 模拟器框架,通过 OSX 框架路由 I/O,我必须有一种方法可以使用我自己的代码来实现这一点。

简单地将标准 OSX 框架添加到项目中并在 iOS 应用程序中使用它们是行不通的:

如果我尝试加载已经作为 iOS 框架存在的 OSX 框架,iOS 框架将始终是首选,这意味着如果框架功能仅在 OSX 上可用但在 iOS 中不可用,我无法使用它。如果框架还不存在,比如 Carbon.framework,那么我可以让链接器尝试加载它。例如,如果我尝试访问作为 Carbon.framework 的一部分的 SysBeep(),则当它想要解析指向已作为 iOS 加载的其他库的外部符号时,链接器会失败并显示错误消息-only 库。

我也尝试使用 dlopen() 加载 OSX 特定框架,但同样失败。

换句话说:

我的 iOS 代码如何另外访问特定于 OSX 的库?

【问题讨论】:

  • 你有什么运气吗?

标签: ios linker ios-simulator objective-c-runtime


【解决方案1】:

这一次有很多问题。让我们一步一步来:

出于调试目的,我正在寻找一种 iOS 应用程序(其 我有权访问的源代码)可以与单独的 OSX 应用程序通信, 例如通过套接字。

绝对可以在模拟器中运行的 iOS 应用程序进程中使用 OS X 工具。使用普通套接字将非常简单,因为 BSD 库在 iOS 和 Mac OS 中是相同的。您可以简单地编译您的 C 代码,它会透明地使用底层操作系统。

如果您想使用像 NSURLConnection 这样的 Objective-C API,您也可以这样做。在模拟器中,您的应用程序使用 Mac OS 版本的 Foundation 和 Core Foundation。在大多数情况下,您不会认识到这一点,因为 API 非常相似。

[...] 由于名称空间,链接器将难以将事物分开 碰撞 [...]

目前还不清楚您在这里尝试实现什么目标。正如我所解释的,模拟器进程直接使用适当的 Mac OS 较低级别的框架。链接到 AppKit 等更高级别的框架是没有意义的,因为该应用程序不使用 Cocoa 桌面组件。这就是为什么没有NSApplication 符号并且应用程序没有实例化一个的原因。相反,它使用模拟器特制 UIKit 框架中的 UIApplication 类,该框架位于

/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator5.1.sdk/System/Library/Frameworks/UIKit.framework

[...] 构建上述内容会导致链接器错误 [...]

这是因为链接器被定向为仅查看不存在 AppKit 的 iPhoneSimulator SDK(使用链接器标志,如 -isysroot <path-to-SDK>)。

但是在这一点上,可能值得问问自己为什么要首先链接到 AppKit。您可以在没有 AppKit 的情况下设置进程间通信。

哦,为了证明它一定是可能的,看看 RubyMotion [...]

在模拟器中,事件处理是在“iOS-Simulator.app”进程(这是一个 Mac OS 应用程序)中完成的。要从您的模拟器进程中获取这些事件,您可能可以使用Quartz Event Services

【讨论】:

  • Nikolai,这是很多有见地的信息,谢谢!我尝试访问 NSApplication 的原因是查看是否可以访问 Simulator 的运行时环境,以便找到它的 iOS 屏幕视图,以便我可以访问它而无需在 iOS 运行时环境中放置覆盖视图(如以避免由于在 iOS 环境中添加视图而产生的副作用)。目前,我已经通过调用 SysBeep() 简化了我的尝试,但也遇到了麻烦,因为即使使用 dlopen 也无法加载 Carbon 框架。还在寻找...
猜你喜欢
  • 2017-06-10
  • 2012-04-24
  • 2011-06-25
  • 1970-01-01
  • 2023-04-10
  • 1970-01-01
  • 2023-03-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多