Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Network.frameworkの紹介

 Network.frameworkの紹介

下記勉強会で発表した際の資料です。

お留守番でもついていけるもん!WWDCゴリゴリキャッチアップ会
https://connpass.com/event/89868/

Network.frameworkはiOS12で追加された生ソケットに代わる第4の通信APIです。
ローレベルな制御をモダンなAPIにまとめており実用的です。
サンプルとしてこれを使ってHTTPクライアントを実装し、
iOSのATS制限を回避してみました。

omochimetaru

June 11, 2018
Tweet

More Decks by omochimetaru

Other Decks in Programming

Transcript

  1. DispatchQueueϕʔεͷඇಉظAPI class NWConnection { // ઀ଓઌͱϓϩτίϧͷࢦఆ init(host: NWEndpoint.Host, port: NWEndpoint.Port,

    using: NWParameters) // ઀ଓ, ੾அίʔϧόοΫ var stateUpdateHandler: ((NWConnection.State) -> Void)? // ઀ଓ func start(queue: DispatchQueue) } 6
  2. DispatchQueueϕʔεͷඇಉظAPI class NWConnection { // ૹ৴ func send(content: Data?, contentContext:

    NWConnection.ContentContext, isComplete: Bool, completion: NWConnection.SendCompletion) enum SendCompletion { case contentProcessed(@escaping (NWError?) -> Void) case idempotent } } 7
  3. DispatchQueueϕʔεͷඇಉظAPI class NWConnection { // ड৴ func receive( minimumIncompleteLength: Int,

    maximumLength: Int, completion: @escaping (Data?, NWConnection.ContentContext?, /* isCompleted */ Bool, NWError?) -> Void) } 8
  4. DispatchQueueϕʔεͷඇಉظAPI class NWListener { // ଴ͪड͚ࢦఆ init?(parameters: NWParameters, port: NWEndpoint.Port)

    // ઀ଓϋϯυϥ var newConnectionHandler: ((NWConnection) -> Void)? func start(queue: DispatchQueue) } 9
  5. ϞόΠϧωοτϫʔΫΛҙࣝͨ͠ઃܭ class NWConnection { // ΑΓྑ͍ܦ࿏ͷ௨஌ var betterPathUpdateHandler: ((Bool) ->

    Void)? // ݱࡏͷܦ࿏Λ੾அɺผͷܦ࿏Λࢪߦ func cancelCurrentEndpoint() } ※͜ͷϖʔδͷ಺༰͸ௐ͕ࠪ؁͍Ͱ͢ɻ 11
  6. ࢿྉ • netcatͷ࣮૷αϯϓϧ, Cݴޠ Implementing netcat with Network Framework https://developer.apple.com/documentation/network/

    implementingnetcatwithnetworkframework • ιʔείʔυίϝϯτ swift/stdlib/public/SDK/Network https://github.com/apple/swift/tree/master/stdlib/public/ SDK/Network 13