11
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

merpay Tech Talk for iOS Engineers 勉強会メモ

Last updated at Posted at 2019-09-26

日時: 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 財布
  • ネックとなるのが資金決済法
    • 個人間送金 収納代行業で済む
    • 全部対応するには資金移動業になっちゃう
  • 資金移動業となる場合に気をつけること
    犯罪収益移転防止法(ヤクザとかの資金にならないようにする)に気をつける
    1. 郵便局での送金
    2. 銀行口座接続による送金
    3. 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

既存アプリに組み込む

  • まずは機能毎にフレームワーク化したことで、複数チームによる同時開発が可能になった
  • Sandboxを用いた開発効率向上
  • 読み取りでカメラを使うので実機が必要だが、DIしてカメラモジュールをスタブしている
  • Cyclomatic Complexity Numberを使って、コードの複雑さを測ってリファクタしている
  • Dead Code Detectionで重複コードをチェック
  • Relation analysis of each ViewController
    Github: https://github.com/kenmaz/SwiftOutline
11
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?