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

时间:2016-10-14 17:15:21

标签: ios module appcelerator

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

  1. 我没有包装预先存在的第三方iOS SDK。
  2. 我写了包裹的iOS代码。
  3. 验证代码在xcode中正常工作。
  4. 没有.a文件。虽然有2x .h文件和2x .m文件。
  5. iOS代码中没有UI元素,因为它仅用于将本机蓝牙硬件连接到应用程序。
  6. 我创建了一个通用的appcelerator iOS模块项目,构建它,并在我的应用程序中成功调用了通用ID函数。
  7. 我无法弄清楚如何成功编辑通用模块,以便它使用我的代码。每次尝试都会导致它拒绝编译,而且令人发狂。
  8. 我无法访问Hyperloop。
  9. 一旦我可以成功构建包装模块,我就会调用初始化函数来触发本机蓝牙硬件搜索。连接后,模块中的功能可以向硬件发送命令并接收数据。这是我到目前为止所遵循的官方文件:

    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
    3. 哎呀,我还是不知道我是否可以在工作室内这样做,或者我是否必须在Xcode中编辑通用模块。救命! :)非常感谢提前。

1 个答案:

答案 0 :(得分:1)

首先,这不是最佳做法,并且当SDK更改并且您的模块仍然依赖于过时的核心API时,将来可能会出现问题。

关于您的问题,您可以创建一个新组件,将现有类子类化,例如

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代码风格,但请注意可能影响您在功能中实现的核心更改。谢谢!