2015年2月16日月曜日

Swift Developers MeetUp in Tokyoに参加

お疲れ様です。ZuQ9->Nnです。
 2015/02/15(日)Swift Developers MeetUp in Tokyoが開催されたので参加しました。
場所はラトゥール新宿、夜19時から、参加費1000円の
Developerが集まってワイワイする感じのイベント


まずは、主催者さんからの挨拶があり。
そのあとすぐに交流会、ピザと飲み物が振舞われました。
元来、人見知りもあるので、ちょこちょことしていた感じですね。
なんか、それほど交流できたかは疑問です。

そのあと、LT大会5名ほどが発表されていました。
中には大学在学中にスタートアップをしたりとか
若いなりの勢いを感じました。。少しここらへんはうらやましかったり。。

TLのあとは再びピザ第二弾

さすがに、この時は、かなりお腹いっぱい感が強く
ほどんど食べれず、お酒も入ったからか、やたら眠かったです。
22時くらいまで、ぐだぐだ過ごし、最後はみんなで記念写真。

今後、この会は東京で、Swiftが盛り上がるようにハッカソンや勉強会
交流会も積極的に行うコミュニティとして活動するそうです。

2015年2月15日日曜日

iOSオールスターズ勉強会に参加

お疲れ様です。ZuQ9->Nnです。
 2015/02/14(土)iOSオールスターズ勉強会が開催されたので参加しました。

場所は恵比寿のデジタルガレージ/Open Network Lab
参加費1000円、申し込み人数350人という大規模な発表会形式の勉強会
著名なiOSのデベロッパーが発表するとのことで参加しました。

LINE株式会社石川洋資さんの『Adaptive Collection View』

iPadでUICollectionView、iPhoneでUITableViewで実装したほうが
良さそうなUIを実装をする場合。UICollectionViewで全て実装してしまおうとの提案

UICollectionViewでUITableViewっぽいものを実装するのは割と簡単だそうで
レイアウトもUICollectionViewFlowLayoutを使えば良いとのと
estimatedItemSizeを設定し、UICollectionView
LayoutAttributeをUITableViewCellに似せる

その後、作ったアプリのデモをされました。
行は固定のサイズだけでなく、可変の値でも対応可
一つのViewconControllerとCellでiPhone、iPadの対応が可能

セルのサイズ計算はself sizing cellを利用する
iOS7の対応の葉愛はself sizing cellを真似て
systemLayoutSizeFittingSize HeightForRowAtIndexPathを呼ぶとのこと

iPhoneとiPad対応する場合は同じコードを2度書かないなど
耳が痛い忠告もありました。
全く知らないテクニックが紹介されていて大変参考になりました。

株式会社ユビレジ岸川克己さん『Swift製ライブラリの良い書き方を考える』

iOS系の勉強会で何度もお会いしている岸川さん。
ご自身がgithubで公開されているUICKeyChainStore をサンプルに
人に使われる時にどのようにすれば使いやすいコードになるかって話

例えば、Optinalの取り扱いについて、オブジェクトがOptionalはnilの可能性があります
Objective-Cでは割とカジュアルにnilを渡していたのですが、
Swiftでは型が厳格なので出来る限り、Optionalでない値を引数に渡す

メソッドにデフォルト引数を使う場合は、保管が、まず
デフォルト引数のある補完候補があらわれるため
使いずらく、メソッドのオーバーライドで実現をしている
クロージャの場合は、デフォルト引数のほうが使いやすい

戻り値が違うだけのメソッドのオーバーロードは
asで型を明示しなければならず、コードを書くリズムを壊す。

エラー処理はObjective-CではNSErrorのダブルポインタで実装されるが
SwiftではEither型を使うほうが気持ち良く書ける。
クロージャでエラーを扱う場合は、今まで通りNSErrorを
エラー処理は独自のErrorオブジェクトより標準のNSErrorで良い

ライブラリを公開するときはPlaygroundを付けてあげよう。
Functional styleは、こちらでも書けるよ。。くらいに付けてあげる
岸川さん個人的な見解だそうですが、Either型なんて全く知らなかったので
かなり影響を受けそうですね。。

ヤフー株式会社佐野岳人さん『let UIWebView as WKWebView』

iOS8からサポートされた新しいWebView WKWebViewについて
UIWebViewとインターフェースは似ているが互換性がない。
ナイーブな下位互換対応すると分岐が大変

方針としてラッパーで1.隠蔽する、2.UIWebViewをいじることを説明
いつかiOS7のサポートを切るときに、苦労しないようにとのこと

Wantedly inc杉上洋平さん『通信のパフォーマンス改善』

Wantedlyのアプリで通信のパフォーマンス改善
cocoapodsで対応しているPony Debuggerというライブラリを用いると
通信を解析され、JSONのリクエストより画像の容量が多いことを発見
画像はSDWebImageのライブラリを用いて作っていたので
そちらのコードを解析、なんと不具合をみつけて
Pull Requestを行いmergeもされたそうです。

画像を優先付け、画像のフォーマットをWebPに変える
それに伴ってサーバー側も変更
改善したパフォーマンスはiPhoneの設定を変更して
確認することが可能だそうです。

