iOS WebView

このガイドでは、より大きなiOSアプリケーション内にCordova対応のWebViewコンポーネントを埋め込む方法を示します。これらのコンポーネントがお互いに通信する方法の詳細については、「アプリケーションプラグイン」を参照してください。

iOS向けWebViewのサポートは、Xcodeテンプレートが参照実装として機能する`Cleaver`コンポーネントを使用して、Cordovaバージョン1.4から開始されました。Cordova 2.0以降のバージョンでは、サブプロジェクトベースのCleaver実装のみがサポートされています。

これらの手順には、Cordova 4.x以降とXcode 8.0以降、および新しく作成されたiOSプロジェクトからの`config.xml`ファイルが必要です。新しいプロジェクトを作成するには、コマンドラインインターフェースの手順を使用し、`platforms/ios`内の指定されたアプリケーションのサブディレクトリ内から`config.xml`ファイルを取得できます。

これらの手順に従うには、最新のCordovaディストリビューションがインストールされていることを確認してください。cordova.apache.orgからダウンロードして、そのiOSパッケージを解凍してください。

プロジェクトにCordovaを追加するには2つの方法があります。1つ目はCarthageを使用する方法、2つ目は手動でCordovaを追加する方法です。Carthageのサポートは、cordova-iosバージョン4.4.0以降のみです。

これらの2つの方法のいずれかを使用したら、「**CDVViewControllerの使用**」セクションに進みます。

1. Carthageを使用してCordova.frameworkをXcodeプロジェクトに追加する

  1. Carthageをインストールする

  2. あなたのCartfileに以下を追加します(``を適切なバージョンに置き換えてください)

     git "git://git.apache.org/cordova-ios.git" "<version_or_tag>" # Apache
    
  3. 実行する

     carthage update
    
  4. Carthage/Build/iOS/Cordova.frameworkをXcodeプロジェクトに追加します。

2. CleaverをXcodeプロジェクトに追加する(CordovaLibサブプロジェクト)

  1. Xcodeが実行されている場合は終了します。

  2. ターミナルを開き、Cordova iOSのソースディレクトリに移動します。

  3. 上記で説明した`config.xml`ファイルをプロジェクトディレクトリにコピーします。

  4. Xcodeを開き、Finderを使用して`config.xml`ファイルを**プロジェクトナビゲータ**ウィンドウにコピーします。

  5. **追加されたフォルダにグループを作成する**を選択し、**完了**を押します。

  6. Finderを使用して`CordovaLib/CordovaLib.xcodeproj`ファイルをXcodeの**プロジェクトナビゲータ**にコピーします。

  7. **プロジェクトナビゲータ**内で`CordovaLib.xcodeproj`を選択します。

  8. **ファイルインスペクタ**を表示するには、**Option-Command-1**キーの組み合わせを入力します。

  9. **ファイルインスペクタ**の**場所**のドロップダウンメニューで、**グループを基準に**を選択します。

  10. **プロジェクトナビゲータ**で**プロジェクトアイコン**を選択し、**ターゲット**を選択してから、**ビルド設定**タブを選択します。

  11. **その他のリンカーフラグ**の値に`-force_load`と`-ObjC`を追加します。

  12. **プロジェクトナビゲータ**で**プロジェクトアイコン**をクリックし、**ターゲット**を選択してから、**ビルドフェーズ**タブを選択します。

  13. **ライブラリとバイナリをリンク**を展開します。

  14. **+**ボタンを選択し、以下の**フレームワーク**を追加します。必要に応じて、**プロジェクトナビゲータ**内で、それらを**フレームワーク**グループの下に移動します。

     AssetsLibrary.framework
     CoreLocation.framework
     CoreGraphics.framework
     MobileCoreServices.framework
    
  15. **ターゲットの依存関係**を展開します(複数のボックスがある場合は、そのラベルが付いた一番上のボックス)。

  16. **+**ボタンを選択し、`CordovaLib`ビルド製品を追加します。

  17. **ライブラリとバイナリをリンク**を展開します(複数のボックスがある場合は、そのラベルが付いた一番上のボックス)。

  18. **+**ボタンを選択し、`libCordova.a`を追加します。

  19. **Xcode環境設定→場所→派生データ→詳細…**を**一意**に設定します。

  20. **プロジェクトナビゲータ**で**プロジェクトアイコン**を選択し、**ターゲット**を選択してから、**ビルド設定**タブを選択します。

  21. **ヘッダー検索パス**を検索します。その設定に、以下の3つの値を引用符を含めて追加します。

     "$(TARGET_BUILD_DIR)/usr/local/lib/include"
     "$(OBJROOT)/UninstalledProducts/include"
     "$(OBJROOT)/UninstalledProducts/$(PLATFORM_NAME)/include"
     "$(BUILT_PRODUCTS_DIR)"
    

    Cordova 2.1.0以降、`CordovaLib`は**自動参照カウント(ARC)**を使用するようにアップグレードされています。`CordovaLib`を使用するために**ARC**にアップグレードする必要はありませんが、プロジェクトを**ARC**を使用するようにアップグレードする場合は、**編集→リファクタリング→Objective-C ARCに変換…**メニューからXcode移行ウィザードを使用し、**libCordova.a**を**選択解除**してから、ウィザードを完了するまで実行する必要があります。

CDVViewControllerの使用

  1. 以下のヘッダーを追加する

     #import <Cordova/CDVViewController.h>
    
  2. 新しい`CDVViewController`をインスタンス化し、どこか(たとえば、クラスプロパティ)に保持する

     CDVViewController* viewController = [CDVViewController new];
    
  3. `wwwFolderName`プロパティを設定することもできます。デフォルトは`www`です。

     viewController.wwwFolderName = @"myfolder";
    
  4. `config.xml`ファイルの``タグで開始ページを設定することもできます。ローカルファイルの場合

     <content src="index.html" />
    

    …またはリモートサイトの場合

     <content src="https://apache.dokyumento.jp" />
    
  5. `useSplashScreen`プロパティを設定することもできます。デフォルトは`NO`です。

     viewController.useSplashScreen = YES;
    
  6. **ビューフレーム**を設定します。常に最後のプロパティとして設定します。

     viewController.view.frame = CGRectMake(0, 0, 320, 480);
    
  7. ビューにCleaverを追加する

     [myView addSubview:viewController.view];
    

HTML、CSS、JavaScriptアセットの追加

  1. プロジェクト内に新しいディレクトリを作成します(例:`www`)。

  2. このディレクトリにHTML、CSS、JavaScriptアセットを配置します。

  3. Finderを使用して、ディレクトリをXcodeの**プロジェクトナビゲータ**ウィンドウにコピーします。

  4. **追加されたフォルダにフォルダ参照を作成する**を選択します。

  5. 最初に作成したディレクトリに対して適切な`wwwFolderName`と`startPage`プロパティを設定するか、`CDVViewController`をインスタンス化するときにデフォルト(前のセクションで指定)を使用します。

     /*
         if you created a folder called 'myfolder' and
         you want the file 'mypage.html' in it to be
         the startPage
     */
     viewController.wwwFolderName = @"myfolder";
     viewController.startPage = @"mypage.html"