WebAPI設計 #1

WebAPI設計の本を読み始めたので、そのメモ。

1章 APIデザインとは何か

  • コンポーネント指向でパーツを分ける

  • 実装やロジックはラッピングし、APIコール側はロジックを極力減らし、考えなくてもいいものにする

ラジコンのコントローラーが直感的でなく、仕様書を読まないと使えない話。

レストランの注文がAPIとして例えられていた。料理は店員とシェフでラッピングされているため、コールする側は作り方を知らなくても、料理を得ることができる。

Vulkan メモ2

Physical devices and queue families

  • Validation layerのExtension supportの時もそうだったが、countの変数を0初期化して、vkEnumerate~にcountやその他を引数で渡すと数えてくれるらしい。

  • 最後にvectorの先頭ポインタを与えると一覧が得れるっぽい。countが0でないことを確認してから一覧を取得している。なんでかね。

  • 次に一覧をforで回してisSDeviceSuitableで適合するものを探す。なかったらphysicalDeviceがVK_NULL_HANDLEなのでエラーを吐かせる。

  • 物理デバイスの情報とかサポートしてる物とか取得できる。

  • queueFamilyが利用できるかのチェック。もし利用できなかったら数字は0になるわけだが、そういうマジックナンバーよくないよね。ってことでoptionalを使うらしい。

  • quereFamilyからqueueFlags(bit mask)を取得。比較してOKなら適合物理デバイスってことらしい。ただ正直これでなぜ適合なのかわからん。

Vulkanメモ 1

SetupのValidation layerまで。

window初期化

vulkanはレンダリング処理はするものの、windowを生成するのは大変らしい。tutorialではglfwを使ってwindowを生成するらしい

mainLoop, cleanup

描画のループ処理。Dxlibraryみたい。cleanupはプログラムが終了するときの処理。

createInstance

構造体に設定や情報を詰め込んでinstanceを生成する。

Validation Layer

Vulkanはオーバーヘッドを少なくするために、APIにチェック機構が備わっていない。そのため、自分でチェックする。正直よくわからん。

Swiftを書いて参考にした記事

ブックマークの整理も兼ねて参考にした記事(主にQiita)

UITabbar

iOS Swiftチートシート・ライブラリまとめ UITabBar・UITabBarItem編 - Qiita

App Transport Security

https://developer.apple.com/documentation/security/preventing_insecure_network_connections

叩くAPIがATSを満たしていなかったため、例外設定してあげる必要があった

Notification

[Swift4]通知の出し方 - Qiita

決まった日時に通知することは簡単にできそう。よく見るSNSの通知などは通知サーバーが必要。で、それにはAppleのDeveloperアカウントが必要。

オプショナル型とか

SwiftのAnyにOptionalを突っ込むと取り出せなくなる話 - Qiita

どこよりも分かりやすいSwiftの"?"と"!" - Qiita

入門書でわかったつもりでも、書いてると「あれ?」ってなってくるオプショナル型まわり

命名規則とか

Swiftガイドライン的な - Qiita

通信

[Swift] AlamofireでSemaphoreを使って同期通信する - Qiita

cookieのせて通信するならAlamofireが一番楽そうだった

JSONパース

Codableで色々なJSONに対応する - Qiita

通信とご一緒に。APIのレスポンスが型にない形式だと、とてもめんどくさくなる。日付とかね...

protocol, delegate

【Swift】delegate実装の流れ - Qiita

あっちが任せる側で、こっちが任せられる側...あれ、どっちだってなった。

UITableViewが動かない - UITableView is not working -

UITableViewが動かない。rowの数を出しても0と表示され、cell内でデバッグメッセージを入れても動かない。

qiita.com

この記事に書いてあるが、StoryboardでViewControllerのdelegate,sourcetableViewをリンクする。

私が見てた記事2つはこの手順がなかったため、ずっと動かずに困っていた...

ちなみになぜこの手順がいるか軽くだけ調べたが、

qiita.com

らしい...

Swiftで大学のポータルにログインしたい

大学のポータルにログインしたい

大学のポータルに自作のiOSアプリでログインがしたかった。 大学はGoogleのOAuthを使っている。

WebViewか何かに埋め込んで、ログインすればいいと思いきや、WebViewでGoogleにログインすることは許されていなかった。(セキュリティ的な理由かな?) そのため、Safariを使うか、ライブラリを使う必要がある。

SwiftでOAuth認証する方法

Swiftで認証系のライブラリはいくつかある。

Googleが出しているものだと、

  • GoogleSignIn
  • GTMAppAuth

があるが、Appleが出している

  • SFAuthenticationSession

これが一番簡単な気がする。

ダメだった

そもそもOAuthの知識がなかったに尽きるが、GoogleOAuth認証されたあとRedirectURLに自分のアプリのURL Schemaを指定させなければならない。自分のWebサービスならGoogle Cloud Platformのconsoleで設定すればいいが、そんなことはできない。

無理やり解決

Safari(SFSafariViewController)を埋め込み、ログインしたら共有ボタン(Safari画面下部にある四角に矢印が生えてるボタン)を押してもらい、Safariから自分のアプリにURLをもらう。

この仕様がいいことなのかはさておき、ポータルはログイン直後にURLのクエリパラメータにトークンの値が書いてあるため、そこからトークンを拾います...

なんだかグレーそうなので、もちろんアプリの公開はしません。