AFNetworkingのリクエストでCookieを扱う方法

先月はSwiftをやっていましたが,今月はObjective-Cです.
数年ぶりに他人が書いたObjective-CでAFNetworkingライブラリを使用した通信処理を読んでいて,Cookieを扱う処理がわからず困ったのでメモしておきます.

▼ AFNetwork でリクエストにCookieを設定する

リクエスト ヘッダにクッキーを設定するには以下のように記述します.

NSString *cookie = [NSString stringWithFormat: @"(Cookieのキー名)=%@; path=/; HttpOnly", (設定する値)];    
[manager.requestSerializer setValue: cookie forHTTPHeaderField: @"Cookie"];        

▼ リクエスト ヘッダを参照する

正しくリクエスト ヘッダにクッキーが設定されているかは,デバッグウィンドウで以下のように参照できます.

(lldb) po manager.requestSerializer.HTTPRequestHeaders

▼ レスポンス ヘッダを参照する

レスポンス ヘッダを参照するには以下のようにレスポンスを受信時に参照できます.

コード省略
	:
success:^(NSURLSessionTask *operation, id responseObject){    
NSHTTPURLResponse *response = (NSHTTPURLResponse *)[operation response];    
 
(lldb) po response.allHeaderFields

▼ レスポンス ヘッダで参照できなかったCookieをCookieストレージで参照する

今回少し困ったことに以下のようにしてもレスポンス ヘッダで参照できるクッキーが参照できなかったので、記事を参考にCookieストレージから参照することで対処しました.

NSString *cookie = httpUrlResponse.allHeaderFields[@"Set-Cookie"];

スタックオーバーフローに参考になる記事がありましたので,メモしておきます.

(参考)How to use AFNetworking to save cookies permanently forever, until the app is deleted from the iPhone?

以下,参考になると思われる部分を抜粋です.

1) Upon successful authentication, the webservice hands me two cookies. 
How do I access them? Do I go straight to NSHTTPCookie storage and grab the cookie by its name, or is there an AFNetworking "way" to do this?

AFNetworking doesn't do anything explicitly with cookies so there is no "AFNetworking way" of dealing with cookies. 
You'll work with NSHTTPCookie and NSHTTPCookieStorage.

【Google翻訳】
1)認証に成功すると、Webサービスは2つのCookieを渡します。それらにアクセスするにはどうすればよいですか? 
NSHTTPCookieストレージに直接移動して、名前でCookieを取得しますか、それともAFNetworkingの「方法」がありますか?

AFNetworkingはCookieを明示的に処理しないため、Cookieを処理する「AFNetworkingの方法」はありません。 
NSHTTPCookieとNSHTTPCookieStorageを使用します。

NSURLSessionでCookieを扱うサンプルは以下が参考になります.
(参考)iOS7:NSURLSessionのhttp(cookie)でハマった

Objective-Cで書かれた通信処理のサンプルを探していて困ったのは,以下のクラスの関係です.
それぞれバージョンアップで改変されたクラスであると理解して情報を参照した方が理解しやすいと思います.

AFHTTPOperationManager → AFHTTPSessionManager
NSURLSession → NSURLConnection

2019 GSX-R1000R ABS(L9)に乗り換えました

今年の5月に 2019 GSX-R1000R ABS (L9) 国内仕様に MT-09 2016 から乗り換えました.
MT-09はサスペンションをナイトロンに変更したり,愛着のある1台でしたが,バイク人生で一度はSSの性能を体験してみたいという思いが強くなり,乗り換えを決意しました.
Hornet250 → XJR1300 → MT-09 と4台目,バイク人生25年にして初のSSです.

▼ 乗り換えの背景
XJR1300の頃からサーキットへ定期的に通っていましたが,目的はタイムではなく,愛車でのスポーツ走行であり,あまりSSには興味がなかったのですが,少しずつペースが上がるにつれ,最新のトラクションコントロール,IMU(慣性計測装置)によるモーショントラック・ブレーキシステムを採用したABSなどがある車両の方が安全にも寄与するだろうという思いが強くなり,乗り換えに至りました.
少しずつバイクをカスタマイズしながら,乗り味の変化を楽しむという方法もありますが,後付けでクイックシフターなどをつけるのはとても費用もかかるので,最初からSSに乗り換えた方が安価との判断です.

