【问题标题】:The Step by Step of an Appcelerator iOS Module with OpenCV Framework使用 OpenCV 框架的 Appcelerator iOS 模块的一步一步
【发布时间】:2020-12-22 00:03:54
【问题描述】:

由于没有(至少不好)关于使用 OpenCV 框架的 Appcelerator iOS 模块的实现的文档,我决定提出这个问题并用我能做到的最完整的细节来回答它,以供进一步参考。

我希望它可以帮助其他人,这样他们就不会像我一样挣扎很长时间(我花了一个多月的时间才成功编译模块并能够在 App 上运行它)。

在开始之前,我要感谢TiSlack 的人们,他们在一些关键点上帮助了我。

【问题讨论】:

标签: ios objective-c opencv appcelerator


【解决方案1】:

我将首先描述我使用的所有软件的配置、版本和其他内容。

Appcelerator Titanium Mobile SDK - 9.2.0
Appcelerator CLI - 8.0.0
XCode 11.3.1
Mac OSX Mojave - 10.14.6
OpenCV - 4.4.0

  1. 从一开始,我就从上面的链接下载了SDK 9.2.0,并将其安装(粘贴了zip文件的内容)到以下目录:
    /Users/yourUserName/Library/Application Support/Titanium/mobilesdk/osx/
    modules 文件夹的内容,我粘贴到:
    /Users/yourUserName/Library/Application Support/Titanium/modules

  2. 现在,我们需要创建一个以 iOS 为部署目标的新 Appcelerator 模块。



  3. 模块创建后(我假设模块名称为opencvtest),打开opencvtest.xcodeproj,位于:
    yourPathToWorkspace/Appcelerator_Workspace/moduleName/ios/

  4. 现在,让我们开始配置模块以接收OpenCV Framework
    首先,转到ComOpencvTest_Prefix.pch 并使用以下代码:

     #ifdef __cplusplus
         #import <opencv2/opencv.hpp>
     #endif
    
     #ifdef __OBJC__
         #import <Foundation/Foundation.h>
         #import <UIKit/UIKit.h>
     #endif
    

__cplusplus 部分,NEEDS 被放置在BEFORE __OBJC__,否则会出现一些编译错误(如OpenCV Tutorial 所述)。

  1. 现在,我们将opencv2.framework 文件物理复制到XCode 中项目的Framework 文件夹中。 (只需将其从 Finder 拖到 XCode)。

DO NOT忘记选择Copy Items if Needed

opencv2.framework 文件将被复制到项目的/ios 文件夹中。我们需要将其移动到/ios/platform 文件夹,否则该模块会在构建时使应用崩溃。

  1. 现在,我们需要添加一些 OpenCV 需要的其他框架才能正常工作(同样,如上面提到的 OpenCV 教程中所述)。
    为此,我们需要在 XCode 上单击项目名称,然后选择 Build Phases 并展开 Link Binary with Libraries。单击+ 图标并选择以下框架列表,然后将其添加到项目中。会是这样的:

  1. 继续,我们需要配置一些东西。首先,点击Build Settings 并搜索Other Linker Flags。然后,打开列表并将-lz添加到其中。

我们还需要配置Library Search PathsFramework Search Paths

这是你应该在每一个中添加的内容:

最后,我们需要创建一个User-defined build setting。由于我遇到了一些错误,我在 StackOverflow 上找到了这一步。这是第 9 步的另一种解决方法。我从this 答案中获得了此配置。继续,通过单击 + 并选择 Add User-Defined Setting 创建设置。

对于它的描述和价值,使用:LD_VERIFY_BITCODENO

  1. OpenCV 使用Objective-C++ 因此,为了在您的项目中使用该框架,将使用它的Classes 需要是.mm 而不是.m(这告诉编译器读取您的代码正确),所以像这样重命名:

  1. 现在,由于某种未知原因,我们必须创建一个.swift 文件,它是bridging-header.h 文件。我在尝试编译模块并得到错误后了解到这一点:ld: warning: Could not find auto-linked framework 'swiftCore'。很多人在 StackOverflow 上谈论这个错误,最常见的解决方法之一是使用 bridging header 创建 swift 文件。所以,让我们这样做吧。

右键单击项目名称并选择New File。 然后,选择 Swift 文件。

选择Classes 文件夹作为.swift 文件的目标。其余的保持原样。

XCode 然后会要求创建一个Bridging Header 文件。去做吧。

  1. 在这一步中,我们将编译模块。为此,请打开 Terminal 应用程序并转到模块的 /ios 文件夹。
    然后,输入以下命令:appc run -p ios --build-only。 构建模块后,我们需要打开Finder 并进入dist 模块的目录。 /Users/yourUserName/Document/Appcelerator_Workspace/opencvtest/ios/dist/

解压里面的文件,就是模块本身。

  1. 现在,我们可以使用ComOpencvTestModule.mm 上的示例调用Appcelerator Studio,进行测试。

这些是例子:

- (NSString *)example:(id)args
{
    // Example method. 
    // Call with "MyModule.example(args)"
    return @"hello world";
}

- (NSString *)exampleProp
{
   // Example property getter. 
   // Call with "MyModule.exampleProp" or "MyModule.getExampleProp()"
   return @"Titanium rocks!";
}

- (void)setExampleProp:(id)value
{
   // Example property setter. 
  // Call with "MyModule.exampleProp = 'newValue'" or "MyModule.setExampleProp('newValue')"
}

所以,在Appcelerator Studio 中创建一个新的Mobile App Project

我选择了经典(非合金)和Default Project,并使用了下面的配置:

还记得第 10 步中的 .zip 文件吗?获取它创建的名为 modules 的解压缩文件夹,并将其粘贴到项目的 App 根目录中。像这样:

现在,从应用程序的项目中打开 tiapp.xml 文件。在Module 部分,单击+ 按钮并将您的模块链接到应用程序。

现在我们终于准备好了! 为了以一种非常非常简单的方式对其进行测试,我清理了app.js 文件的所有内容并执行了以下操作:

var appWindow = Ti.UI.createWindow({});
var opencvTest = require('com.opencv.test'); //you must use a variable that requires your module.

opencvTest.example(); //now we use that variable to call for the module's  methods.
opencvTest.getExampleProp();

appWindow.open();

最后,在您选择的设备或模拟器上构建应用程序。为了测试,我在模拟器上运行它。

构建后,您应该有一个hello world 和一个Titanium rocks! 日志响应。

所有这一切看起来都很简单,但正如我所说,我费了很大劲才走到这simple 步骤。所以,这个答案是为了帮助像我这样的人! =)

【讨论】:

    猜你喜欢
    • 2020-11-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多