日時: 2019/09/26 19:30~
場所: 六本木 森タワー 25F
イベントURL: https://mercaridev.connpass.com/event/146056/
SwiftUI実践入門 by 佐藤剛士 @hatakenokakashi
スライドURL: https://speakerdeck.com/satotakeshi/swiftuiru-men
SwiftUIにおいてAppleが掲げる目標
基本機能の開発ではなく、アプリ独自の機能の開発に使える時間を増やす
Swift UI
- 4つのコンセプト
- マルチプラットフォーム
- Xcode11のキャンバス・ライブプレビュー
4つのコンセプトとは
- Declarative 宣言的シンタックス
- SwiftUIにどんなViewが必要なのかを宣言的に指定できる
- Automatic 自動機能
- DarkMode、Dynamic Type、多言語対応、アクセシビリティを特に意識しなくても対応してくれる
- 変えたい場合は独自実装も可能
- Compositional 組み合わせ可能
- Viewコンポーネントを切り出して組み合わせることができる
- 複雑な構成でも、読みやすさを保つことができる
- Consistent 一貫性のあるUI状態
- @State を使うと、プロパティの変化を検知できる
マルチプラットフォーム
- いままでだと、MacやiPhoneなどではフレームワークが別のためコードの共通化はできなかったが、
SwiftUIではコードの共通化が可能(iPhone, WatchOS, AppleTV, MacOS) - Learn once, apply anywhare(一つのプラットフォームを学べば、あらゆるプラットフォームで適用できる)
Xcode11のキャンバス・ライブプレビュー
- コードを変更すると自動同期される
- キャンバス上からもGUIで変更でき、変更すると、コードにも反映される
- PreviewProviderプロトコルに準拠する型ならプレビューされる
SwiftUIの修飾子の仕組み
Text("Hello")
.padding()
.background(Color.red)
だとビュー全体の背景色が赤色のラベルができるが、
Text("Hello")
.background(Color.red)
.padding()
だと、文字部分の背景色だけが赤色のラベルができる
Metal SDK〜Let's compare Metal to CoreGraphics!〜 by Sonny
2D in Vulkan, in the background
- MTKView使う
- まだUIKitは含まれている
- めちゃ早いけど数学たくさん使う
- MTKViewDelegateはNSObjectProtocolに適用される
- MTLCommandQueueとMTLrenderPassDescripterを結構使う
Metalは頂点と座標を使ってレンダリングしている
- VertextDataとDrawCommandsでGPUに命令を送る
- VertexShaderが2Dスクリーン座標に変換する
- Tessellationで三角を細かく作成し、画像の品質を上げる etc.
- ここまでの作業はエグそうだけど、Appleがそれを扱うための言語として用意してくれたのがMetal
- 残念ながらMetalはC++でできてるけど、ゲーム開発者なら使いやすそう
SwiftプロジェクトをMetalに
- MSLを扱うにはBridging Headerが必要
- Bridging Headerにはシェーダーヘッダーファイルが含まれている
- ヘッダーファイルには頂点データの宣言が含まれている
パイプラインに頂点データとコマンドを送る
- コードはしっかりと照らし合わせて書かないと、ミスった際に返ってくるエラーが結構辛い
- pure Core GraphicsよりはGPU使ってるけど、一応60fpsでMetalで画像を表示できた
ゲームじゃないアプリにMetalを使うべき?
- 結論から言うと使わない方が良さそう
- もしMetal使うなら、コンパイル時間がかかるのでSwiftではなくObjective-Cを併用すると良さそう
- Swiftはタイプセーフだけど、C++はそうではない
- 2つの技術を学ぶ必要があって学習コストは高め
- 3次元座標を2次元座標に変換する必要があるため大変だけど楽しかった
- GPUカウンターはiOS13以降で使える
SwiftSyntaxによる静的解析入門 by 北 裕介 @kitasuke
スライドURL: https://www.slideshare.net/kitasuke/making-your-own-tool-using-swiftsyntax
SwiftSyntaxを使っているツール
- SwiftUI Previews
-
apple/swift-format
Appleが公式に出してるformatter ほぼSwiftLint
SwiftSyntax何に使う?
- Code modifier
- Code analyzer
SwiftSyntaxって何?
- libSyntaxを元に提供されてる
- SyntaxTreeというツリー構造で表される
- SwiftSyntaxはSwiftのコードを元にSyntaxTreeに変換するもの
- SwiftSyntaxはAppleが提供してるparserツールで、主にはSwift開発で使うツールを作るためのツール
モバイル決済アプリの作り方(詳細編) by 松前健太郎 @kenmaz
モバイル決済アプリとは何か
- 経産省がキャッシュレス・ビジョンを発表
- 法改正(eKYC)、キャッシュレス推進協議会
- モバイル決済アプリでは以下の構成要素を作る必要がある
- Cash-In お金を入れる
- Cash-Out お金を使う道
- Wallet 財布
- ネックとなるのが資金決済法
- 個人間送金 収納代行業で済む
- 全部対応するには資金移動業になっちゃう
- 資金移動業となる場合に気をつけること
犯罪収益移転防止法(ヤクザとかの資金にならないようにする)に気をつける- 郵便局での送金
- 銀行口座接続による送金
- eKYC(オンライン本人確認)の導入
Apple Pay
すごくセキュアなクレジットカードベースの決済方法
Apple Payのカード登録がなぜセキュアか
- 元のカード番号をDPANトークンに変換して取り扱う
- 間にトークンプロバイダーが挟まっている分、セキュア
- iOSデバイスからトークンプロバイダー間で元のカード番号を取り扱わなくて済む
Apple Pay In-App Provisioning
- バーチャルクレカを作れる
- PassKit周りのAPIを使う
- Apple Pay Cashは個人間送金機能だが、日本では使えない
コード決済の種類
- CPM(利用者提示型)
- MPM(店舗提示型)
- コード決済の仕組みは各社非公開
JPQR
- キャッシュレス推進協議会
- QRコードのデータフォーマット
- 標準化された規格の一つ
- コード仕様はバーコードとQRコードが使える
- バーコードは事業所識別コードとトークンが入ってる
- QRコードはデコードするとTLV形式でデータが含まれている
- Tag 57番を見れば、バーコードと同じ情報が含まれている
- 事業者識別コードで何Payを使っているかわかる
CPMにおける留意点
- バーコードとQRは同一画面に表示
- スクショはあまり撮らないように注意点を記載
- 読み取りやすいように輝度を上げるようにする
MPMにおける留意点
- 偽造が容易なのでスクショはあまり撮らないように注意点を記載
- アニメーション、音などで偽造防止をする
- 利用者・取引者へ完了通知をする
OSS
- QRコード内部の情報を確認できるツール
Github: https://github.com/kenmaz/JPQRReader
既存アプリに組み込む
- まずは機能毎にフレームワーク化したことで、複数チームによる同時開発が可能になった
- Sandboxを用いた開発効率向上
- 読み取りでカメラを使うので実機が必要だが、DIしてカメラモジュールをスタブしている
- Cyclomatic Complexity Numberを使って、コードの複雑さを測ってリファクタしている
- Dead Code Detectionで重複コードをチェック
- Relation analysis of each ViewController
Github: https://github.com/kenmaz/SwiftOutline