2017-06-01 4 views
1

HttpUrlResponseからヘッダーを取得しようとすると、iOSシミュレーターで大文字と小文字が区別され、実際のデバイスでは大文字と小文字が区別されます。iOS HttpUrlResponseヘッダーフィールド大文字と小文字の区別

Webサービスは、HTTPヘッダ "おばあちゃん-クッキー:XXXX" を返し

ヘッダーキーは大文字がある場合: はurlResponse.response.allHeaderFields["Grandmas-Cookies"] as? String

  • シミュレータは見つけられませんがキー。
  • 実際のデバイスがキーを認識します。

ヘッダーキーはすべて小文字あります urlResponse.response.allHeaderFields["grandmas-cookies"] as? String

  • シミュレータは、キーを見つけないと。
  • 実際のデバイスではキーが表示されません。

実際のデバイスと同様に動作するようにシミュレータを設定できますか?この時点では、WebサービスのHTTPヘッダーを小文字に変更することは望ましくありませんが、これは最近始まったばかりです(これは楽しい時です)。

+0

まだお持ちでない場合は、バグを報告してください。すべてのヘッダーフィールドルックアップは、大文字小文字を区別しないものとします。 「(:「)およびフィールド値のフィールド名は大文字と小文字を区別している。。」 – dgatwood

答えて

1

編集:私は、これは問題ではないことを確認するために、より良い方法を発見した

@Adam。

小文字を区別しないようにするこの関数を作成しました。

func find(header: String) -> String? { 
     let keyValues = allHeaderFields.map { (String(describing: $0.key).lowercased(), String(describing: $0.value)) } 

     if let headerValue = keyValues.filter({ $0.0 == header.lowercased() }).first { 
      return headerValue.1 
     } 
     return nil 
    } 

以下は、一部の人にはまだ役立つ場合があります。

この問題を解決するために、structを作成しました。 structの中には、アプリ内のどこからでも参照できる静的変数grandmasCookiesが作成されました。あなたは携帯電話のデバイス上で実行されているとき、これは大文字

おばあちゃん、クッキー

を返します。

これを使用すると、MacBook Proのようなデバイス上のシミュレータで実行しているとき

おばあちゃん、クッキー

小文字を返します。

struct Platform { 

    static let grandmasCookies: String = { 
     var xtoken = "Grandmas-Cookies" 
     #if arch(i386) || arch(x86_64) 
      xtoken = "grandmas-cookies" 
     #endif 
     return xtoken 
    }() 

    static let isSimulator: Bool = { 
     var isSim = false 
     #if arch(i386) || arch(x86_64) 
      isSim = true 
     #endif 
     return isSim 
    }() 
} 

私は携帯電話のデバイス上で動作するシミュレータとfalseから実行するときにtrueを返す二コンビニエンス変数isSimulatorを作成しました。

私はあなたのシナリオと私も直面している1のために機能するソリューションを作るために、このStackOverflowのpostからコードを適応。

+1

RFCは、明示的に各ヘッダフィールドは、コロンに続く名で構成」状態だから私はこの解決策に100%満足していませんが、今のところうまくいきます。 https://tools.ietf.org/html/rfc2616#section-4.2 – Adam

関連する問題