potatotips #65 参加ブログiOSまとめ枠
potatotips #65 参加ブログiOSまとめ枠
2019/10/1(THU) ヤフー株式会社で行われたpotatotips #65の参加ブログです。 今回、偉大なる会社の先輩方のお力添えで、新卒ながら旗振り役を経験させていただきました。
イベント: https://potatotips.connpass.com/event/145538/
potatotips #65 (iOS/Android開発Tips共有会) を公開しました! https://t.co/7hvmOfG049 #potatotips
— つっきー (@tsuzuki817) 2019年9月17日
タイムスケジュール
ダークモード対応
発表者: たなたつさん
ダークモード対応で注意すべきことの発表資料です。
— たなたつ (@tanakasan2525) 2019年10月1日
Macをダークモードにして作業している方必見ですhttps://t.co/oZsGhNqvg7#potatotips
ヤフー乗換案内アプリはiOS13リリース初日にダークモード対応したそうです! その中でのつらみを今回発表してくださりました!
現在修正済みの問題
- iOS11でColor Assetsの色が取得できない問題
現在でも起きている問題
- iOS12以下でダークモードの色が表示されてしまう問題
- 再現リポジトリ: https://github.com/tattn/WeirdDarkMode-iOS12
- 開発Macをダークモードにしているとxib/Storyboardに埋め込まれる色までもダークモード色になってしまう!
昔からある問題
- スプラッシュスクリーンの画像が更新されない問題
自分が悪いのかそれとも...の問題はとてもつらみが深そうです。
ダークモード対応時はiOS12以下での動作確認を忘れずにしようと思います。
fatalError("init(coder:) has not been implemented")
発表者: 日向さん(@coffeegyunyu)
先ほどの資料ですー fatalError("init(coder:) has not been implemented") https://t.co/HrUKsEFWRz #potatotips
— tsuyoshi hyuga (@coffeegyunyu) 2019年10月1日
potatotipsに3連続参加らしいです!
iOS は 2.2、Android Donut からの歴戦の猛者です。
マンガBANGを作っているらしいです。
class ViewController: UIViewController { let id: String? init(id: String?) { self.id = id super.init(nibName: nil, bundle: nil) } required init?(coder: NSCoder) { fatalError("init(coder:) has not been implemented") } }
コード上でinit()を実装すると実装を強要される、このrequired init?(coder:)
はなんなのかってことです。
コードでもinit?(coder:)で落ちますよね〜
NSCodingプロトコル適合クラスが実装しなければならないもの
アーカイブに格納されたオブジェクトから元のオブジェクトに戻す時init?(coder:)
が呼ばれる
ちゃんと調べたことありませんでした。
init?(coder:)が呼ばれるとき
- StoryboardからUIViewControllerが作られる時
- NSKeyedArchiverから encode(with coder:)でアーカイブに格納されたオブジェクトから、元のオブジェクトに戻す時、init?(coder:)が使われる。
- Restorationから
ホームに戻るたびに
encodeRestorableState(with coder:)
によってアーカイブが作られ、アプリがKillされた場合も前の状態で復元することができる
つまり、init?(coder:)ではアーカイブ前の状態に戻す処理が必要となる!
required init?(coder:)はStoryboardだけのものではなかった!ということで、コードで実装する際も適切に実装して行こうと思います。
詳しくは以下のQiitaの記事から! https://qiita.com/coe/items/9723381ec0046fd8d8ad
広告実装、こうすると幸せだよ
発表者: ryokosugeさん (@ryo_kosuge)
時間あると教えてもらったので長い方で話させて頂きました!
— ryokosuge (@ryo_kosuge) 2019年10月1日
アップロードし直しておきました!(urlは一緒です)https://t.co/4drRwFazEg#potatotips
- バナー実装について
- refresh rate はいじらないほうが良い
- refresh rateを短くすると インプレッション数が増えるが、click数が減るため価値の薄い枠となってしまう!
- Scroll View でのバナー実装
- 適切なタイミングで広告表示のリクエストを飛ばさないと refresh rateと同じでインプレッション数だけが増えて、価値の薄い枠となってしまう...
- そもそも
Cell
でバナーを表示すること自体、スクロールがカクついたりするためよくないらしい... - 解決方法 一度生成したら使い回す手法を取り入れる!
- refresh rate はいじらないほうが良い
- 動画リワードについて
- 動画広告の在庫があまり多くないことを考慮する必要がある
- 異なるAd Networkを利用する https://nend.net/
- SSP (Supply Side Platform)の利用
個人アプリでバナー実装や動画広告をよくわからないまま利用していて、よくない使い方をしていることがわかりました。
CombineでAPIクライアントを作る
h_crane(くれいん)さん (@hcrane14) Qiita: https://qiita.com/H_Crane/items/4778d7951cd0e1611f5b
本日の発表資料です!https://t.co/typYd5dfhM
— h_crane(くれいん) (@hcrane14) 2019年10月1日
#potatotips
iPadで発表してくださりました!
iOS13から追加されたLow Data Mode
はユーザーがLow Dataを設定しているときは、通信が少ない処理をしてあげるなど対応ができる!
Combineの書き方がRxSwiftと似ているらしいです。
RxSwiftを今からやっておくと、将来Combineを実戦投入するときに恩恵を受けられそう!
自分はRxSwiftを使ったことがなかったので、これからやってみようと思います。
特定のViewControllerを表示するときだけTabBarを隠したい
発表者: 武田さん
発表資料です! https://t.co/Op4nSUeQv1 #potatotips
— てぃけだ (@0__1_tea) 2019年10月1日
- UIKit tips
- 前提 Navigation ControllerとTabBarがあるシーン
hidesButtomBarWhenPushed -> trueでタブが消える
let viewController = SecondViewController() viewController.hidesBottomBarWhenPushed = true navigationController?.pushViewController(viewController, animated: true)
push時点でNavigationController
のスタックの中に1つでもhidesButtomBarWhenPushed
がtrue
のViewControllerがあるとTabBarが隠れてしまうそうです。
そのため、Push時とPop時にhideBottomBarWhenPushed
の値を制御する必要がありますね.
TabBarを隠して、画面にある情報をできるだけ多く表示したいというシーンで有効的に使って行きたいです!
Android Tips
Androidのほうはご紹介のほうだけさせていただきます。
5分でわかる Kotlin Contracts
発表者: 熊本さん(@kumamo_tone)
https://t.co/lmJMGqL5Rq 「5分で分かる Kotlin Contracts」の資料です! #potatotips
— Monkuma 👾 (@kumamo_tone) 2019年10月1日
TargetSdkVersion29で BottomNavigationが点滅する件
発表者: 養命酒さん 養命酒(Yu Mitsuhori) (@1013Youmeee) | Twitter
#potatotips https://t.co/LxllOdPTsF
— 養命酒(Yu Mitsuhori) (@1013Youmeee) 2019年10月1日
次の発表資料です!
GitHub Actionsを用いたDeployGateアプリ配布の自動化
発表者: ホリエさん ホリエ (@Horie1024) | Twitter
「GitHub Actionsを用いたDeployGateアプリ配布の自動化」の資料です。https://t.co/FpWULyqpXh #potatotips
— ホリエ (@Horie1024) October 1, 2019
懇親会
懇親会
#potatotips pic.twitter.com/DSrAmnY389
— つっきー (@tsuzuki817) 2019年10月1日
本日も楽しいトークと交流の機会をありがとうございました😊精進致します🙇♂️ #potatotips pic.twitter.com/c3X3MrbmpS
— fumiyasac@UI実装であると嬉しいレシピブックVol.1&2著者 (@fumiyasac) 2019年10月1日
写真を撮ってTwitterに上げた方が良いかもしれないご飯 #potatotips pic.twitter.com/1OxsaqFFFL
— いせ (@iseebi) October 1, 2019