如何将现有 iOS 代码包装到新的 Appcelerator 模块中?

How to wrap existing iOS code in a new Appcelerator module?

这似乎是一个基本的要求,但我无法在任何地方找到答案。我想将我编写的一些现有 iOS 代码包装在 Appcelerator 模块中。而已。要点:

  1. 我没有包装预先存在的第 3 方 iOS SDK。
  2. 我写了 iOS 被包装的代码。
  3. 代码经验证可在 xcode 内运行。
  4. 没有.a文件。不过有 2x .h 文件和 2x .m 文件。
  5. iOS 代码中没有 UI 元素,因为它仅用于将本机蓝牙硬件连接到应用程序。
  6. 我创建了一个通用的 appcelerator iOS 模块项目,构建了它,并在我的应用程序中成功调用了通用 ID 函数。
  7. 我不知道如何成功编辑通用模块以便它使用我的代码。每次尝试都会导致它拒绝编译,这令人抓狂。
  8. 我无法使用 Hyperloop。

一旦我可以成功构建包装模块,我将调用一个初始化函数来触发本机蓝牙硬件搜索。连接后,模块内有一些功能可以向硬件发送命令并接收回数据。这是我到目前为止所遵循的官方文档:

http://docs.appcelerator.com/platform/latest/#!/guide/iOS_Module_Quick_Start

这帮助我构建了空白模块,将其包含在应用程序中,并通过调用内置测试确保其正常工作 属性。从那里开始,它并没有真正告诉我我需要知道什么。这些是我迄今为止发现的最接近的东西,但仍然不是我需要的东西:

  1. http://docs.appcelerator.com/platform/latest/#!/guide/iOS_Module_Project-section-43288810_iOSModuleProject-AddaThird-PartyFramework
  2. appcelerator module for existing ios project sdk

哎呀,我什至不知道我是否可以在工作室中执行此操作,或者我是否必须在 Xcode 中编辑通用模块。帮助! :) 非常感谢。

所以首先,这不是最佳实践,并且当 SDK 更改并且您的模块仍然依赖过时的核心 API 时,将来可能会导致问题。

关于您的问题,您可以创建一个新组件来替代 class 现有的 class,例如

class TiMyModuleListViewProxy : TiUiListViewProxy {

}

并用

调用它
var myList = MyModule.createListView();

或者您编写一个类别以使用您自己的逻辑扩展现有 API,例如

@interface TiUIListViewProxy (MyListView)

- (void)setSomethingElse:(id)value;

@end

@implementation TiUIListViewProxy (MyListView)

- (void)setSomethingElse:(id)value
{
    // Set the value of "somethingElse" now
}

@end

我更喜欢第二个选项,因为它匹配更好的 Objective-C 代码风格,但仍请注意可能影响您在功能中的实现的可能的核心更改。谢谢!