Adnetwork作ったけど何か質問ある?」ということで、アーキテクチャ、AWSに対する所感、リリース後に起こった様々な事件など、クローズドな場だからこその話に質疑応答も盛り上がりました。次は木村さんからの事例。サービスの概要と、様々なAWSのサービスから好きなサービスを3つほど紹介してくれました。質問に対する回答にも利用実績に裏付けされた重みがあり、とてもためになりました。後半は「本当にあった怖い話」をテーマにパネルディスカッションを行いました。粟飯島が参戦!まじで外ではできない話のオンパレードでみんな大笑いや苦笑いしてましたw▼最後に今回も大いに盛り上がったので、まだまだ続けていきたいと思います。GROUPエンジニアのガイアです最近はiOSアプリの開発を主にやってます。今までのiOSアプリ開発でアニメーションはほぼ触ったことがなかったのですが、今回アニメーションを行う用件が出てきたので、今回やったことを紹介します。今年の5月始め、facebookがアニメーションエンジン「Pop」を発表しました。「Pop」はfacebookがリリースしたアプリ「Paper」で使われているアニメーションライブラリをオープンソース化したものです。海外では盛り上がっています。GithubでPopのページを見ると注目度の高さが分かります。iOSでアニメーションは初めてですが、せっかくなのでPopを使ってみました。bloghttps://code.facebook.com/posts/234067533455773/introducing-pop-the-animation-engine-behind-paper/このページでPopにおける目標が3つあげられています。この目標自体がこのPopを使う利点でもあります。installCocoaPodsでインストールできます。1.0’必要なところでインポートします。Codeでは実際のコードを見ていきます。LayerPositionのXをアニメーションさせる2つアニメーションを定義すると合成される。kPOPViewAlpha:Alphaの値をアニメーション普通のアニメーションも同様に記述できるため覚えることが少なくて済みます。PropertyNamedを変更すればアニメーションする要素を変更できます。簡単にアニメーションできてしまいます。Popを使わずにアニメーションしようとすると実装方法は複数あります。Objective-CでアニメーションまとめPopではNSObjectにカテゴリで関数を追加しているため、CALayerやUIViewなどで同じアニメーションのコードを書けます。これがコードが統一され、「開発者に優しいかつ強力なプログラミング·モデル」を提供できている要因の一つのようです。拡張可能2番目のポップは拡張可能なフレームワークにするとはどういうことでしょう?実はアニメーションのカスタムプロパティを作ることができるようです。(iv)試しにLabelの数値をカウントアップするプロパティを作ってみました。プロパティがなくても割と簡単に作ってしまえるのはいいですね。複数アニメーションを直列で実行したいBlockを使えばできますが、簡単にできるようにライブラリを提供してくれている人がいました。このライブラリを使えばBlockが使えるだけでなく、Popの構文をさらに短縮してくれます。<POP+MCAnimate.h>codeまずは構文の短縮です同じ動作をするコードですpoppop+MCAnimateさらにアニメーションをBlockで分けて記述することが可能です。ばねのようなアニメーションの後X軸で回転するアニメーションです。直感的に書けるのでいいと思いました。(おそらくPopそのままでも直列のアニメーションを書けるとはおもいますが...)実際にPopを使ってみて、まだまだできないこともありますができる限りPopを使いたいです。:facebookpopanimationiOS初心者voyagegroup_tech2014年05月07日18:26カテゴリiOSiPhoneアプリでABテストこんにちは、genesixで働くiOSエンジニア、@TachibanaKaoruです。最近Web業界ではA/Bテストがすっかり定着してきます。iPhoneアプリでもA/Bテストをしてみたいと思う方も多いと思います。AとBの二種類のパターンでユーザーインターフェースをデザインして、起動時にランダムでどちらかのパターンになるように実装して、アプリをリリースして、ユーザーのレスポンスを計測したあとで、また決まったユーザーインターフェースでアプリをリリースして......なんてことを考えると、ちょっと億劫になってきますよね。そこで、アプリをリリースし直さずにiPhoneアプリのユーザーインターフェースを動的に変更する方法を実装してみました。ここのユーザーインターフェースはどうしよう、ちょっとユーザーの反応をみて決めたいんだけど......と迷ったときに試してみてください。サンプルソースはこちらにおいています。https://github.com/toyship/DittoSampleユーザーインターフェースを変更する(サーバーを使わない場合)まずは、特にサーバーを使わない、簡単な方法です。アプリのなかに複数のStoryboardを持っておけば、任意の時に、Storyboardを全部入れ替えることができます。起動時に切り替えてもいいですし、ユーザーが選択したタイミングで切り替えてもいいですよね。rootViewControllerを差し替えると、アプリ全体のユーザーインターフェースをまるまる変更することができます。Storyboardをさしかえることで、なにができるんでしょうか。ボタンや表示テキストの色や配色や位置など、画面のデザインやレイアウトを変えることができるのはもちろんですが、segueによる画面同士の遷移を変更することも可能です。トップ画面をタブ形式にするのか、それともテーブルビュー形式にするのかなどで悩むことも多いと思いますが、2パターンのStoryboardを作って、ユーザーの反応を測定してから決定することもできますね。ユーザーインターフェースを変更する(サーバーを使った場合)さて、さきほどの方法を使うと、アプリのUIをまるまる変更することはできますが、アプリの中に含まれたStoryboardファイルの内容を変更したり、数を増やしたりするためにはアプリを再リリースしないといけません。これではちょっと柔軟性に欠けてしまうので、このStoryboardをサーバー側からとってくる仕組みにして、アプリの再リリースが必要ないようにしてみましょう。サーバー側においておけば、いつでもStoryboardの内容を変更できますし、必要に応じて数を増やしたりすることも可能です。Storyboardをダウンロードできるように、StoryboardがはいったNSBundleを作ります。そのNSBundleをzipにしてサーバーの適当な場所に配置します。アプリ側では、そのzipファイルをダウンロード・解凍して、そのなかからStoryboardをとりだします。あとはさきほどと同様に、rootViewControllerを変更すれば、アプリ全体のユーザーインターフェースを変更することができます。Storyboardデータ構造の変更に対応するStoryboardで変更できるのは、画面のレイアウトやデザイン要素だけではありません。実はStoryboardで、データ構造の変更に対応することもできます。Attributes」という仕組みがあります。この図に表示されているStoryboardのインスタンスはDITTableViewControllerというクラスのオブジェクトになっています。Attributes」の部分に入力したい値をいれておけば、このオブジェクトが生成されたときに、指定した値が入力されます。この図の設定の場合には、下記のソースコードを書いた場合と同じ処理がStoryboardだけで実行されるわけです。処理の流れとしてはこんな感じになります。Pathの値をどちらもStoryboardで設定できるようにしておくことで、APIを変更した場合や、データベース構造が変更になった場合にも、Storyboardを差し替えるだけで対応できるようになりました。画面に表示する要素も同じ仕組みで変更することが可能です。この図では、UILabelを継承したDITLabelを使って、上記でダウンロードされたJsonファイルの中のim:artist.label要素を画面に表示するようにしています。Storyboardを変更するだけで対応することができます。サンルコードのなかに、ソースコードを変更せずにStoryboardだけで「無料アプリリスト」と「映画リスト」をiTunesから取得して表示する画面を作ったので確認してみてください。測定どのようにユーザーインターフェースをきりかえる方法を説明しましたが、A/Bテストで重要なのは確実な測定と分析です。ユーザーインターフェース変更の仕組みをいれるだけではなく、それぞれのインターフェースでユーザーがどのように反応したのかを測定し、定期的に分析するのが重要です。Analyticsを使って、適切な計測ポイントをいれておきましょう。まとめStoryboardを切り替えるとアプリ全体のユーザーインターフェース全体を差し替えることができ、A/Bテストを実施できます。Attributes」を使うことによって、データベースの変更やAPIの変更にも対応できる仕組みを作ることも可能です。iOSでA/Bテストができるサービスもいくつかあるので、実装がめんどうであれば、そちらを利用してもいいと思います。テストをカスタマイズしたい場合や、自サーバーでデータを収集したい場合などには、是非この方法も試してみてください。