WebAPI設計 #2
ユーザーがしたいゴールを意識する
写真を追加する、友達一覧を表示するなど。
内部の仕組みにとらわれず、ユーザーが何をできるかにfocusする。
電子レンジがマイクロ波を当てる仕組みや歴史などはどうでも良い。ユーザーは温めたいだけという例。
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
決まった日時に通知することは簡単にできそう。よく見るSNSの通知などは通知サーバーが必要。で、それにはAppleのDeveloperアカウントが必要。
オプショナル型とか
SwiftのAnyにOptionalを突っ込むと取り出せなくなる話 - Qiita
どこよりも分かりやすいSwiftの"?"と"!" - Qiita
入門書でわかったつもりでも、書いてると「あれ?」ってなってくるオプショナル型まわり
命名規則とか
通信
[Swift] AlamofireでSemaphoreを使って同期通信する - Qiita
cookieのせて通信するならAlamofireが一番楽そうだった
JSONパース
通信とご一緒に。APIのレスポンスが型にない形式だと、とてもめんどくさくなる。日付とかね...
protocol, delegate
あっちが任せる側で、こっちが任せられる側...あれ、どっちだってなった。
Swiftで大学のポータルにログインしたい
大学のポータルにログインしたい
大学のポータルに自作のiOSアプリでログインがしたかった。 大学はGoogleのOAuthを使っている。
WebViewか何かに埋め込んで、ログインすればいいと思いきや、WebViewでGoogleにログインすることは許されていなかった。(セキュリティ的な理由かな?) そのため、Safariを使うか、ライブラリを使う必要がある。
SwiftでOAuth認証する方法
Swiftで認証系のライブラリはいくつかある。
Googleが出しているものだと、
- GoogleSignIn
- GTMAppAuth
があるが、Appleが出している
- SFAuthenticationSession
これが一番簡単な気がする。
ダメだった
そもそもOAuthの知識がなかったに尽きるが、GoogleのOAuth認証されたあとRedirectURLに自分のアプリのURL Schemaを指定させなければならない。自分のWebサービスならGoogle Cloud Platformのconsoleで設定すればいいが、そんなことはできない。
無理やり解決
Safari(SFSafariViewController)を埋め込み、ログインしたら共有ボタン(Safari画面下部にある四角に矢印が生えてるボタン)を押してもらい、Safariから自分のアプリにURLをもらう。
この仕様がいいことなのかはさておき、ポータルはログイン直後にURLのクエリパラメータにトークンの値が書いてあるため、そこからトークンを拾います...
なんだかグレーそうなので、もちろんアプリの公開はしません。