BT

RolloutがSwift iOSアプリをライブアップデート可能に

| 作者: Sergio De Simone フォローする 13 人のフォロワー , 翻訳者 吉田 英人 フォローする 0 人のフォロワー 投稿日 2016年12月12日. 推定読書時間: 3 分 |

原文(投稿日:2016/11/06)へのリンク

App Storeの審査プロセスを経由せずに,ネイティブのObjective-Cアプリをライブアップデート可能にするソリューションを開発するRolloutが,Swiftのサポートを発表した。Swiftアプリのライブアップデートあは,同社が擬似Method Swizzling(メソッド入れ替え)と呼ぶテクニックを通じて実行する。

Objective-Cアプリの場合,Rolloutがアプリのパッチを実現したメカニズムは,Method Swizzlingとして知られている動的プログラミングテクニックである。これは開発者が,Objective-Cランタイムがクラス内の関数とメソッドシグネチャを関連付ける方法を変更することによって,既存メソッドの実装変更を可能にするものだ。入れ替えられたメソッドは,Rolloutクラウドからダウンロードされた新しい実装によって完全に置き換えることも,単にラップすることもできる。Rolloutでは,開発者が置き換えメソッドをJavaScriptで定義することができる。WebKitあるいはJavaScript Coreによって実行されるコードのみダウンロードを許可しているAppleのガイドラインに準拠する上で,これは重要なメカニズムになる。また,メソッド呼び出しのトレースログの追加やメソッドの無効化など,特定の目的を達成するように事前定義されたテンプレートも使用可能だ。

Method Swizzlingは,実行時プログラミング機能を持たないSwiftでは本質的に使用できないので,RolloutのCTOであるEval Keren氏が説明するように,Swift用に同等なものを開発する必要があった。簡単に言うとRolloutが行なったのは,次の例ように,各メソッドにプレフィックスを追加することによって,アプリをSwiftの中間言語(SIL)レベルで操作する方法だ。

func add(a:Int, b:Int) -> Int {
    if Rollout_shouldPatch(ROLLOUT_a79ee6d5a41da8daaa2fef82124dcf74) {
        let resultRollout : Int =
        Rollout_invokeReturn(Rollout_tweakData!,
            target:self,
            arguments:[a,
                b,
                origClosure: { args in return self.add(a:args[0],b:args[1]);});
        return resultRollout;

上のコードではRollout_invokeReturnが,RolloutクラウドからダウンロードされたJavaScript関数の実行を担当する。この関数は,必要ならば元のメソッドをコールバックすることもできる。

さまざまなコンテキストで利用可能なRollout for Objective-Cと比較すると,Rolloutが改善に取り組んでいるとは言え,Swiftのサポートはまだ初期段階に過ぎない。特に:

  • Swiftのパッチから,パッチメソッド自体か@objcメソッド以外のネイティブなSwiftメソッドの呼び出し,あるいはネイティブなSwiftオブジェクトの生成はできない。
  • 戻り値をオーバーライド可能なのは,StringNumberOptionalおよびObjective-C互換クロスなど,特定数の型に限られている。
  • Swiftのネイティブな例外をキャッチすることはできない。
  • 静的クラスメソッドやオーバーロードされたインスタンスメソッド,構造体メソッドなど,多くのSwift機能がまだサポートされていない。

Rolloutによると,上記の制限のいくつかについてはすでに実装されていて,現在はベータテスト中である。

Rolloutによると,同社のライブアップデートソリューションはすでに数千のモバイルアプリによって使用されており,Appleのガイドラインに完全準拠している。

 
 

この記事を評価

関連性
スタイル
 
 

この記事に星をつける

おすすめ度
スタイル

こんにちは

コメントするには InfoQアカウントの登録 または が必要です。InfoQ に登録するとさまざまなことができます。

アカウント登録をしてInfoQをお楽しみください。

あなたの意見をお聞かせください。

HTML: a,b,br,blockquote,i,li,pre,u,ul,p

このスレッドのメッセージについてEmailでリプライする
コミュニティコメント

HTML: a,b,br,blockquote,i,li,pre,u,ul,p

このスレッドのメッセージについてEmailでリプライする

HTML: a,b,br,blockquote,i,li,pre,u,ul,p

このスレッドのメッセージについてEmailでリプライする

ディスカッション

InfoQにログインし新機能を利用する


パスワードを忘れた方はこちらへ

Follow

お気に入りのトピックや著者をフォローする

業界やサイト内で一番重要な見出しを閲覧する

Like

より多いシグナル、より少ないノイズ

お気に入りのトピックと著者を選択して自分のフィードを作る

Notifications

最新情報をすぐ手に入れるようにしよう

通知設定をして、お気に入りコンテンツを見逃さないようにしよう!

BT