かなり参考になりましたが、SDWebImageを
実プロジェクトで利用してないんですよね

グリー株式会社矢口裕也さん『効率的なアプリ開発のベストプラクティス』

なるべくはやくつくってしまいたい。
品質は必要十分である 効率的に実装するにはどうしたらよいか

そんな時の大原則は「やることを減らす」
具体的には
  • UIの実装コスト
  • 通信の実装コスト
を減らす、UIの実装コストを下げる具体的にはAuto Layout、Storyboard、Self Sizing Cell
通信の実装コストを下げるには、ほぼ実装に依存するが
大原則はサーバー側に任せる。APIは共通化、RESTにとらわれない。
JSONModelやMantleなどのライブラリで扱いやすいJSONを返してもらうなど

サーバー側仕様変更で問題になるもの
綺麗なRESTFul APIサーバー、汎用的なAPIであることを理由に
特定画面に特化したAPIを断られることが多い

レガシーサーバー
触るのが怖い、同じような処理をする新APIを実装した場合にデグレがおこる

サーバー側をどう説得するか
パフォーマンスの向上のメリットを説明
最終手段として中継サーバーをたてましょうだそうです。。

フリーランス 堤修一さん『WatchKit を実際にさわってみて』

いつもブログでiOSの技術を発信している堤さん。
最近ではBLE関連の記事が多いのですが、今回はWatchKit

はじめブログで記事を書いたときは、なんにもできねーなって印象だったWatchKit
実際さわってみると、意外とできることが多いことを発見。
まずは、WatchKit ExtensionはiPhone側で動く等WatchKitの概要を説明
  • アニメーション
  • テキスト入力
  • カスタムUI
これら3つの内容について詳しく説明
アニメーションについてはstaticアニメーション、dynamicアニメーションの実装
テキスト入力については、まだシュミレーターで確認できない。
カスタムフォントについては、iOSと同じ方法でやったらできた。。

Appleの公式サンプルでみると、画像を複数枚用意して
カスタムUIを実装するのが今の所ベストプラクティス??
インターフェースのオーバーレイぽいこともbackgroundを活用してなんとかなる
検証サンプルコードは、空気をよんで近く公開予定だそうです。

クックパッド株式会社所友太さん『リリース前の確認方法まとめ〜長生きするために心臓に悪いリリースはもうやめよう』

iPhoneプログラミングUIKit詳解リファレンスで有名な所さん。
 リリースボタンを押すときに 安心してボタンを押せるために
Internal Testersを使っての確認を説明

まずは、AdHockとプロモーションコードを使ってのテストでは
厳密な意味で違うものをテストする

Internal Testersとプロモーションコードを使ってのテストでは
Appleの審査が始まる前に始められるという違いがあることを説明

Internal Testersは、是非利用すべきメリットとして

  • AppStoreで公開されるアプリと同じものをテストできる
  • Appleの審査前にテストできる
デメリットとしてiOS8以降でしかテストできない
テストできる人数に制限があることを説明

次にInternal TestersとCIについては、
競合するものではないので、両方利用すべき。

万が一事故が起きた場合はBuild Detailsのスクリーンショットを撮る
実際に公開されているアプリのipaファイルをバージョン管理しておくことだそうです

クラスメソッド株式会社平井祐樹さん『エンジニア戦記 ~ 小さなチーム 大きな未来 ~』

多くのiOS系ブログ記事を投稿されているクラスメソッドさん
クラスメソッドさんでは、プロダクトオーナー、デザイナー
Web API担当者、iOSエンジニアで構成されていて

Web APIとの付き合い方を物語形式で説明。。
なんだか、話を聞いてあるあるネタが披露され
かなり、プレゼンが面白かったです。

まとめとして、
  • Web APIの知識は必須。
  • 文句を言うのは簡単、改善案を提案できる力を
  • Web API The Good Partsを読もう!

面白法人カヤック布田隆介さん『まだiOSでリッチな演出に疲弊してるの?』

面白法人って名前がインパクトのあるカヤックさん
CoreAnimationやUnity、cocos2dやライブラリで
演出を実装すると、それぞれにデメリットがあり疲弊する

そこで、何か別な方法がないかと探したところ
iOS標準のSpriteKitを利用して演出を作成それをUIKitで利用

エディターでのパーティクルの作成
SKActionでパーティクルにアニメーションをつけれる

UIKitと一緒に使う場合の注意点としては
UIViewの上に透明なSKViewを乗せ
SKViewのタッチイベントを無効にする。
UIViewの[0,0]とSKViewの[0,0]の座標が違うので変換を行う等
具体的なテクニックが紹介されました。

最後にまとめとして
  • Appleが提供しているので安心
  • 既存のコードの邪魔をすることなく導入できる
  • デザイナーさんも使える
UIKitとSpriteKitの組み合わせはありで
リッチな演出もiOSネイティヴでとまとめられました。

そのあと、ベストプレゼンターを投票、懇親会で発表がありました。
ベストプレゼンターはWantedly incの杉上さん。。
懇親会では、ぐだぐだ喋りながら過ごしてしまい。写真を撮り忘れていました。。orz..