AirWatch iOS SDK 実装の手引き

このセットアップ チュートリアルでは Xcode バージョン 6.4 と iOS SDK バージョン 5.4.1 を使用します。 

AirWatch SDK (ソフトウェア開発キット) は、企業/組織が独自に開発している iOS アプリにさまざまな機能を組み込むためのツール群を提供します。AirWatch SDK を使用することで、貴社アプリのセキュリティ強化や機能拡張を実現することができます。同時にアプリ開発に要する時間と費用の節約にもつながります。このドキュメントでは、AirWatch SDK の実装手順について説明するとともに、利用可能なオプションとその使用方法についても解説します。 

下図に、この実装手順の全体像を示します。

1.png

 

Xcode プロジェクトを開始するには、Xcode を起動し、新しいプロジェクトを作成して単一画面アプリの作成を開始するオプションを選択します。 

2.png3.png

 

必要なフレームワークの追加

必要な Xcode フレームワークを追加する

SDK を正しく機能させるには、下記に示すフレームワークが必要です。次の手順を実行して、必要なフレームワークをプロジェクトに追加してください。

1. Xcode の Groups & Files ペインでプロジェクトを選択します。 

4.png

 

2. 画面左側で正しいターゲットが選択されていることを確認し、Build Phases タブをクリックします。 

5.png

 

3. Link Binary With Libraries セクションを展開します。 

4. セクション下部の + ボタンをクリックして必要なフレームワークを追加します。 

6.png

 

5. 以下のフレームワークについて、フレームワークの選択と Add のクリックを順に繰り返します。

Accelerate.framework
AssetsLibrary.framework
AudioToolbox.framework
AVFoundation.framework
CFNetwork.framework
CoreData.framework
CoreFoundation.framework
CoreGraphics.framework
CoreLocation.framework
CoreMedia.framework
CoreMotion.framework
CoreTelephony.framework
CoreText.framework
CoreVideo.framework
Foundation.framework
ImageIO.framework
Libstdc++.6.0.9.tbd 
Libsqlite3.tbd 
Libz.tbd
Libc++.tbd
LocalAuthentication.framework 
MediaPlayer.framework
MessageUI.framework
MobileCoreServices.framework 
QuartzCore.framework
Security.framework
SystemConfiguration.framework 
UIKit.framework

 

すべての追加が完了すると、画面上に表示されるライブラリは次のようになります。

8.png

 

必要な Xcode バンドル リソースを追加する

SDK を正しく機能させるには、下記に示すバンドル リソースが必要です。必要なバンドルを AirWatch SDK フォルダからプロジェクトに追加してください。これらのバンドルの一部は、AWDSK.framework ファイル構造の中にあります。 

1. 上記の Build Phases タブで Copy Bundle Resources を開きます。

2. セクション下部の + ボタンをクリックしてバンドル リソースをコピーします。 

3. Add Other... をクリックし、AirWatch SDK ディスク イメージに移動します。バンドル リソースを選択したら、必ず Copy Items if Needed をオンにしてください。 

AWKit.bundle をプロジェクトに追加します。このバンドルがないと、アプリはクラッシュします。

EVAssets.bundle
EVImages.xcassets

この手順が完了すると、画面は次のようになります。

9.png

 

AirWatch SDK フレームワークを追加する

提供された AirWatchSDK.dmg を実行すると、AirWatch フレームワークが利用可能になります。 

1. Link Binary with Libraries セクションに戻り、+ ボタンをクリックします。

2. Add Other を選択します。

3. AirWatch SDK ディスク イメージに移動し、AWSDK.framework ファイルを選択します。

4. Add をクリックします。

5. 上記の操作により、AWSDK.frameworkLink Binary with Libraries セクションに表示されていることを確認します。

10.png

 

AirWatch SDK を使用する箇所では、必ずアンブレラ ヘッダをインポートしてください。具体的には、ファイルの先頭に #import<AWSDK/AWSDKCore.h> を追加します。

:デリゲート ファイルでの初期化処理には、AWSDKCore ヘッダに加え、AWController ヘッダも追加してください。たとえば、SDK を初期化する箇所では、デリゲート ファイルに #import<AWSDK/AWController.h> も追加します。

 

リンカ フラグの追加

