potatotips #66 iOSブログまとめ
@tsuzuki817
今回参加させていただいたイベントURL : https://potatotips.connpass.com/event/149806/
potatotips #66 にiOS ブログまとめ枠として参加させていただきました!
会場はあのyappli様のオフィスである住友不動産六本木グランドタワー です。(人生初六本木)
とりあえずエレベーターがめちゃくちゃ広くて景色最高でした。
]
会場についたら、もうオシャレ...
ちゃんと、ポテチが用意されていました笑
GitHub : https://github.com/potatotips/potatotips/wiki/potatotips-66
発表のまとめ
SwiftライブラリのObjC対応における落とし穴と回避策
iOS枠のトップバッターはSCENEE(@scenee) さん
Swift 5.1 AVI/Module Stability キーワード
- BridgingHeader
- Umbrella header
@objcを付与するだけだと、思っていましたがそれだけでは不十分なケースがあるそうです。ライブラリの設計次第!
注意!
- String Enumが付与できない。
- Swiftで定義したクラスはobjcでサブクラス化できない!
解決策: objc で string enum を定義し Umbrella headerでそれをインポートしてライブラリのコードで使う!
自分自身objc対応をやったことがないので新しい用語が知れて新鮮でした!
ただ理解できないところも多々あったので、これからたくさん調べます!
参考: github.com
Bad practice for tax hike handling
続いてiOS 枠 二人目! corin (@corin8823) | Twitterさんです。 資料はこちら!
アプリ開発者が増税対応に追われるというなかなか恐ろしい話です笑 キーワード
- Tier (https://www.equinux.com/us/appdevelopers/pricematrix.html)
- App Store で販売できる価格のリストのこと
これが買い切り型 自動サブスクリプション
重要なこと
- アップルからのメールはちゃんと読むこと
- アイテム名に金額を入れないこと
- ドキュメントはちゃんと読むこと
Advanced guard of DeallocationChecker
r_plus (@r_plus) | Twitterさんの発表です!
資料はこちらから!
こちらのviewがメモリリークしているかどうかをチェックするためのライブラリに関するtipsです!
キーワード
- Swizzle
- Mirror
- AssociatedObject
個人的には時間が足りなくなってからの、マシンガントークがとても面白かったです笑
メモリリークの調査をするときにこのライブラリを使ってみようと思います。
試して感覚を掴んでみるUICollectionViewCompositionalLayout & Combine
fumiyasac@UI実装であると嬉しいレシピブックVol.1&2著者 (@fumiyasac) | Twitterいつもレシピ本にお世話になっています。
資料とコードサンプルはこちらから!
本日の発表資料とサンプルはこちらになります🙇♂️
— fumiyasac@UI実装であると嬉しいレシピブックVol.1&2著者 (@fumiyasac) November 11, 2019
(※資料の文字が小さ過ぎてすみません...)
ほんの少しでも参考になれば嬉しく思います🙏
サンプル:https://t.co/P4PwAmAB1O
発表資料: https://t.co/EyCwx6KaIc#potatotips
キーワード
- UICollectionViewCompositionalLayout
複雑なレイアウトをつく際に役立つUICollectionViewCompositionalLayout!
どんなに複雑なレイアウトも細かく分割していけば怖くないよね、的な理論だと自分は思いました。
スライドがよくまとまっていて、この先何回も見ると思います笑
Mastering share sheet preview
ezura (@eduraaa) | Twitterさんの発表です!
資料
キーワード
- share sheet
- UIActivityItemSource
- LPLinkMetadata
ezuraさんの調査結果によると以下のようになっているそうです!
UIActivityItemSource > String > URL > Data(Image等)
めっちゃありがたいですね:bow
共有するときに、いい感じにshare sheet をカスタマイズできるようにしっかり実装できるようにしないとですね!
SwiftUI の @State, @ObservedObject, @EnvironentObject
発表 Monkuma 👾 (@kumamo_tone) | Twitterさんです! キーワード
- @State
- @ObservedObject
- @EnvironmentObject
相変わらず、わかりやすい発表でした。
個人的に@EnvironmentObjectはシングルトンぽくて使いやすいのですが、使い過ぎには気をつけようと思いました。
自分がちょうど今作っているアプリで利用しているところで、理解がめっちゃ深まって最高でした!
やはり自分は実際にコードを書いたか、書いてないかで理解にだいぶ差が出るみたいです。
資料
iOS13とフォントのお話
twitter.comさんの発表です!
資料
今まではアプリごとにしかカスタムフォントが使えなかった! しかし、iOS13 からフォント管理できるようになったとのこと!
フォントに関するAPI が充実したそうですが、ドキュメントはまだ反映されていないのでコードを直接見るしかない現状です...
japanese.engadget.com このアプリが世界でも有数のフォントのダウンロードができるアプリらしいです。
しかし現在はダウロードしたフォントをアップルの純正アプリ以外では使えないそうですが、
何やら使っているアプリがあるので、方法がなくはないといった現状です笑
そのうちAPI の実装がされるという噂... 早くされて欲しいですね...笑
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
iOSDC2019初参加!
iOSDC2019に 初参加しました!
2019.9.6(金) 9.7(土)の二日間、一般参加させていただきました。
1日目
早く来てしまった #iosdc pic.twitter.com/uOSczSM5ym
— つゞき (@tsuzuki817) September 6, 2019
#iosdc pic.twitter.com/fg8cfjFEQE
— つゞき (@tsuzuki817) September 6, 2019
オープニングから勢いがすごくて、圧倒されてしましました...
エヴァ風でテンション上がりましたね!
ライブラリのインポートとリンクの仕組み完全解説
ライブラリのインポートとリンクの仕組み完全解説 by Kishikawa Katsumi | トーク | iOSDC Japan 2019 #iosdc - fortee.jp
内容が結構が結構難しくて、ちゃんと理解できていなかったので、自分でも ライブラリを作ったりしてみようと思いました。
Swiftクリーンコードアドベンチャー
Swiftクリーンコードアドベンチャー ~日々の苦悩を乗り越え、確かな選択をするために~ by shiz | トーク | iOSDC Japan 2019 #iosdc - fortee.jp
発表がすごく丁寧で、発表の仕方の参考になりました>< 普段からClean Architectureを利用しているため、アーキテクチャの適用の仕方なども参考になりました。
FatViewControllerを安全に書き換える方法が見つからなかったので、どういう痛みを許容するか考えた
ダンボー田中さんの発表はとても場慣れしている感があって、自然体ですごいなぁって思いました(コナミ感) テストのデッドロック問題など、実際に自分も遭遇したらどうしようと思える問題を取り上げていました。 問題に対するアプローチを、適切に言語化していて自分も言語化する能力を鍛えないといけないと、改めて思いました。
また、髪の毛が金色でかっこよかったです。
2日目
iOSアプリに「意識」は宿るのか?ディープラーニングの先にある人工知能(AI)
脳科学からディープラーニングに到るまでの流れはとても興味深かったです。 アプリに意識が宿るまでの課題を具体的にあげていて、wktkしました!
美味#iosdc pic.twitter.com/Wum7prksS3
— つゞき (@tsuzuki817) September 7, 2019
貰った!#iosdc pic.twitter.com/dY8zUudgyK
— つゞき (@tsuzuki817) September 7, 2019
今こそwatchOS
部屋が満員で立ち見も限界まで人がいて、すごい人気でした! watchOSが出てから最新のwatchOSまでを事細かく解説して、勉強になりました。 絶対にapple watch買って開発します!
まとめ
いろいろと難しいし、自分の勉強不足を痛感しましたが、いつもお世話になってるiOSエンジニアの方々に出会えて最高でした! 来年も、参加しようと思います! また、自分もいつかスピーカーとして参加できるように、活動をしていきたいです。