Categories: 勉強会

#potatotips 25回目は本棚のようなおしゃれロビーのFringe81社で開催! iOS/Android開発Tipsのまとめ!

今年一発目のポテチに参加してきたのでそのまとめです。第25回potatotipsはギロッポンにあるFringe81社での開催となりました。

遅刻して最初の方は見逃してしまいました。。。すみません。。

【iOS】SwiftCoreを読んで

※遅刻して聞くことは出来ませんでした。

  • SwiftCoreなお話。

【Android】僕がAndroid開発する時にちょっと便利だと思うTips

connpass.com 発表した資料はこちらです 僕がAndroid開発する時にちょっと便利だと思うtips from Masataka Kono www.slideshare.net デモの最後の方で5分なっちゃったので途中でやめてしまったけど、ググればすぐに出てくる情報だと思います。(汗) 社内の定時くらいに、今日LTしてくるんですよ〜。と発言すると急遽その場でLTやってよみたいな流れになって発表したので、本日2回目の発表でした(笑) でもやっぱり本番は緊張した 気になったこと Fastlane for Androidによる継続的デリバリー from Fumiya Nakamura …
potatotips #25 (iOS/Android開発Tips共有会) でLTしてきました - 画竜点睛を衝く@... - 画竜点睛を衝く@mapyo

※遅刻して聞くことは出来ませんでした。

  • git-checkout-this-prを使うとPRをレビューしてて手元に落として動作確認したい時に便利
  • AndroidStudioで現在見ているソースのGithubページを開く方法
  • IdeaVim使うとショートカットが捗る
  • ADMのHierarchyViewが便利

【iOS】チャット文化と相性のいいアプリ配布方法

  • アプリ配布にはfabricを使っていたが、チーム開発時代になると、fabric使うと非開発者に配るのがトラブったので、DeployGateを使ってチャットにURLを流して配布しよう!というお話
  • 登録フロー
    • fabricはメール招待、ユーザ登録、証明書導入・・・といった流れ
    • deploygateはURL招待して、証明書導入できるので、ユーザ登録の流れがない
  • 配布フロー
    • fabricはアプリで配布できる
    • deploy gateはdg deployというコマンドをうつと配布できる
  • fabricを併用している場合の注意
    • dSYMファイルをfabricだとアップロードしてくれていたが、deploygateはしてくれない
    • そこでfastlaneを使ってdSYMをアップロードしよう!
  • 運用
    • 無課金だと2個までつくれるので、申請用や開発最新用でわけたりと複数の配布URLを使用できる

【Android】Androidでカスタムキーボードやってみた

  • 匿名性でIdentityを出したい→「ン」でおわるカタカナ4文字を入力してもらおう!
  • →カタカナのみを入力できるカスタムキーボードを作ってみた
  • tomosooonでそのうち配布します

【iOS】How do I post videos to Facebook?

  • アプリで作った動画をFacebookSDK for iOS4.8.0を使って投稿したい
  • facebookのquick startにやり方は書いてあります
  • 投稿に必要なもの
    • NSURL:動画ファイルのNSURLパス
    • FBSDKShareVideo:ビデオ本体
    • FBSDKShareVideoContent:プレビュー用の画像などを渡せる
    • FBSDKShareDialog:作った画像をダイアログに渡すと投稿できる
    • FBSDKShareingDelegate:成功や失敗を受け取れる
  • 試しにボタンをおして作ってみたが何も起きなかった
    • 調べてみたらThe operation couldn’t be completed. (com.facebook.sdk.share error 2)と出た
    • ドキュメントを見たら、ユーザがFBのクライアントをインストールしていないといけないということがわかった
    • 普通写真やリンクを送るときはFBに送るだけだが、動画に限ってはFBアプリを通してFBにpostしていた
  • 投稿の前にアプリがインストールされるかどうか調べるにはcanOpenURLメソッドを使ってfb://で開けるかどうかで調べられます
  • アプリ自体にサインインしているかどうかのチェックはFBSDKAccessTokenを調べるとわかります
    • していなかったらlogInWithPublishPermissionsのメソッドを呼び出すとログイン画面を出せます
  • ビデオのURLがAssetURLでないとならない
    • AssetURLはassets-libraryから始まるアドレスで、カメラロールにあるファイルや、iCloudにおいてあるファイルを指している(らしい)
    • 取得方法はUIImagePickerControllerDelegateを使う
    • ただし、今回みたいにアプリ内のどこかにあるファイルを投稿する場合はローカルからカメラロールに書き込んでその結果帰って来るAssetURLを使うしかない(かな?)
    • ALAssetLibraryは非推奨になるので、PHPhotoLibraryを使うが、簡単にとれない(いい方法募集中)
  • エラーになった場合のチェック事項
    • info.plistをみてみる
    • appdelegateをチェックしてみる
    • FBにサインインしているか
    • FBのアプリがインストールされているか
    • 投稿された動画がAssetURLになっているか

