kumamotone’s blog

iOS/Android アプリエンジニアです https://twitter.com/kumamo_tone

potatotips #51 に参加しました (iOS, Androidブログまとめ)

potatotips #51iOSブログまとめ枠で参加させていただきましたのブログです。

f:id:kumamotone:20180523232304j:plain

会場はCAMPFIREさん!渋谷ヒカリエからすぐという超好立地なのに道に迷ってギリギリになってしまった…

f:id:kumamotone:20180523232317j:plain

写真撮り損ねて閉会後になってしまったけど会場の写真 芝あって良い雰囲気

以下発表内容です。参加枠としては iOSブログまとめ枠でしたがAndroidの発表内容に関してもまとめています。

間違いや気になるところなどあればご指摘ください。埋まっていない資料は公開されたのを見つけ次第反映します。

Firebaseで頑張ったこと / nakajijapan さん

Presentations by nakajijapan // Speaker Deck

Firebase Authentication、Tokenの有効期限が1時間であることを考慮して実装しなければならない。getIDTokenForcingRefresh() を使ってリフレッシュすることになる。

retry処理をRxSwiftのretryWhenで実装していた。ただ成功しても失敗しても.nextして.completed してしまっていたので、うまく行ってなかった。

ちゃんとエラーハンドリング実装したら動いた。FirebaseもRxSwiftもちゃんと理解して使おう。

モバイルアプリための通信デバック入門 / imota さん

Presentations by simota // Speaker Deck

通信デバッグのためのHTTPプロキシを紹介。

FiddlerWindowsユーザー向け。Windows使っているならこれがおすすめ。Charlesは無料版だと時間制限がある。

mitmproxyというPythonで書かれているやつがあって、おすすめ。pipで入る。TUI、GUICUI版がある。SSLで暗号化された内容でも、内容を見たり、スクリプトを書いて書き換えたりすることができる。

App Protection ( iOSアプリからVPN接続の検出をする ) / noppe さん

speakerdeck.com

Charles for iOS 出ましたね

うっかり Charles 起動したまま Twitterアプリ開いちゃったんですけど、Charles開いてる状態では読み込めなくしているっぽい。これどうやったら再現できるだろうか?

Charlesは自体は、NetworkExtensionを使ってVPNコネクションを張り、これを使ってIPトラフィックがトンネリングできるという仕組みなのだが、再現する方法は割りとシンプルで、

CFNetworking.frameworkCFNetworkCopySystemProxySettings() という古くからあるものでプロキシ設定が取れる。

CFDictionary という型で返ってきて、__SCOPED__tun という文字が含まれる設定はトンネリングされているものなので弾いても良いのでは?という仮定で実現することができた

コードは公開しています↓

github.com

What's CodeSigning / scenee さん

Presentations by Shin Yamamoto // Speaker Deck

CodeSigningとは?公開鍵暗号方式で、電子署名を付与すること。これをやることで、開発者自身が作成したアプリケーションだということを保証する。

署名はどこに保存されている?Mach-O(実行ファイル)だと CMS形式で署名が埋め込まれている。

Provisioning Profileはアプリプロセスに権限等リソースを提供するためのファイル。これもCMS形式

App起動時にMach-Oの署名情報と、Provisioning Profile を照合しているので、開発者自身が作成したアプリケーションだということを保証できる。秘密鍵がIdentity、公開鍵がProvisioning Profileにあたる。

ほか細かいTips(Provisioning Profileの中身を確認するコマンドなど)

Flutter 入門 / toshihirooya さん

speakerdeck.com

Google が作ったクロスプラットフォーム開発フレームワーク Flutter の紹介。DartAndroid Studio で書けるぞ!

例を紹介。 void main() => runApp(new MyApp()); から始める。 StatelessWidget な MyApp でアプリタイトルとかテーマとか設定する。MyApp から StatefulWidget なクラスを呼んで State を表示する。宣言的な感じになるのでMVVMのVMっぽいイメージ。

今年の I/O の内容だが、 FlutterFire というFlutter用のFirebaseプラグインというのがあってよさそう

github.com

Flutter、素早く両OS開発できる可能性に溢れている 期待!

あると便利な動作検証用機能 / 5mingame2 さん

www.slideshare.net

前回のpotatotips iOSで紹介した、C++(Cinder)でゲームを作る話の続き。

作ってるゲームで動作検証用に付けてる機能を紹介するよ

  1. print機能
  2. asset機能
  3. 一時停止・コマ送り機能を付ける
  4. 表示抑制(切り替え)機能 ゲーム画面ではなくUIだけ動作したいとかその逆とか
  5. ソフトリセット機能
  6. macOS固有の読み込みパス変換 プリプロセッサで頑張っている
  7. 画面解像度一発変更機能 Release ビルドでは消滅する
  8. リアルタイムUI調整機能 これも Release ビルドでは消滅する

別になくてもゲームは作れるが、こういうのは作ると捗る!

Remove Unused Resources / konifar さん

speakerdeck.com

Android Lint の unused resources、ウソをつくので使えない とくにdatabinding とか使っていると、こいつの言うとおり消してくとビルド通らなくなってつらい

でも不要なリソースは消したい… いつかなおると思っていたが、いつまで待っても出ないのでGradleプラグインを作った

github.com

実行するだけ。小さなプロジェクトだとすぐ終わるが、大きなプロジェクトだと、やはり時間がかかってしまうこともある(5分とか)。gistに貼っているスクリプトを定期実行すれば定期的に消せる。

