这一次有很多问题。让我们一步一步来:
出于调试目的,我正在寻找一种 iOS 应用程序(我可以访问其源代码)可以与单独的 OSX 应用程序通信的方式,例如通过套接字。
绝对可以在模拟器中运行的 iOS 应用程序进程中使用 OS X 工具。使用普通套接字将非常简单,因为 BSD 库在 iOS 和 Mac OS 中是相同的。您可以简单地编译您的 C 代码,它会透明地使用底层操作系统。
如果你想使用 Objective-C API,NSURLConnection
你也可以这样做。在模拟器中,您的应用程序使用 Mac OS 版本的 Foundation 和 Core Foundation。在大多数情况下,您不会意识到这一点,因为 API 非常相似。
[...] 由于名称空间冲突,链接器将难以将事物分开 [...]
目前还不清楚你在这里尝试实现什么。正如我所解释的,模拟器进程直接使用适当的 Mac OS 较低级别的框架。链接到 AppKit 等更高级别的框架是没有意义的,因为该应用程序不使用 Cocoa 桌面组件。这就是为什么没有NSApplication
符号并且应用程序没有实例化符号的原因。相反,它使用UIApplication
模拟器特制 UIKit 框架中的类,位于
/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。