Objective-C
AWS
iOS
AWSDay 16

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

More than 3 years have passed since last update.


はじめに

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で動く物を生成すれば

自作アプリへの応用の一手目が大分楽になると思います。