iOSDC2017 前夜祭に行ってきました。
早稲田大学西早稲田キャンパス。駅と直結なんてすごすぎる。建物も無骨ながらおしゃれ。カルチャーショック。
freeeのFREEドリンク(ボソッ) #iosdc pic.twitter.com/ySedp7ehBj
— Kazumasa Kumamoto (@kumamo_tone) 2017年9月15日
「フリードリンク」という書き方がわざとらしいし先に気づいている人100万人ぐらいいそうだなと思ったらy.imajoさんがすでにつぶやいていらっしゃった。
ダジャレっぽい #iosdc pic.twitter.com/wOTDl6rRmV
— y.imajo (@yimajo) 2017年9月15日
以下発表です。内容メモは本当にメモという感じなので間違い等ありましたらすみません。
にわタコさんのまとめがあまりにリアルタイムで吹いた #iosdc
— Kazumasa Kumamoto (@kumamo_tone) 2017年9月15日
にわタコさんは本当に凄い
SiriKit and Me -TachibanaKaoru (@TachibanaKaoru) さん
CfP
去年発表されたSiriKit。Siriにしゃべるだけでアプリが動かせる?と話題になりましたが、実際には使える機能が限定されているので、なかなか使う機会が多くないと思います。 その上、実際にプロダクトにいれようとすると、SiriKitは通常のアプリ開発ではあまり出会わないような困難がいろいろと待ち受けています。 ここでは、実際のプロダクト開発の経験とをもとに、それをうまくのりこえる方法をお教えします。 WWDCでAppleのエンジニアに聞いてきた裏技もお伝えします。
リンク
内容メモ
- 「SiriKit使ってる人?」→この広い会場に3名w
使用例
- Siriからタクシーを呼ぶ
- LINEでメッセージを送る
SiriKitおすすめの理由:
- システム・アプリケーションから自分のアプリへの導線を確保することができる!
- アクセシビリティ的にも良い(目が見えなくても使える)
- アプリが日本語のみの対応の場合でも、他の言語から呼び出せる(たぶん)
- HomePod
SiriKitの使いかた:
- SiriKitはフレームワークの名前ではない。SiriKitはAppExtension23種のうちのひとつ
- Intents, Intents UIの2つのフレームワークがある Intentsフレームワークを追加すると、追加されたファイルの中にMessage Intentsに対応するためのコードがついてくる
ハマりポイントが多い:
- メモリ上の情報を共有できないという問題がある。
- タイムアウトエラーがあるので時間の掛かる処理は
- バージョンアップで動かなくなる
まとめ
ハマりポイントも多いけど頑張っていきましょう!
感想
LINE使えるの知らなかった。Siriのジョークが
ツイートピックアップ
SiriKit =>「ソースコードが変わっていないのに動作が変わっていた」 つらっw #iosdc #a
— ものくろ@SW-679318812502 (@monoqlo) 2017年9月15日
つらそう
Objective-C++を使ってMRCで快適に開発する - 八十嶋祐樹 (@yaso_san) さん
CfP
iOSやMacの開発において現在ではARC(Automatic Reference Counting)が前提となっており、MRCの時代と比べて飛躍的に簡単になりました。しかし、開発するアプリによってはMRCでメモリ管理をしたい場面が少なからずあるはずです。そんな時はObjective-C++の力を使って、ARCのように快適な開発をしましょう。
リンク
内容メモ
サンプルコード
ARCとMRC
- MRCは参照カウンタ方式のメモリ管理を手動で行うやつで、ARC以前はこれでがんばっていた
- release すると参照カウントが減る。@autoreleasepool を使うこともできる。
- Objective-Cを使うには拡張子を.mmにする
- Objective-C++ではObj-CとC++が混在できる
似た機能の呼び方の違い
ObjC/Swift | C++ |
---|---|
インスタンス変数・メソッド | メンバ変数・関数 |
イニシャライザ | コンストラクタ |
ジェネリクス | テンプレート |
ブロック・クロージャ | ラムダ式 |
開放されるタイミング:
- C++ スコープを抜けた後(関数)、デストラクタが呼ばれるタイミング(クラス)
- Obj-C
[super dealloc];
が呼ばれた時
Objective-Cのオブジェクトを保持するC++のクラスをつくりました
objc_ptr
- テンプレートにObjC型のインスタンス retainして保持
- 参照カウントをそのまま保持する
- autoreleaseを外して保持する
- 弱参照で保持(weak_objc_ptr
)
これにより、ARCを使っているときと同じぐらいシンプルに書けるようになった :+1:
Q&A
感想
Obj-C/SwiftとARCだとできないところを、人とは違う道を地力で切り開こうとしているところがエンジニアとして素晴らしいなと感じました。
ツイートピックアップ
「まず、Objective-C++でMRCで快適に開発する必要があるのかどうかですが、そこは置いといて」 #iosdc #a
— takasek (@takasek) 2017年9月15日
この前置きから始まったので本当に道楽みたいな話なのかなと思いましたが普通に納得感ありました
ARCの時代に生まれてよかった感しかない #iosdc #a
— Shigure Shimotori (@S_Shimotori_pub) 2017年9月15日
本当にそれという気持ち
iOSDCのハッシュタグがおっさんホイホイになっている #iosdc
— kazuhiro4949 (@kazuhiro494949) 2017年9月15日
Swift世代なのでそうなんだ〜という気持ちでTLを眺める
コーディング規約をしっかりしないとぐちゃぐちゃになりそう、C++かObjective-Cのどちらかに寄せて必要に応じてオブジェクトを変換するのが良いのかな #iosdc
— Tatsuya Tanaka (@tanakasan2525) 2017年9月15日
書き手の良心が試されそう
new,delete,malloc,freeが混在するんやで…
— nsʇ‾ɐʞ‾ɐʇ (@ta_ka_tsu) 2017年9月15日
delete[]とかもあるんやで…
ああ、地獄の日々がフラッシュバックする…#iosdc
これもヤバそう。
Swaggerで始めるAPI定義管理とコードジェネレート - 杉上 洋平 (@susieyy) さん
CfP
REST APIのインターフェイス仕様をSwaggerのAPIドキュメントで一元的に定義・管理することで、モバイルとサーバエンジニア間のコミュニケーションを齟齬なく円滑に進めることができます。 さらに、SwaggerのSwiftコードのジェネレート機能を活用することで、工数の削減と品質の向上を図り生産性を高める方法をご紹介します。
リンク
内容メモ
なぜ管理したいのか?
- サーバーとの認識の齟齬を減らす。値の型や、本番ではnullで返ってくることがあった!とか‥
- →Swaggerを使う(世界一使われている)
Swaggerについて:
- Swagger、色々ある 専用エディタが提供されていてブラウザで動いたり。
- リアルタイムで指摘してくれて良い
- エンドポイントのパス、QUERYパラメーター定義、レスポンスのモデル定義への参照
Swagger CodeGen:
- 色んな言語に積極的に対応(Swift4,Kotlin‥)
- JSONのパースはCodableで実装、Optionalの定義にも対応、API Client部分はAlamofireがベース、RxSwiftとも連携可能(レスポンスがObservableになる)
まとめ
- これからは品質に観点がフォーカスされていくのでは? SwaggerでのAPI定義およびコードジェネレートがその一助になると良いですね
感想
CodeGen便利そう!使ってみたい 雰囲気しか追えてないところもあるので後々資料よく眺めたいです。
Swaggerで始めるAPI定義管理とコードジェネレートhttps://t.co/h9F7tCuznE #iosdc #a 登壇しました! ご清聴ありがとうございます!!
— susieyy (@susieyy) 2017年9月15日
ツイートピックアップ
Swaggerはツール群の総称 そうだったのか #iosdc #a
— takasek (@takasek) 2017年9月15日
個人的にもこれがひとつ学びでした。
Swaggerここまでやってくれるようになってたのか #iosdc #a
— Daiki Matsudate (@d_date) 2017年9月15日
意外と良さげでそそる。
節子、それViewControllerやない…、FatViewControllerや…。 - 田中賢治 (@ktanaka117) さん
UIViewController(以下UIVC, VC)クラスにおいてよく起こりがちな問題があります。iOS開発者であれば一度は耳にしたことがあるでしょう、「VCの肥大化問題」です。VCの肥大化の原因は、UIVCクラスの責務過多にあります。 このトークでは、UIVCクラスの責務を見つめ直し、「VCの肥大化問題」に対して、設計の観点からどのように解消できるかを紹介します。 扱う内容(仮) ・UIVCの責務を振り返る ・よくある解決策: MVP ・責務分けにチャレンジ!
リンク
内容
なぜViewControllerの責務分けが重要なのか?:
- →VCがアプリにとって重要なため、実装をVCに寄せがちだから
- 通信処理がVCにある複雑なビジネスロジックがVCにある…テストどう書く?
FatVCとは
- ☓コード量が多い
- ○抱える責務が多くなっている
FatVCの欠点は?
- 読みにくいしバグが入り込む、テストしにくい
MVP:
- ビジネスロジックと描画処理を疎結合にする
- Pが入ることに寄って、ビジネスロジックへの繋ぎ込みが切り出せる
- 責務を切り分けるのが正義なのか?:
- 必ずしもそうではない。やりすぎると開発コストが高くなってしまうデメリットもあるので、その場その場で設計は使い分けよう
- →テストしやすさ、メンテナンスしやすさのために、適切に責務を切り分けましょう!
感想
話が面白すぎる。MVA大事。
「あ、今ブログ上げたんでみてください」 #iosdc
— Kazumasa Kumamoto (@kumamo_tone) 2017年9月15日
リアルタイムでブログ投稿する田中さん。
記事がとても親切。
ツイートピックアップ
Javascriptに親を殺されたのか。。。
— taminif (@sbntaminif) 2017年9月15日
#iosdc #a
何があったんだ
Swiftの場合は責務を分けすぎるとビルド速度がやばーい #iosdc #a
— Taketo Yoshida ⚾ (@TamaObject12) 2017年9月15日
なるほどビルド時間にも影響が出るんですね。
終わった後
ここからは日記です。
西早稲田キャンパスからはちょっと遠かったですが武闘家という家系ラーメン屋に行きました。
家系、チェーンとかまともなの食べたことなくて、一回ちゃんとしたやつ食べてみたかったのだが、大変おいしくて満足。
ノンスピーカー・盆踊り #iosdc pic.twitter.com/OHLCf9TAr4
— Kazumasa Kumamoto (@kumamo_tone) 2017年9月15日
帰ろうと思ったら祭りやってた。
完全に夏だった pic.twitter.com/C8p96seFRC
— Kazumasa Kumamoto (@kumamo_tone) 2017年9月15日
完全に夏。
ついでにノンスピーカー・神社参拝した
— Kazumasa Kumamoto (@kumamo_tone) 2017年9月15日
あとの2日も学び深い・楽しい日になりますように!