最近では国内仕様でもリミッターがないことなどもあり,購入に際してのハードルは低くなってきていることも大きな理由の一つでした.(リミッターについてはまだサーキット走行で確認していませんが…そうなんですよね (汗)
ちなみに,R1000Rの国内仕様は,ETC2.0が標準装備されています.

▼ 所感
初めてSSに乗った感想ですが,「無段階に操作できるラジアル ブレーキ」「オートシフターのダウン」は初めての感覚でとても感動しました.最近のオートバイにはとても制動力のあるブレーキがついていますが,コントロール性は感じていませんでした.
以前のバイクでは必要以上にブレーキを効かせないことにとても苦労していたので,レバーを引いたら引いた分だけ効くという感覚はとても素晴らしく感じます.
シフターのダウンも同様です.
ブリッピングより半クラを多用していたのですが,ブレーキだけに集中できるのはとてもありがたいですね.
また,フラッグシップだけあり,装備は十分と感じられました.
部品の仕上げについて理想を言えばきりがありませんが,バイク性能と価格はバランスしていると思います
(とは言え…とても高い買い物には違いありませんが…)

SUZUKIのトラクションコントロールは10段階で設定できます.
設定:10にしておくと介入頻度が一番強く,通常走行でも下り坂や段差を乗り越えると発動します.
発動時の挙動が人間にわかりやすいので,最初は何が起こったかわからず???となりました.笑
ちなみにMT-09は人間がわからない程度に介入していました.
サーキットで走行中にメーター周りを撮影していて,ランプがピカピカしているのを撮影動画を見て初めて気づく感じでした.

ワンプッシュでエンジン始動が可能なスズキイージースタートシステムはとても便利です.
指一本で必ずエンジンが始動します.
ローRPMアシストも同様にSSでも街中での取り扱いを楽にしてくれています.

ネガな部分については,初のSSで乗車姿勢がとてもきつく感じたというのが一番です.
ネイキッド,ストファイ?しか乗ったことがないライダーからすると,SSの乗車姿勢は拷問です.
常時ニーグリップを意識して,腹筋,背筋で上体を支えるのは至難の業です.
また,タンク形状は意外に幅があるとの印象を持ちました.
乗車して最初の数時間に感じていたのは,「えらい買いもんしたなぁー」というのが正直な気持ちです.
乗車姿勢がきつく,とてもライディングを楽しむような状況ではなく,自分には扱いきれない車両だと軽く絶望を感じたのです.
というわけで,ある意味バイク初心者として練習期間が必要だと感じ,半年ほど過ごしたのですが,ようやく1時間程度は休憩なく乗車できるようになりました.

数年前より右手の腱鞘炎?に悩まされており,スポーツ走行など連続して20分程度運転すると,手がしびれて,アクセル,ブレーキが思うように操作できない症状に悩まされていましたが,テーピング?のおかげもあり,乗車姿勢を意識していることが功を奏しているのか?1時間程度は心の余裕を持って,運転できるようになりました.
(SSでのサーキット走行はまだなので,ヒザスリはまだです.)

都内〜中央道〜奥多摩 程度のツーリングは楽しめる程度に体がバイクに順応してきました.
あと,心理的余裕もかなりつきましたね.

半年程度の使用ですが,疑問を感じている点もあります.
まず,「走行距離が1000Km以上でメンテナンス マークが表示されるが,消すために販売店に依頼する必要がある」という点.スパナ マークが表示されるだけで特に困ることはないのですが,整備不良のような印象を受けます.
参考: GSX-R1000R L7サービスリマインダー設定

あと,ETCカードの交換がカウルを外さないとできないという点もとても???ですよね.
マフラーについてもサイズ的に???なのですが,サウンドはとても良い気がしています.
リプレース前提なのでしょうが…私は交換予定はありません.

リアサスペンションのプリロードを変更するのは少し大変みたいです.
オプションで容易に変更できるダイアルがあれば良いのにと思いますが,あるんでしょうか?
あれば,取り付けたいですね.
リア フェンダーも純正オプションであればつけたいパーツですね.

ちなみに購入時にすぐ取り付けたカスタム部品は以下のものです.
GBRacing 製エンジンカバーなどカバー一式
エッチングファクトリー製 GSX-R1000(17~)用 ラジエター&オイルクーラーガードSET
BabyFace製 GSX-R1000 (’17)用フレームスライダー,GSX-R1000/R 用アクスルプロテクター

何れもパワーアップしないカスタマイズですが,もしもの際には役目を果たしてくれるはずです.
パワーは最初から十二分にあります.
少しずつSSに慣れていきたいです.
早くスポーツ走行で,ヒザを擦ってみたい!
また新しいバイクライフを感じている今日この頃です!

【追伸】R1000R(L9)のカスタム記事、実際のスポーツ走行の様子もどうぞ。

ZiiX タイムアタッカーをGSX-R1000R ABSにつけました
SS の乗車姿勢がまだ分からない
GoProをタンクマウントしてみた件

Apple Watch Series 5を買いました

丸の内にアップルストアができたと聞いたので行ってみました.
土曜日の午後1時頃に入店しましたが,混み合うこともなく落ち着いて商品を見ることができました.
表参道店,新宿店にも先週末出向きましたがそちらはとても混み合っていて,じっくり商品を見ることができなかったので,丸の内店は落ち着いて商品を見たい人にはよいかもしれません.
店内に入ってすぐ大型スクリーンがあり,子供たちがセッションに参加していたのがとても印象的でした.

なぜ,Series5になって初めてApple Watchに興味を持ったかというと,1番の理由はディスプレイの常時点灯です.
あと,日々のアクティビティ情報を取りたかったということがあります.
スポーツジムでの活動データはある程度把握できますが,生活での活動データをとってみたかったのです.

Apple Watchには数種類のモデルがありますが,基本的に一番手頃な価格帯のモデルを選択するとアルミケースの「Apple Watch Series 5」「Apple Watch Nike」のどちらかになると思います.
店舗スタッフによると,この2つのモデルは基本的に仕様は同じとのことです.
(ナイキモデルにはケース背面にナイキのロゴがあります.)

私はナイキモデルの黒スポーツループが欲しかったので,ナイキモデルを選びました.
(ナイキモデルのスポーツループとApple Watchの組み合わせでの購入はできないとのこと)

価格は税込みで約5万程度でした.(ケースサイズ44mm,GPSモデルの場合)


パッケージは環境を考慮したと思われる,紙パッケージです.お菓子箱のようですね.
手提げ袋ももらいましたが,以前もらったナイロンの袋はもう貰えないのでしょうか?
あれ,スポーツジムで汗でぬれたウェアを入れるのに重宝するんですよ.

また,アップルストアの購入手順はいつもとてもスマートですね.
まず最初にスタッフにモデルと購入者氏名,電話番号を伝えると,自分のiPhoneにメッセージが届きます.
Apple Watchは製品の組み合わせがあるので,この通知がバックヤードにも届き,そちらで商品を用意している間に,カード決済を行い,領収書はメールでもらう段取りになっていました.

セットアップは簡単でApple WatchとiPhoneを近付けると設定が開始されます.
データの転送には少し時間がかかるようで,アプリのインストールも同時に行うと約10分弱はかかったと思います.
使い勝手についてはこれから使いながら確かめようと思います.

操作については,消音モードにする方法,デジタルクラウン,サイドボタンを押した時の挙動について把握しておくとよいと思います.

少し使ってみて気づきましたが,充電ケーブル単体では安定しないので,台座のようなアクセサリーがあると見た目もよく,充電できるかもしれません.

▼ 追記
後日,amazonで台座を購入してみました.
充電中も安定して見栄えが良くなりました.Apple Watchのスタンド(700円)でした.

Time Machineのファイルが消せない場合の対処方法

数日前から iMac が不調となりリセットを行っても改善が見られなかったので,macOS Catalinaをクリーンインストールした.
その際,バックアップをTime Machineに保存していたのだが,ファイルをiMacに復元後,ファイル削除ができず困ったのでメモしておく.

最初にFinderからファイル削除を行ったのだが,以下のアラートが表示されてファイルが消せなかった.

次にターミナルから「sudo tmutil delete (削除対象のディレクトリパス)」コマンドを使用しても削除することができなかった.

次にターミナルから以下の情報を参考にbypassを使用するとTime Machineのファイルを削除することができた
参考:Delete all backups of specific file/folder with tmutil

$ /System/Library/Extensions/TMSafetyNet.kext/Contents/Helpers/bypass rm -rfv (削除対象のディレクトリパス)