自作アプリにAWSの機能を組み込むのにAWS Mobile Hubを利用

  • 7
    いいね
  • 0
    コメント
この記事は最終更新日から1年以上が経過しています。

はじめに

AWS Advent Calendar 2015 16日目ということで「AWS Mobile Hub」を利用した話です。

AWS Mobile Hubでは画面上で機能を選択すると
AWS側の設定を自動生成してくれて、さらにiOS/Androidでそのまま動かせるファイルを吐き出してくれます。
この動作サンプルが便利!
目の前に実際に動作する物があると、それを動かしながら確認できるので話が早い!w

Amazon側の想定する使い方ではないかもしれませんが
こんな利用の仕方もあり、開発効率を上げるのに便利だった!という話です。

今回は
「自作iOSアプリに、S3利用し画像をアップロード・ダウンロードする機能を追加する場合」
にどんな手順を取ったかの記録です。

Mobile Hubさんに動作するサンプルを生成してもらう

AWSログイン後、Mobile Hub画面にて「Create new mobile project」

スクリーンショット 2015-12-15 12.49.07.png

プロジェクト名は適当に「Sample20151216」などにしておきましょうか。
で「Create Project」でプロジェクト作成。

User Data Storageボタン選択。

スクリーンショット 2015-12-15 12.50.05.png

Store user dataを選択した状態で「Save changes」で保存。

スクリーンショット 2015-12-15 12.50.16.png

画面左側メニューの「Build」から「iOS」を選択。

スクリーンショット 2015-12-15 12.51.22.png

しばらくAmazon側の自動生成を待つとダウンロードできるようになります。
(先程実行した時は約1分弱でした)

スクリーンショット 2015-12-15 12.51.43.png

ダウンロードしたらWeb上でやることは取り敢えず終了です。

自作iOSアプリにそれを組み込み

生成されたMySampleAppプロジェクトを開いて実行し動作することを確認。
そのプロジェクトを参考に、自作アプリのプロジェクトに手を入れていきます。

ライブラリ追加

AWS関連FrameworkをMySampleAppから自作プロジェクト配下にコピー。
スクリーンショット 2015-12-15 13.07.22.png

AWS関連に加えてその他のFrameworkも自作プロジェクトに追加。

スクリーンショット 2015-12-15 13.10.51.png

AWS関連ソース追加

AmazonAwsフォルダを自作プロジェクト配下にコピー。
Add Files to でフォルダごと追加しました。

画像一覧画面追加

UserFilesフォルダを自作プロジェクト配下にコピー。
Add Files to でフォルダごと追加しました。

AppDelegateに追記

AppDelegate.m
#import "AWSMobileClient.h"

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    return [[AWSMobileClient sharedInstance] didFinishLaunching:application withOptions:launchOptions];
}

- (void)applicationDidBecomeActive:(UIApplication *)application {
    [[AWSMobileClient sharedInstance] applicationDidBecomeActive:application];
}

画面周り

動作確認用ボタンは横着してコードで生成してます。

ViewController.m
#import "ViewController.h"

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad
{
    [super viewDidLoad];

    UIButton *btn = [UIButton buttonWithType:UIButtonTypeRoundedRect];
    btn.frame = CGRectMake(20, 200, 280, 30);
    [btn setTitle:@"S3画像一覧表示" forState:UIControlStateNormal];
    [btn addTarget:self action:@selector(btn_action:) forControlEvents:UIControlEventTouchUpInside];
    [self.view addSubview:btn];
}

- (void)btn_action:(UIButton *)sender
{
    UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"UserFiles" bundle:nil];
    UIViewController *viewController = [storyboard instantiateViewControllerWithIdentifier:@"UserFiles"];

    [self.navigationController pushViewController:viewController animated:YES];
}

@end

余談

Single View Applicationで生成した場合、
初期のViewControllerはnavigationControllerの制御に乗っていません。

なので上記実装では画面が出ません。

以下の手順でnavigationControllerの画面制御に置きます。
1. StoryboardでNavigationControllerを追加。
2. NavigationControllerの「Is Initial View Controller」にチェック。
3. 自動でくっついてきているTableViewControllerを削除。
4. NavigationControllerのrootViewControllerにViewControllerを設定。

おわりに

その他の機能も一度Mobile Hubで動く物を生成すれば
自作アプリへの応用の一手目が大分楽になると思います。

この投稿は AWS Advent Calendar 201516日目の記事です。