RxJava modules

  • RxJava〜は結構いっぱいあったので触ってみました
  • RxJavaString
    • 主に文字列に関する便利機能
    • a,b,cの文字列があった時に、StringObservableのsplitを使ってスプリットが出来たりする
    • byLineというメソッドを使うと改行コードで区切ってくれたりする
    • x y zの3つの文字列を:joinメソッドでjoinしたり出来ます
    • ABCをstringConcatメソッドを使うとつなげたり出来ます
  • RxJavaMath
    • 1,2,3,4,5のMathObservableがあったときに平均値や総数、最小値、最大値などが取れる
    • クラスに対してObservableを用いると、プロパティの値で平均・最大・最小などを求められる
  • RxJavaDebug
    • SimpleDebugNotificationListenerとDebugHookをレジスターしてあげて、Observableの処理をした後にログを出力するとすごいログが出ます
    • どのスレッドで、どのObservableの、どのonXXXから、どんな値が渡ってきているか、がわかる
  • RxJavaJoins
    • 複数のObserverbaleがある時にjoinができる
    • zipを使っても同じようにかけるので違いがわからなかった

【iOS】Parseでランキングを実装した話

  • TOEICの学習アプリにランキング機能をいれてみた
  • Parseとは
    • サーバサイドのリソースが使えなかったのでParseを使った
    • FBが買収したBaaSで、CloudDBや通知などが使えます
    • 最近watchOSとtvOSにも対応した
    • IoTにも対応
    • 1秒間に30リクエストは無料で使えます
  • やりたかったこと、ハマったこと
    • ユーザ名登録無しでスコアとユーザを登録したかった
    • リクエスト数を抑えたい
  • 匿名ユーザーという機能を使った
    • PFAnonymousというものを使うと使える
    • 途中から通常のユーザーとしてSignupもできる
    • ニックネームをつけようと、usernameをsetするとsign inしろと怒られたのでカラムを追加することで対応した
  • リクエスト数を抑えるために、、、
    • limitをつけた
    • 関連先のデータをまとめて取得するようにした
    • 更新部分で呼ばないように気をつける
  • まとめ
    • メイン機能ではなく、おまけ機能として使うといい

【Android】RxAnimation

  • Problem
    • 沢山アニメのクラスを組み合わせるのが厳しい
    • アニメーションのイベントがごちゃごちゃしがちになる
  • Solution
    • Rxのストリームで管理できるように作ってみた
    • Animationを作り、Animation.eventsというObservableにくるまれたものに必要な物を渡して処理してあげる
  • Solution by Kotlin
    • Kotlinでもスマートに使えるようにしてみた
  • Using
    • 使うときはdependenciesに追加するだけです
  • Merit
    • Combineを使ってAnimatorでもAnimationでも関係なく組み合わせできる

【iOS】LaunchKit

cf:iOSアプリのリリース周りの管理を簡単してくれる LanuchKit

  • iOSリリース周りを簡単にするWebベースツールの紹介
    • itunes connectに接続できます
    • Slackにコネクトもできます
  • 機能
    • ScreenshotBuilder:SSを作れる
    • Sales Reporter:売上出す
    • Super User Dashboard:アプリをどんな感じに使っているか把握できる
    • Review Monitor:新しいレビューが入ってきた時点でその内容を教えてくれる
    • App Websites:アプリの紹介ページを綺麗に作れる

ScreenshotBuilder

  • 画像をアップしてキャプションなどを入れられる
  • iPadの画像もできるが、綺麗にやるには有料版が必要かも
  • 無料ではjpegのみダウンロードが可能

SalesReportar

  • iTunesConnectのIDとPWを入力してあげると日時でダウンロード数や売上が出る
  • Slackで簡単に出せる

ReviewConnector

  • ストアのある国名とアプリを検索すると、販売元の他のアプリが自動で検索できるので、アプリを指定してレビューのトラッキングができる
  • connectにも追加できます

【Android】Fastlane for Androidによる継続的デリバリー

  • fastlaneがandroidサポートを始めたのでやってみた
  • Beta配布のfastlaneのワークフロー
    • gradleで実行する:データ配布用のキーストアはリポジトリに含めているのでgradleだけで実行できる
    • →crashlyticsに送る
    • →Slackにつぶやく
  • CircleCI
    • javaとrubyが動く環境を整えて、dependenciesで環境を整えてdeploymentでデプロイするように設定しておく
  • Release配布のfastalneのワークフロー
    • リリース用のキーストアを複合する
    • ビルドする
    • GooglePlayにアップロードする
  • Appfile
    • GooglePlayにアップロードするファイルを定義できる
  • GooglePlayにアップロード時にmetadataも同時にアップロードできます
    • ストア上の画像などを編集しておくとgoogleplayに反映されます

【iOS】iOSアプリの音声認識機能まとめ

