iOSDC 2019 Notes

トーク集めてくれた記事 @yuukiw00w 
https://qiita.com/yuukiw00w/items/65ce867a99f898e77b10

# IOSDC 前夜祭

## スクリーン配信機能の実装大変だった

かんぱい🍺

pixiv sketch

ReplayKit
簡単にライブ配信できる
IOSバージョンによってできることが違う

The best min version to use is iOS 11 because it has the most capabilities.

You can only debug it on a device

RPScreenRecorder Class

From iOS 10 you can use a Broadcast upload extension to take screen video.

Using this you can upload things to services like YouTube and facebook.
(Like an Action Sheet)

You use a CMSampleBuffer and using that you can tweak the feed.

From 10 you can use do it for other apps
From 11 you can use the control center

Setup UI Extension
- you make an action sheet style view for sending the feed.

You need to delete the NSExtensionPrincipalClass otherwise it won’t find your storyboard.

SampleHandler
Use this to manage the feed from your app.

broadcastStarted
BroadcastPaused
BroadcastResumed
BradcastFinished
FinishBroadcastWithError
ProcessSampleBuffer

RTMPかHLSの場合HaishinKitがおすすめ

VP8エンコードがメモリー使ってしまうのでoutofmemory errorになるので特別なケア(CGImageにへんかんしていたり）

To get mic output you need to set it in broadcast started.
There are problems with using Libwebrtc 
The easiest way is to use HaishinKit

If there are no changes the stream will stop, it will timeout so you should send a heartbeat to keep the stream alive

If you want to stop screen caps then you should use the Notification of the OS to stop it

Breakpoints don’t work in the extension so use logs to follow your code

H.264 encoding doesn’t match well with Broadcasting.

Are there memory warnings in extensions? No idea...

## Advanced Segue 
https://speakerdeck.com/tokorom/advanced-segue-2019nian-falsesegueshi-qing
所 友太 / ToKoRo Yuta on Twitter

Types
- Standard
    - Push
    - Present
- Embed
    - AddChildみたいな
- Unwind
    - popping VCs
- Custom
    - Override perform and do some fun stuff
IOS 13
Problem: ViewDidAppear isn’t called in the new type of modal
Fix: Using PrepareForSegue you can make your own events to handle lifecycle.

Segue Action
Google Later

For static tables it is great to remove didselectrowatindex

Settings画面導入したい

共通Navigation

Make a shared navigation controller and call it from that storyboard inside perform for each different view controller.

# Day 01
I was in the opening movie~

## ライブラリのインポートとリンクの仕組み完全解説
https://fortee.J-POP/iosdc-japan-2019/proposal/28d1013f-a57b-4d42-b486-a3372c459459
speakerdeck.com/kishikawakatsu…

### Library Types

- Framework
    - .framework
- Dynamic Library
    - .dylib
- Static Library
    - .a

Swift has dynamic and static frameworks too.

To add more variations there are frameworks with and without modules.

Plus language and architecture

### Bundles
- App
- Project
- Settings
- Framework

Use the file command to easily check frameworks.

SWIFT_INCLUDE_PATHS

# Why you can’t get branch coverage in Xcode @kariad_uu

Xccov is line coverage percent.

Comments are counted as part of the coverage percent?!

LLVM-cov

You can do 4 different types of source coverage
- Line coverage (same as Xcode)
- Function coverage
- Instantiation coverage
- Region coverage
If you look at the prof data file in Xcode you can see the different types of coverage

|| and && is treated as an autoclosure inside swift

## LT
Kohei Arai
speakerdeck.com/kokoheia/corem…

# Day 02
## Snapshot Testing
speakerdeck.com/imaizume/pract…
スナップショットテスト実戦投入
It will compare your old and new UI for you so it is easier to notice degradation 

FBSnapshotTestCase
SnapshotTesting

Older勉強会トーク
speakerdeck.com/imaizume/how-y…

fast lane snapshot_test

Filename:
Method_identifier_device

Screenshots-preview-generator.rb
You can get more understandable data

ハマりポイント
1. Storyboard and Xib problem
You need to force the xib to be the right size.

2. A sync calls my miss the snapshot so you should use XCTWaiter to fix the timing.

3. You have to attach a navigation controller’s view to the window yourself
4. TableViewCell is a pain
5. View lifecycle methods not called so you need to call it yourself.
    1. Beginappearancetransition/endappearancetransition
It will make finding 表示崩れ much easier.
It takes a while to setup though.

## Making a mobile pay app
@kenmaz
speakerdeck.com/kenmaz/how-to-…
Japan is still only 18% cashless...

There are different types of payments and transfers you need to be careful of. (To prevent money laundering)

You have to have 本人確認 (How?)

1. Using their drivers license and check.
2. Connect a bank account
3. EKYC

Why is Apple Pay secure?

DPan token from a provider masks your credit card number

When you make a payment your phone uses the token and the credit card company decodes it (between you, the store, and apple no one can see it.)

In App Provisioning

PassKit for In App Provisioning

Code payment

CPM and MPM
Consumer Presented Mode
Merchant Presented Mode

JPQR - A Japanese Standard for QR payments that isn’t dependent on one company unique code.

TLV形式

QRCodeGenerator
BarcodeGeneratorFilter

Warning
You should stop screenshots in the app
So that user’s tokens don’t leak.

You need to be careful of people cheating and making a movie of finishing a transaction so for the store and the customer it should be easy to tell when a transaction was finished.

JPQRReader

Framework for each function of the app will make us able to do 機能単位葬式 a reality

## Bitrise Lunch Session

Bitrise API (後でしらべる）

Pay as you build(we should try this maybe?

Bitrise Monitor 
Track CPU usage, memory usage, network requests etc.

Bitrise Ship Manage all your apps from one screen

Invite and manage testers

Expanded app install pages

Cache Control

## Accessibility
@akatsuki174
note.mu/akatsuki174/n/…
https://speakerdeck.com/akatsuki174/subetefalseren-falsetamefalseakusesibiriteidui-ying

color and underline
Color and shape
Not just a shape change but a sound when tapping something

Accessibility Inspector

Environment Overrides - you can see the changes in your font in real time.

Adjustsimagesizeforcontentcategory(you can change image size)

You cannot use a fixed size otherwise it won’t work

Chromatic Vision Simulator - simulates Chroma problems in vision

IsAccessibilityElement = true
You can tell iOS which elements need to read the attributes you set.

To add your own you need to add an accessibilityHint

You can group elements with shouldGroupAccessibilityChildren

# Twitterで見つかったトーク
## Swiftと論理＋圏論
speakerdeck.com/inamiy/swift-a…

## ソーシャルライブサービスにおけるデジタル化粧の仕組みと実装 
speakerdeck.com/noppefoxwolf/i…
https://t.co/W5Pqkpb1eq