【问题标题】:Importing iOS module from pod to nativescript plugin将 iOS 模块从 pod 导入到 nativescript 插件
【发布时间】:2018-12-18 21:30:46
【问题描述】:

目前我已经尝试过使用 NativeScript 和 Typescript 进行开发,但现在我遇到了一个困扰我很多的问题。

我正在借助“nativescript-plugin-seed”开发一个插件,该插件使用 pod (AudioKit) 进行音频转换。我的问题是我应该如何将“AudioKit”模块导入插件以利用其功能,然后在应用程序中使用它们

我在 Swift 中包含了我在 Xcode 项目中测试的音频转换代码,以验证其正确操作以及我认为应该导入模块以生成将与我的应用程序通信的方法的模板。

Swift 代码

import UIKit
import AudioKit

class ViewController: UIViewController {

    override func viewDidLoad() {
    super.viewDidLoad()        
    let fileManager = FileManager.default
       do {
           let origin = Bundle.main.url(forResource: "IOS", withExtension: "mp4")
           let documentDirectory = try fileManager.url(for: .documentDirectory, in: .userDomainMask, appropriateFor:nil, create:false)
           let destination = documentDirectory.appendingPathComponent("test.wav")
           var options = AKConverter.Options();
           options.format = "wav";
           options.sampleRate = 48000;
           options.bitDepth = 16;
           let converter = AKConverter(inputURL: origin!, outputURL: destination, options: options)
        converter.start(completionHandler: { error in
            if(error != nil){
                print("ERROR")
            }else{
                print("CORRECT")
            }
        })
    }
    catch {
        print(error)
    }
}

}

插件代码 (my-plugin.ios.ts)

import { Common } from './audio-converter.common';
//I suppose the module should be declared here

export class AudioConverter extends Common {
// and used here
}

**已编辑

我已经使用了命令HERE,但从未创建过输入文件。以同样的方式阅读如果 pod 是用 Swift 编写的,我必须配置 pod 文件和 build.xcconfig,但无论如何它都不起作用。我将评论我正在执行的步骤,以验证我没有做错什么。

  1. 使用 git clone 创建插件 https://github.com/NativeScript/nativescript-plugin-seed 并配置插件名称.....
  2. 添加 podfile

     pod 'AudioKit', '~> 4.0'
     post_install do |installer|
         installer.pods_project.targets.each do |target|
           target.build_configurations.each do |config|
             config.build_settings['SWIFT_SWIFT3_OBJC_INFERENCE'] = 'On'
             config.build_settings['SWIFT_VERSION'] = '4.0'
           end
         end
       end
    
  3. 在 build.xcconfig 中添加标志 ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES

  4. 执行这些命令在 /src 中创建输入文件(-EDITED 要创建输入文件,这些命令必须在 /demo 中使用)

      TNS_DEBUG_METADATA_PATH="$(pwd)/metadata" tns build ios [--for-device] [--release]
      TNS_TYPESCRIPT_DECLARATIONS_PATH="$(pwd)/typings" tns build ios [--for-device] [--release]
    
  5. 在这一点上,我假设我必须在打字地毯中获取文件,但我没有得到它们

【问题讨论】:

    标签: javascript ios swift typescript nativescript


    【解决方案1】:

    一旦您完成了 POD 设置,您就可以访问该库中所有公开的 Objective C api。如果您想将 TypeScript Intellisense 用于库,则必须先生成类型。

    Here 你会找到关于生成类型的文档。生成后,您必须将它们导入您的reference.d.ts

    如果您还不熟悉将 Objective C 编组为 JS/TS,那么您可能想要开始 here

    【讨论】:

    • 有没有办法只使用javascript来创建插件?谢谢你的回答我会检查文档
    • 是的,您可以使用 JavaScript 构建插件,TypeScript 和为本地库生成类型始终是可选步骤,但建议使用。如果您不打算使用 TypeScript,则不必生成类型。
    • 我编辑了答案,发现创建打字脚本的另一个问题
    • 只会为暴露给 Objective C 的 api 和方法生成类型。你有这个插件的 repo 吗?
    • 是的,repo 是github.com/AudioKit/AudioKit,现在我意识到我必须在演示(nativescript 项目)中执行命令(编号 4)。实际上我已经得到了打字文件,但现在我的问题是当我尝试调用 ios.ts 文件中的方法时。与 swift 文件相比,我得到的打字文件的结构不同。我需要带有 3 个参数的构造函数的 AKConverter 类,但在 d.ts 文件中只是声明了默认构造函数。在这种情况下我需要做什么?
    猜你喜欢
    • 1970-01-01
    • 2016-08-05
    • 1970-01-01
    • 2020-06-09
    • 2023-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-20
    相关资源
    最近更新 更多