追記 (2016/06/16)iOS10にて公式の音声認識機能が開放されましたね!これが本命かと思っております。iPhone/iPadではキーボードの音声入力ボタンから、iOS標準の音声認識(入力)機能が使えます。高...
iOSアプリでの音声認識機能実装方法まとめ - Qiita - Qiita
  • iOSで音声認識の実装方法は9つある
    • GoogleSpeechとdocomoはサーバに投げて結果をもらう
    • OpenEarsとJuliusはオフラインで動かせる
    • IBM Bluemix、SpeechRec、AmiVoice Cloudは有償
    • UIDictationControllerは標準にあるが、普通には使えない
  • 結論
    • 無償で使いたかったらiOS標準機能オフライン化と公開API化を待つ
    • 実験したいならGoogleSpeechAPIがオススメ
    • オフラインで使いたいならOpenEarsが英語とスペイン語しか使えないがとってもおすすめ
    • 有償でも使いたいならAmiVoiceやSpeechRecの窓口に相談

【Android】Google trainingのBestPracticecs

  • よくあるbest practiceはfuturice/android-best-practices和訳版はこちら
    • 基本的にgoogleが書いたものではなく、開発者が書いたもの
  • 実はGoogleが出したものがあり、7つのBestPracticesが掲載されており、サンプルコードもある
  • Interaction and Engagement
    • ある程度のルールは守って実装しよう
    • アクティビティなどの遷移は統一
    • ラベルやタブなどの統一など、UIてきなのを統一させる
  • UserInterface
    • 様々なUIに対応する
    • カスタムビューの注意事項
    • マテリアルデザインについて
  • UserInput
    • タッチジェスター、キーボードインプット、ゲームコントローラの書き方のサンプルなどある
  • Background Jobs
    • IntentService系の話
    • Backgroundの取得する話
  • Performance
    • 後述
  • Security & Privacy
    • 安全なネットへの接続の仕方
    • 内部データの持ち方
  • Testing
    • アクティビティのテストや自動UIテストについて

Performance

Perfomance Tips

  • Avoid Creating Unnecessary Objects
    • 不必要なオブジェクトは作らないで下さい
    • 作るとGCがはしる
  • Prefer Static Over Virtual
    • testメソッドの呼び出しが早くなる
  • Use Static Final For Constants
    • staticをつけると接続スピードが上がる
  • Avoid Internal Getters/Setters
    • Getter/Stterは作らない
    • そのままものを読んだほうが速いしそれでかいて
  • Use Enhanced For Loop Syntax
    • ちゃんとした関数をつかうとはやい
  • Avoid Using Floating-Point
    • 浮動小数点を使うのは避けるべき
  • Know and Use the Libraries
    • ライブラリをガンガン使おう
    • アセンブラで埋め込まれているので速い
  • Use Native Methods Carefully
    • NDKをつかうのは処理スピードのためではなく、該当のコードを持っている場合に使うべき

【iOS】100台のiOSデバイスにアプリをインストールする

  • iPod touch x100に数百MBのアプリを入れるとなった時の対応の話
  • AppleConfiguratorを使おうとしたが、30デバイスの制限があった(当時は)
  • imkira/mobiledeviceというのを作ってる人がいた
    • OSXのモバイルデバイスのラッパー
    • macにつながっているデバイスのプロパティがとれるのでUDIDをとってこれる
    • app_pathを渡してあげるとインストールができる
    • これを使って片っ端からハブに繋いで流し込んで乗り切った
  • OSXのprivate frameworksにはOSX側のライブラリが入っている
    • HomeKitなどあったりするので見てみると便利ツールが作れそう
  • 100台運用した時のお話は懇親会で…!(以下話した中で覚えてる内容)
    • →電池が切れそうになったら電池残量をお知らせ
    • →5台位?のMacでハブを2つ繋いで同時にやっていた模様
    • →UUIDを取得した後はcsvにして、iOS DevCenterにて一気に端末登録を行った
    • →コマンドを流してご飯などにいけるのは便利
    • →ぎりぎりまで修正などがあったのでTestFlightなどでぽちぽちやるのは大変

@mogmetの所感

とうとうFastlaneがAndroidにも対応したのがホットな感じでした!(と、いってもfastlaneは使ったことはないのですが。。。)

時間があればFastlane使ってみたいなとは思います。(iOSになりそうですが)

また、懇親会で有用なtipsも聞けて最後まで堪能できた勉強会でした。
例えば…

  • 検証端末にバージョンの壁紙をセットしておくとどのバージョンかがわかりやすい!!
  • PublicBetaを入れておくと、自動でbetaをおっかけてくれて、正式版にも自動的にアップデートしてくれる
  • iOS9.3ではとうとうマルチログインが実装されるのかも・・・?!
    • そうするとDocument配下のパスなどをハードコーディングしている時に大変かもしれない

次回こそは発表枠で参加できれば・・・!と切に願います。

mogmet

View Comments