AirWatch SDK では Objective-C カテゴリが使用されるため、それが正しく読み込まれるよう、リンカにいくつかのリンカ フラグを渡すように構成する必要があります。プロジェクトを構成する際は、次の手順を参考にしてください。

1. Groups & Files ペインでプロジェクトまたはワークスペースを選択します。

2. アプリのターゲットを選択します。

3. Build Settings を選択します。

4. Other Linker Flags エントリに「-ObjC」フラグを追加します。Build Settings セクションの右側にある検索ボックスを使用して Other Linker Flags を検索できます。 

11.png

 

有効なアーキテクチャ

現時点で SDK は次のアーキテクチャをサポートしています。

  • ARMv7
  • ARMv7S
  • ARM64

貴社アプリの環境にこれらが追加されていることを確認するには、上記の検索ボックスで Valid Architectures を検索してください。:i386 アーキテクチャ/シミュレータは選択しないでください。SDK がサポートするのは実際の物理デバイスのみです。 

12.png

 

 

コールバック スキームを登録する

AirWatch Agent からのコールバックを受け取るため、貴社アプリの info.plist にカスタム スキームを公開する必要があります。

1. Xcode で Supporting Files に進みます。

2. <貴社アプリ名>-Info.plist ファイルを選択します。

3. URL Types セクションを表示します。このセクションが存在しない場合は、plist の Information.PropertyList のルート ノードにこのセクションを追加します。

4. Item 0 エントリを開き、URL Schemes エントリを追加します。

5. URL Schemes エントリの下のもうひとつの Item 0 エントリに、目的のコールバック スキームを追加します。 

13.png

 

このコールバック スキームは、貴社アプリの AppDelegate.m 内の didFinishLaunchingWithOptions で設定するスキームと同じものである必要があります。

screenshot1.png

 

上記の例に従って設定すると、info.plist は次のようになります。 

screenshot2.png

 

 

Xcode 7 でコンパイルする

SDK アプリのコンパイルに Xcode 7 を使用する場合は、貴社アプリの SDK が正しく機能するよう、追加で次の手順を実行してください。 

1. info.plistLSApplicationQueriesSchemes という名前の配列キーを追加します。

2. この配列に AirWatch Agent アプリまたは AirWatch Container アプリのバンドル ID を追加します。Agent および Container のスキームは以下のとおりです。

- airwatch

- workspace

3. Xcode のビルド設定に進み、Enable BitcodeNo に設定します。

 

サーバ接続の構成 (初期セットアップ)

AirWatch SDK の利用を開始するには、SDK が AirWatch デバイス サービス URL を取得できるよう、初期構成を行う必要があります。この構成を行うことにより、アプリが AirWatch コンソールと連携するのに欠かせない、SDK とサーバとの間の通信が可能になります。 

 

SDK を初期化する

SDK を使用するには、まず初期化を行う必要があります。AWController クラスが SDK の初期化を担う主要コンポーネントです。また、このクラスは、次に示すような SDK の主要機能の準備と実装も自動的に行います。これにより、統合のために必要な開発者の負担を軽減することができます。

  • パスコード モード
  • シングル サインオン (SSO)
  • SSID フィルタリング
  • プロキシおよびトンネリング

:AWController の start を呼び出すと、自動的にプロキシがセットアップされ、トラフィックはリダイレクトされるようになります。しかし、実際にネットワーク トラフィックがリダイレクトされるようになるのは、最初の CheckDoneWithServer を受け取った後になります。プロキシ経由でネットワーク接続を行う場合は、SDK によるセットアップが完了するのを待ってから、接続処理を実行してください。以下の例は、SDK の初期化方法を示しています。 

 

<AWSDK/AWController.h> ヘッダ ファイルをインポートします。

#import <AWSDK/AWController.h>

 

 

アプリの AppDelegate に AWControllerDelegate を関連付けます (AppDelegage.h でも同様)。

@interface AppDelegate : UIResponder <UIApplicationDelegate,AWSDKDelegate>

 

 

AppDelegate.m で独自の didFinishLaunchingWithOptions を実装します。

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
  // 次の手順で Controller を構成します:
  AWController *controller = [AWController clientInstance];
  // 1) コールバックを受け取れるようコールバック スキームを定義する: controller.callbackScheme=@"UrlScheme";
  // 2) 初期化完了の通知を受け取れるようデリゲートを設定する: controller.delegate=self;
  return YES;
}

 

 

