菜鸟教程小白 发表于 2022-12-12 11:23:19

ios - 用 Swift 编写 Cordova/Ionic 插件


                                            <p><p>我按照该站点的说明进行操作,<a href="http://moduscreate.com/writing-a-cordova-plugin-in-swift-for-ios/" rel="noreferrer noopener nofollow">http://moduscreate.com/writing-a-cordova-plugin-in-swift-for-ios/</a> ,用于为 iOS 平台创建我自己的 cordova 插件。
首先,我安装了plugman 并创建了一个新插件。这是我的 plugin.xml:</p>

<pre><code>&lt;?xml version=&#39;1.0&#39; encoding=&#39;utf-8&#39;?&gt;
&lt;plugin id=&#34;com-moduscreate-plugins-echoswift&#34; version=&#34;0.0.1&#34; xmlns=&#34;http://apache.org/cordova/ns/plugins/1.0&#34; xmlns:android=&#34;http://schemas.android.com/apk/res/android&#34;&gt;
&lt;name&gt;ModusEchoSwift&lt;/name&gt;
&lt;js-module name=&#34;ModusEchoSwift&#34; src=&#34;www/ModusEchoSwift.js&#34;&gt;
    &lt;clobbers target=&#34;modusechoswift&#34; /&gt;
&lt;/js-module&gt;
&lt;platform name=&#34;ios&#34;&gt;
    &lt;config-file target=&#34;config.xml&#34; parent=&#34;/*&#34;&gt;
      &lt;feature name=&#34;ModusEchoSwift&#34;&gt;
            &lt;param name=&#34;ios-package&#34; value=&#34;ModusEchoSwift&#34; /&gt;
      &lt;/feature&gt;
    &lt;/config-file&gt;
    &lt;source-file src=&#34;src/ios/ModusEchoSwift.swift&#34; /&gt;
&lt;/platform&gt;
&lt;/plugin&gt;
</code></pre>

<p>这是我的插件 js 文件,即 ModusEchoSwift.js:</p>

<pre><code>var exec = require(&#39;cordova/exec&#39;);
exports.echo = function(arg0, success, error) {
    exec(success, error, &#34;ModusEchoSwift&#34;, &#34;echo&#34;, );
};
exports.echojs = function(arg0, success, error) {
    if (arg0 &amp;&amp; typeof(arg0) === &#39;string&#39; &amp;&amp; arg0.length &gt; 0) {
      success(arg0);
    } else {
      error(&#39;Empty message!&#39;);
    }
};
</code></pre>

<p>这是我的原生 Swift 类,即 ModusEchoSwift.swift:</p>

<pre><code>@objc(ModusEchoSwift) class ModusEchoSwift : CDVPlugin {
func echo(command: CDVInvokedUrlCommand) {
    var pluginResult = CDVPluginResult(
      status: CDVCommandStatus_ERROR
    )

    let msg = command.arguments as? String ?? &#34;&#34;

    if msg.characters.count &gt; 0 {
      /* UIAlertController is iOS 8 or newer only. */
      let toastController: UIAlertController =
            UIAlertController(
                title: &#34;&#34;,
                message: msg,
                preferredStyle: .Alert
            )

      self.viewController?.presentViewController(
            toastController,
            animated: true,
            completion: nil
      )

      let duration = Double(NSEC_PER_SEC) * 3.0
      dispatch_after(
            dispatch_time(
                DISPATCH_TIME_NOW,
                Int64(duration)
            ),
            dispatch_get_main_queue(),
            {
                toastController.dismissViewControllerAnimated(
                  true,
                  completion: nil
                )
            }
      )

      pluginResult = CDVPluginResult(
            status: CDVCommandStatus_OK,
            messageAsString: msg
      )
    }

    self.commandDelegate!.sendPluginResult(
      pluginResult,
      callbackId: command.callbackId
    )
}
}
</code></pre>

<p>这些是我插件中的文件。现在我试图在我的 ionic 项目中使用这个插件显示一个简单的警报。我现在有一个简单的 index.html,我想在其中显示警报,这里是:</p>

<pre><code>&lt;ion-pane&gt;
&lt;ion-header-bar class=&#34;bar-stable&#34;&gt;
    &lt;h1 class=&#34;title&#34;&gt;Ionic Blank Starter&lt;/h1&gt;
&lt;/ion-header-bar&gt;
&lt;ion-content&gt;
    &lt;div ng-controller=&#34;myController&#34;&gt;
      Hello {{user}}
      &lt;/div&gt;
&lt;/ion-content&gt;
&lt;/ion-pane&gt;
</code></pre>

<p>这是我的 Controller :</p>

<pre><code>.controller(&#39;myController&#39;, function($scope){
console.log(&#34;Ok&#34;);
$scope.user = &#34;kAy&#34;;
ModusEchoSwift.echo(&#39;Plugin Ready!&#39;, function(msg) {
   console.log(&#34;Success&#34;);
},
function(err) {
   console.log(&#34;Error&#34;);
}
);
</code></pre>

<p>})</p>

<p>在此 Controller 中,我不断收到未定义 ModusEchoSwift 的错误,我不明白!谁能告诉我如何在我现有的 ionic 项目中使用我的插件的功能??</p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>这<strong>确实</strong>可以在 ionic v2.2.1 和 cordova v6.5.0 上正常工作,前提是 Simon 的 <a href="http://moduscreate.com/writing-a-cordova-plugin-in-swift-for-ios/" rel="noreferrer noopener nofollow">blog post</a> 中列出的步骤紧随其后,并且有一个小改动:在导入下方的 App.component.ts 文件中添加这行代码:</p>

<pre><code>declare let modusechoswift;
</code></pre>

<p>在我的例子中, ionic 应用程序中的 Bridging-Header.h 文件位于“其他来源”下。西蒙的帖子提到了一个不同的位置,这最初让我很反感,但这不是问题。事实上,在我的 Xcode 项目中的任何地方移动该头文件似乎没有任何效果。我猜 XCode 不关心文件在哪里,只要它存在。</p></p>
                                   
                                                <p style="font-size: 20px;">关于ios - 用 Swift 编写 Cordova/Ionic 插件,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/37237546/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/37237546/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - 用 Swift 编写 Cordova/Ionic 插件