gist.github.com

オプションが2つあって、1つめはサポートされてないリソースファイル、たとえばtext_appearanceの <style> とか消したいとき、createXmlValueRemover()関数でカスタムの設定を書ける。

2つめは excludeNames に設定すると、除外できる。

投げ銭アプリを会社で作っているので、消えた行数を目安に投げ銭してもいいのよとのこと。

Xcode Templateを使ってチームで生産性を上げる / ngtk さん

speakerdeck.com

Xcodeにテンプレート機能がある。一般に、テンプレート機能は共通の記述を書かずに済むようになるので、生産的。

もちろん protocol extension や コード自動生成をまっさきに検討するべきだが、残る温かみをテンプレートでやるということもできる

ただXcodeのテンプレート、カスタムで追加する方法や共有する方法が公式に書いてなくて分かりづらい‥

テンプレートファイルは、適切な位置に __FILEBASENAME__.swift TemplateInfo.plist とか決まった構成で置くことになる。

gitとかで共有したテンプレートファイルをここに置けば良いのだが、結構込み入った場所にあるので、スクリプトを書いた。さらにこれだと使いづらいのでコマンドにした。 brew で入れることもできる。

github.com

Visual Studio App Centerの始め方 / nakasho さん

www.slideshare.net

Visual Studio App Center というMS製 CI/CDツールの紹介。HockeyAppのリブランディングになる。

Android/iOS, UWP, macOS(Preview)に対応していて、Github/Microsoft/Facebook/Googleアカウントとかでログインできて、Visual Studio Team Service, Github, Bitbucketに対応、みたいな結構手厚い感じ。

クラッシュ情報の取得や、Visual Studio Team Services, Github, Jiraと連携してクラッシュ時にチケット起票したり、アナリティクス機能あったり、Flutter向けのプラグインもある!すごい!

ARKit 表示改善 / satoshi0212 さん

Presentations by satoshi0212 // Speaker Deck (基本的にデモベースの発表だったので資料上がらないかもです)

ARKit, 段階を分けて工夫してみたのでサンプル7つを見てもらいたい

  1. ライトなし 単に丸が表示される
  2. autoenablesDefaultLighting = true にする 影がついていい感じ
  3. CIFilter 背景のみ 2とは別の
  4. CIFilter オブジェクトも なじんでくる ただ60fpsでない
  5. Metal SCNTechnique を使う
  6. Physically Based Rendering (PBR SceneKitにあるやつ) CIFilterでもMetalでもないアプローチ
  7. Physically Based Rendering + ARKit 60fpsで出るし、映り込みもある(ただ設定した写真の映り込みではある)

今後やりたいこととしては、

  1. Lightingの方向と色のリアルタイム化、
  2. PBR+ARKit でリアルタイム画像の使用

Material Components for Android触ってみる / kirimin さん

speakerdeck.com

I/O 2018 でマテリアルデザインが更新された。App bars:bottom, Backdrop, Banners, Extended FAB, Text Field…どうやって実装する?

Material ComponentsというマテリアルデザインのComponentを実装する公式ライブラリがあって、これを使うと良い

準備、mavenのいつもの、compileSdkVersionをandroid-Pに、Material Compoments Themeを使う、リファクタリングメニューからRefactoring to AndroidXを選択。準備完了

TextFieldsは普通のEditTextと同じように使うだけで、TextInputLayoutのstyleを @style/Widget.MaterialComponents.TextInputLayout.OutlineBox 変更するだけで、あたらしい見た目になる

ただ新Componentは見た感じまだあんまり実装されていないっぽい…そのうち用意されるはず

Carthage移行した話 / aboyさん

ビルド、フルビルドで4並列で360秒かかっていた。ビルド時間長いと嫌

CocoaPods使ってて毎回FrameworkのビルドしてたのでCarthageに移行した。CocoaPodsのライブラリが38個あったが、これが16個になり、無事80秒速くなった。

ハマったところとして、CocoaPodsから移行していないライブラリがAlamofireに依存していて、call of deleted methodになってしまっていた。これは全部Carthage経由にして解決した。

忘れないで!mac app!! コマンド編 / Akkey さん

speakerdeck.com

1時間ごとにプロ生ちゃんが時間を教えてくれるmacOSアプリを作っている。

mkdir, cp をどうするかというやりかたを紹介

mkdirする方法 NSHomeDirectory() ホームディレクトリが取れる NSTask()インスタンスを作って、絶対パス/bin/mkdir を呼び出す 注意点としては、Sandboxの有無で取得できるディレクトリが違う

cp する方法 GUIアプリなので、ファイルを選択するのに、ファイルを選択するダイアログみたいなものを出したい これを出すにはNSOpenPanel()のインスタンス作って、設定してbeginのcompletionHandlerで結果受け取る これを引数に、同様の方法でまたNSTask()で /bin/cp を呼び出せばOK これもSandboxの場合は設定変更が必要なので注意

iOSアプリではない領域でSwiftで遊べるのでおすすめ。

感想とか

  • Visual Studio App Centerの話は iOS Test Night でも拝聴したのだけどMS手厚いなーという印象 どうやったら流行るんだろう
  • konifar/gradle-unused-resources-remover-plugin はふつうに今後お世話になりそう
  • Flutter は最近のpotatotipsでも毎回誰か触れているので熱高まっているなーと感じる 自分もちょっと触ってみたけどたいへん良かった
  • 懇親会楽しかった‥