applicationDidBecomeActive メソッドの中で SDK の初期化を開始します。

- (void)applicationDidBecomeActive:(UIApplication *)application {
  [[AWController clientInstance] start];
}

 

 

:前述の didFinishLaunchingWithOptions メソッドの中で start を呼び出さないでください。start では参照 View Controller に依存するモーダルの View Controller が表示される可能性があります。しかし、ストーリーボードを使用する一部のケースでは、didFinishLaunchingWithOptions が呼び出されるタイミングで View Controller はまだ生成されていません。アプリの挙動が不安定になるのを避けるため、[[AWController clientInstance] start] は applicationDidBecomeActive メソッドの中で呼び出してください。 

 

続いて AirWatch Agent アプリまたは AirWatch Container アプリからのコールバックを処理するコードを実装します。このメソッドは、AppDelegate.m にすでに存在する iOS のコールバック メソッドとは異なるため、新たに追加する必要があります。 

- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url 
            sourceApplication:(NSString *) sourceApplication annotation:(id)annotation {
  return [[AWController clientInstance] handleOpenURL:url fromApplication:sourceApplication];
}

 

 

最後に残りのデリゲート メソッドを実装します。

 

- (void)initialCheckDoneWithError: (NSError *)error

 

これは SDK の初期化時に呼び出されるデリゲート メソッドです。このメソッドは、SDK の初期化処理がすべて終了した時点で必ず呼び出されます。初期化に成功すると、error オブジェクトは nil になります。初期化に失敗すると、error オブジェクトには失敗の理由を示す理由コードが含まれます。 

 

- (void)receivedProfiles:(NSArray *)profiles

 

これは、このアプリに割り当てられた SDK プロファイルの設定が AirWatch コンソールで更新されたときに呼び出されるデリゲート メソッドです。このメソッドにより、新しい設定が利用可能であることがアプリに通知されます。profiles 配列は、構成ペイロードを持つ AWProfile オブジェクトのリストです。 

 

- (void)unlock

 

これは、正しいパスワード/パスコードの入力により新しい SSO セッションが確立された直後に呼び出されるデリゲート メソッドです。

 

- (void)lock

 

これは、SSO セッションの有効期限が切れ、SDK によりパスコード入力画面が表示されたときに呼び出されるメソッドです。このメソッドは、すでにユーザーがアプリにアクセスできなくなっていることを認識するために使用されます。この lock メソッドを使用することで、開発者はアプリがロックされたときに適切なアクションを実行するためのロジックを実装できます。

 

- (void)wipe

 

これは、デバイスがワイプされた、または AirWatch コンソールから加入解除されたと SDK が認識したときに呼び出されるメソッドです。このメソッドは、ユーザーによるパスワード入力が SDK プロファイルで規定された試行失敗回数の上限に達したときにも呼び出されます。 

:このメソッドを呼び出す以外、AirWatch SDK では何のアクションも実行されません。アプリ開発者は、それぞれのアプリで必要な独自のアプリ ワイプ ロジックを実装する必要があります。 

 

- (void)stopNetworkActivity

 

これは、デバイスが SDK プロファイルのブラックリストに登録された SSID に接続したときに呼び出されるメソッドです。

 

- (void)resumeNetworkActivity

 

これは、ネットワークが切断されている状態から、デバイスが有効な SSID に接続したときに呼び出されるメソッドです。 

 

 

まとめ

以上で、基本的な SDK 機能がプロジェクトに追加されました。しかし、この時点では貴社アプリにとって SDK はまだそれほど多くの役割を果たしていません。追加の SDK モジュールを使って、目的の SDK 機能を実装するには、さらにソース コードを追加する必要があります。追加で実装できる機能としては、ビーコン、データ サンプラ、MDM ステータス サンプラなどがあります。詳細は SDK ガイドを参照してください。最後に、組み込んだ SDK を利用するには、AirWatch コンソールからアプリを管理アプリとしてプッシュしなければならない点に注意してください。 

免責事項:これは英文の記事「AirWatch iOS SDK implementation walkthrough」の日本語訳です。記事はベストエフォートで翻訳を進めているため、ローカライズ化コンテンツは最新情報ではない可能性があります。最新情報は英語版の記事で参照してください。

Have more questions? Submit a request

0 Comments

Article is closed for comments.