【初心者】swift4.2,Xcode10で画面遷移を作る

謎のスクールに通い始めswiftエンジニアデビューしたので日記を書きます。
このシリーズについて

  • 3月から勉強を始めた
  • ド素人が
  • 最近通い始めた謎のプログラミングスクールで学んだ情報を
  • 自分の理解度を向上させるために
  • アウトプットしていきます
  • 自分の勉強が目的なので画像を貼ったり絵を書いたりする時間はないです
  • 謎のスクールでは秘伝のソースをたくさん使って授業が行われています
  • なので書いたコードをそのまま書けません
  • つまりqiitaの「投稿者以外の人にとっても価値のある記事」に反する可能性があります
  • ごめんなさい。

今回やったことと、解決した疑問点

  • ページ遷移させるアプリをつくる
    • モデル(Model)ってなんだ
    • コントローラ(Controller)ってなんだ
    • ビュー(View)ってなんだ
    • ストーリーボード(Storyboard)ってなんだ
    • クラス(class)ってなんだ
    • let varってなんだ
    • File's ownerってなんだ
    • 画面遷移ってどうやるんだ

やることのイメージ

①コントローラーを2個作ります
②コントローラーと対になるようにビューを2個作ります
③コントローラーとビューを紐づけます
④最初のページ(ビューの方)にボタンを置きます
⑤ボタンをコントローラーに登場させます
⑥遷移先ページもコントローラーに登場させます
⑦ボタンを押したら遷移させるようにさせます
⑧ウゴイタアアアアアア

※「コード主体でストーリーボードもそこそこ使う」という書き方は一般的ではないと聞いたので、あまり参考にしないほうがいいと思います。あくまでアウトプットです

始める前に:モデルとかコントローラーとかビューについて

当たり前のように使われていたのでXcodeの仕様なのかと思ってググったら、”MVC"というプログラミングの考え方みたいですね。
それすら知らずにただコードを書いていたので、やっぱりアウトプットは大切ですね。

View
絵。
ユーザーが実際に見たり触ったりする見た目の部分

Controller
ゲームのコントローラーと一緒。
Aボタンを押したらジャンプするとかそういう指示をする

Model
わからん。
まだ授業で習ってません。

参考:MVCモデルについて
https://qiita.com/s_emoto/items/975cc38a3e0de462966a

プロジェクトを作ろう!

早速Xcodeを触っていきましょう。
”Create a new Xcode project”から"Single View app"をつくります。それ以外の項目は何なのか私は知りません。
プロダクトネーム以外はすべてデフォルト。
そしてViewControllerを見てみましょう。

ドンッ

import UIKit
class ViewController: UIViewController {
    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
    }
}

うわああああわかんねえええ
でも頑張って理解していきます

import UIKit

UIKitというものを使えるようにしてくれるそうです。
UIKitはとりあえず必要らしいので残します

class ViewController: UIViewController {
}

ここでクラスというものが登場します。
下記参考サイトでは、たい焼きの型が”クラス”で、その型を使ってできるたい焼きそのものが”インスタンス”と紹介されています。

「私たい焼きは粒あんしか許さないので、クリームとか入るようにわざわざ型とか作って汎用性上げる必要ないです」ってひねくれていたのですが、よくよく考えると粒あん一種類しか作らないとしても型は必要なので、「クラス作って、そこからインスタンス作って」って流れは必須みたいです。(よくわかってない)

参考:“たい焼き”であま~く理解するJava文法と言語仕様
https://www.atmarkit.co.jp/ait/articles/0803/12/news148.html

ViewController: UIViewController

このコロン(:)、怖いですね。
このコロンは「継承」ということをやっているようです。

「”ViewController”というクラスを今回作るけど、こいつは”UIViewController”という機能を継承してるから、おんなじことできるよー」ってことですね。

じゃあその"UIViewController"ってなんやねんって誰もが思うと思いますが、これはXcode様が我々下民に予め用意されてくださった機能のようです。右クリックして"Jump to Definition"をクリックするとUIKit内のUIViewControllerの定義を見ることができますが、全くわからないので見なくていいと思います。

参照:継承
https://tea-leaves.jp/swift/content/%E7%B6%99%E6%89%BF

    override func viewDidLoad() {
        super.viewDidLoad()
}

まずfuncですが、これは関数というものだそうです。
下のやつがめちゃくちゃ分かりやすいので下のやつ読んだらいいと思います(怠惰)
何行もある処理を何回も書くのはめんどくさいからviewDidLoadって先に関数にまとめちゃっておいて、viewDidLoadって書くだけで何行も書いたことにしちゃおうってことですね。

参考:関数
https://wp-p.info/tpl_rep.php?cat=swift-biginner&fl=r18

    override func viewDidLoad()

"override func"については下のやつが再度参考になります。
"viewDidLoad"というこれまたXcode様が用意してくださったコードを踏襲しています。

参照:継承
https://tea-leaves.jp/swift/content/%E7%B6%99%E6%89%BF

        super.viewDidLoad()

これまた上の継承に乗っています。super.をつけることによって、override funcの横にくっついてる親要素のviewDidLoad()をやるよ!と言っているわけですね。

つまりまとめると、
新しいクラス"ViewController"を作ります。
ViewControllerは基本的にはUIViewControllerと同じ機能を持ったクラスです。
ViewControllerはviewDidLoad()を継承した関数も格納していて、
その格納された関数内では、なんとviewDidLoad()だけが作動します。
ってことですね。

ここで、なんで親と子で同じviewDidLoadしか言ってないんだ?親子の友情を深めたいのか?という疑問が湧き上がってきたのですが、よくわかりません。
本当に動かすときにはsuper.viewDidLoad()の下の行にもなんか他の動作を追加するんですかね?わかりません。まあいいでしょう。

ちなみに、//以下の部分はコメントなので実際のコードに影響を及ぼしません。なので私には見えていません。

ここから先は参考にならないかも

それでは、私の通っているスクールでは"Import UIKit"以下全て消します。

そして秘伝のソースをぶち込みます。

そのためこの先の説明が非常にあやふやになりますので、ここから参考資料としての質がこれまで以上に一気に落ちます。みなさんは秘伝のソースを持っていないのでとりあえずの流れだけ読み取ってもらえると嬉しいです。よろしくお願いいたします。

import UIKit
class ViewController: UIViewController {
    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
    }
}

Controllerを作ろう

今回は画面を2つ作る必要があるので、
Command + Nで"Cocoa Touch Class"を2つ作成します。
クラス名は"TopViewController"と"NextViewController"で、下の選択部分はデフォルトのままで大丈夫です。

Cocoa Touch Classってなんだろうと思って下の参考ページを見たのですが、親切に選択項目によって良さげなデフォルトコードを差し込んでくれるようですね。

ただ、私の場合はその親切さを秘伝のソースで流し去ります
(だからあんまりCocoa Touch Classにする必要ないと思うんですが、なんででしょうかね。とりあえず左上にいるからですかね?)

参考:[Xcode]Cocoa Touch ClassとSwift Fileの違いはなに?
https://code-schools.com/cocoa-touch-class-or-swift-file/

とりあえず、Controller内には下のように書きます。
この"BaseViewController"が秘伝のソースらしく中身を読んでもさっぱりわかりません

import UIKit
class TopViewController: BaseViewController {
}

Viewを作ろう

Controllerをつくったら、次はView(xibファイル)も作ります。
Command + NでViewを作成します。名前は上と全く同じ。名前が"TopViewController"でもビューです。混乱しますね。

その後はFile's Ownerなるものを設定します。ビューを作成しただけでは、真っ白なキャンパスが宙ぶらりんになっているだけの状態です。なので、「私、このクラス様のビューなの…」とご主人の名前を彫ってあげないとアプリとして使える状態にならないようです。

クラス設定の手順は下の参考を見てください。スクリーンショットがたくさんで見やすいです。

"TopViewController"のFile's Owner(クラス)は"TopViewController"
"NextViewController"のFile's Owner(クラス)は"NextViewController"です。

参考:【Swift4】xibファイルでViewを作成してStoryboardで使用する方法
http://program-life.com/559

File's Ownerを設定したら、Outletsを設定します。
なんかFile's Ownerをクリックした状態で、Controlキーを押しながらドラッグすると線を引けます。
それでFile's Owner→View(すぐ下のやつ)に線を引くと…

"Outlets"
"view"

みたいな感じになります。
viewを選択します。
完了です。
何をやっているのか全くわかりません。
でも完了です。

多分下記が参考になるんだと思います。

参考:【Xcode/Swift】Action接続、Outlet接続の外し方(削除する方法)
https://pg-happy.jp/xcode-delete-action-outlet-connection.html

ボタンを作ろう!

今回作りたいものはボタンを押したらページ遷移するアプリなので、ボタンを作る必要があります。

TopViewController から NextViewController にページ遷移させたいので
TopViewControllerのビューにボタンを載せます。

Shift + Command + Lで検索できるので、そこにbuttonと書き込むとボタンが出てくるのでそれをビューの好きなところにドラッグします。ボタンにはクラスを付与する必要はないです。

あとはXcode画面右上の丸が2個重なっているようなアイコンを押すと2画面表示ができるので、今作成したビューのボタンを、Controlキーを押しながら、TopViewControllerのコントローラーに載せます。

今回は、ボタンを押したら動く!を実現したいので、
connection は Action
name は 好きな名前(授業ではtouchedButtonでした)
type は UIButtonです。

するとこんなのが出ると思います。

```swift @IBAction func touchedButton(_ sender: UIButton) { }

  
IBActionという物によってボタンが動きましたよーという動作をコントローラーが認識できるようになってくれます。  
  
参考:IBOutletとIBAction:関連付けでラクラクパーツを配置しよう  
http://iphone-app-program.com/newapp/iboutlet-and-ibaction/ibbas/  
  
ボタンが動作した後は、funcから始まる先程の関数ですね。  
「touchedButtonという機能を発動させるよー。機能は{}の中だよー」って感じです。  
  
 ```swift
    (_ sender: UIButton) {
    }

これはよくわかりません。とりあえずXcodeさんが勝手にやってくれてるってことは、ありがたくそのまま使わせてもらえばいいんじゃないでしょうか。
_をつけることによって、「第1引数の『外部引数名』の省略を行うこと無くコンパイルが可能になる」らしいので、とてもめでたいことなんだと思います。

参考:内部引数名と外部引数名について
https://wp-p.info/tpl_rep.php?cat=swift-biginner&fl=r20

『IBActionのsenderにはアクションが起きたUI要素のオブジェクトが入ります。
この場合は「タップ」というアクションが起きた「ボタン(UIButton)」がsenderに入ります。』だそうです。(丸々コピペすいません)

参考:senderというものについて
https://teratail.com/questions/116581

遷移先ページの設定をしよう

ボタンを押したら遷移させる。という機能にしたいのですが、そもそも「次のページ」がどのようなものか設定ができていません。

そのため、nextViewControllerというページをTopViewControllerでも使えるようにしてあげないといけません。

そこで下記のようなコードをTopViewController側に書きます。

    let nextViewController = NextViewController()

意味がわかりませんね。
まず、letは「定数を代入する」力を持ちます。参考サイトを読むのが早いです。(雑)

参考:変数と定数について
https://wp-p.info/tpl_rep.php?cat=swift-biginner&fl=r10

ここで、まずnextViewControllerという変数の箱を作ります。
実はnextViewControllerという部分はなんでもいいです。箱にくっつける名前なだけなので。今回は「nextViewControllerを表示させる変数」なのでわかりやすいようにnextViewControllerにしたよ!って感じです。

その後の = でNextViewController()と書いています。

NextViewControllerの中身は、Cocoa Touch Classファイルを作成したままほっといていましたよね?これが書いてあるはずです。

class NextViewController:UIViewController{
    override func viewDidLoad() {
        super.viewDidLoad()
    }
}

要約すると「読み込みます」ってことです。よくわかりませんがこれでNextViewControllerのビューも読み込んでくれます。

ボタンに遷移させる処理を加えよう

もう少しです。

TopViewControllerに次ページの情報を登録できましたので、あとは「ボタンを押したら」「次ページを読み込む」の指示を出したら大丈夫そうですよね。
ボタンの指示については下がわかりやすいのでそのままコードを拝借します。

@objc func goNext(_ sender: UIButton) {// selectorで呼び出す場合Swift4からは「@objc」をつける。
        let nextvc = NextViewController()
        nextvc.view.backgroundColor = UIColor.blue
        self.present(nextvc, animated: true, completion: nil)
    }

参考:Swift: Storyboardを使わない画面遷移まとめ!
http://programming-beginner-memo.com/?p=825

今回は、letの処理も終わってますし、ボタンの色を青にする必要もないので、下の部分だけ貼り付けました。

self.present(nextvc, animated: true, completion: nil)

nextvc が nextViewController なのでそこを書き換えて、

self.present(nextViewController, animated: true, completion: nil)

にすれば完成です!
TopViewControllerの中身をまとめるとこんな感じ

import UIKit

class TopViewController: UIViewController {
    override func viewDidLoad() {
        super.viewDidLoad()
    }
    let nextViewController = NextViewController()
    @IBAction func touchedButton(_ sender: UIButton) {
        self.present(nextViewController, animated: true, completion: nil)
    }
}

storyboardを少しいじる

Xcode様にはstoryboardと呼ばれる機能があり、正直これを使えば上の処理が2分くらいでできるらしいです。私はどうして2分で終わるはずのことを4時間もかけてqiitaに書いているのでしょう。

Xcodeで新規プロジェクトを作成した際に、storyboardは「デフォルトで作成されるViewControllerという画面を最初に表示するよ!」と設定されています。
しかし、今回私はViewControllerは削除しており、最初にTopViewControllerが表示されてくれないと困るわけです。

storyboardの操作はビューの操作のときと似ています。
storyboardファイルを開いた後に、もともと登録されていたViewControllerをクリックします。そうするとビューのときと同じようにクラスを選択できる部分があるので、そこをTopViewControllerに変更します。

あともう一つ注意してほしいのが、storyboard上に登録されているビューです。
私達はすでにビューは別に作っていますが、storyboard上にビューが乗っているとそちらが優先されてしまいます。
そのため、storyboardに乗っているViewを削除してください。私はこれを忘れていてずっとボタンが出てこなくて泣きました。

終わり

command + R でパソコン上に仮想iPhoneとアプリが立ち上がります!
ウゴイタアアアアアアアアアアアアアアアアアアアア
うれしいですね。

次回に向けての意気込み

書けば書くほど謎のスクール直伝秘伝のソースの比重があまりに多いことに驚きます。
みんなは小麦粉とオーブンでパン作ってるのに、私だけホットケーキミックスと炊飯器でパン作ってるみたいな気分。

今後は秘伝のソースマシマシでやるので、次回も進め方がおかしい様子を楽しんでくださいまし。
qiita使おうと思ってたんですがやっぱり万人には活かせないのでブログでほそぼそとやりつつ、qiitaに出せるような汎用性の高い技術力を得たい

PC版Spotifyでファイアウォールエラー(エラーコード17)が出たときの対策

Spotify 便利ですよね。 今回はそんな便利なSpotifyからYoutube Premiumに浮気しようとした私が食らったお仕置きの対処方法をお伝えします。

絶賛勉強中のためPCを英語表記にしてて英語になっちゃってますが、こんなエラーです。 Log in error with 'A firewall may be blocking Spotify. Please update your firewall to allow Spotify. Additionally you could try changing the currently used proxy settings (Error code: 17).

日本語に訳すと、「ファイアウォールによってSpotifyがブロックしてます。設定変えて〜」って感じです。 でも、ファイアウォールを解除して、Spotify一回消して再インストールしてもやっぱり入れないんですよね。

何が悪さしているのか調べてみたら、どうやら地域設定のようです。 下記公式コミュニティにて解説されていたのですが、 「無料プランかつ、登録した国と違う国で接続」した際にエラーが出るようです。

https://community.spotify.com/t5/Desktop-Windows/A-firewall-may-be-blocking-Spotify-Please-update-your-firewall/td-p/4506619

解決するには下記のステップに従ってみてください ①Spotifyの自分のアカウントにログイン http://www.spotify.com/account

②「プロフィール編集」をクリック ③国・地域を現在いる国に変更 ④保存

私と同じような状態の人はあまりいないと思いますが、 調べても出てこなかったので念の為記しておきます。

非エンジニアでもめちゃわかりやすく基礎からITP 2.0を解説 (Intelligent Tracking Prevention) する記事

f:id:beatbarrel:20180712015943j:plain と言った方のための記事です。

[:contents]

ITP(Intelligent Tracking Prevention)という単語がwebマーケ界隈を騒がせていましたね。

今はだいぶ落ち着いてきた印象もありますが、
細かい仕組みを話せないと恥をかいてしまいますよ。
今回は、非エンジニアの方にもわかりやすいようにITPを説明していきます。

私は元々広告代理店で働いていたので、
リアルにこの問題をお客さんに説明していました。
私自身非エンジニアでかなり調べたので、共有できればなとおもって記事にしました。

では、ITPとは何なのか!
を教えるにはまだはやーい!!

ITPを知る前に、まずはCookieの仕組みから勉強していきましょう。
※わかっている人は、復習ついでにお付き合いください

広告に使われるCookieについて

cookieを始めとして、テクノロジーは人の悩みを解決するために生み出されます。
まずは、広告を配信する広告主の気持ちになって考えてみましょう。
※内容を簡潔にするため、実際とは異なる説明が含まれますのでご了承ください。

せっかくインターネット上で広告を配信するなら、できれば自分の商品に興味がある人達に配信をしたいですよね。
では、皆さんが化粧品の商品を売っていて広告を配信するとき、どういう場所に配信をしますか?

例えばこんなところが考えられます。
* 化粧品の通販サイト
* 能人のブログ
* 化粧品の比較・レビューサイト

上の例にはある共通点があります。皆さんわかりますでしょうか?
正解はサイトの内容で判断しているということです。

もちろん、化粧品のサイトを見ている人は化粧品に興味がある可能性が高いです。
しかし、化粧品が好きな人は化粧品のサイトばかり見ているわけではありませんよね?

人によっては旅行が好きかもしれませんし、アニメ好きな人もいるでしょう。
当然、サイトを元にしたカテゴリ分けでは旅行ブログを読んでいる化粧品好きな人に広告を配信できません。

そこでGoogleを始めとした企業は考えました。 f:id:beatbarrel:20180712014033j:plain そこでCookieという技術を使いました。

cookieは、遊園地のスタンプのようなものだと思ってください。 一度サイトに来た人には、そのサイトに来たよーという印のスタンプが押されます。 f:id:beatbarrel:20180710225828j:plain

その状態で他のサイトに行くと、他のサイトでも
お、この人はあの遊園地のスタンプを持っているな。とわかります。 f:id:beatbarrel:20180710225833j:plain

このように、Googleなどの広告会社は様々なページにGooglecookieを付与して、ユーザーに沢山のスタンプを貼り付けます。

そうすることで
* この人は化粧品のサイトをたくさん見ているな。きっと化粧品に興味があるんだろう とか
* この人は芸能人のブログとファッションの記事をたくさん読んでいる。
Googleにはファッション好きな人は化粧品にも興味があるデータがあるから、この人にも化粧品の広告を出そう

などなど、ユーザーの行動や興味などを分析することが出来ます。
cookieのおかげで広告主は、
化粧品関連のサイトに広告を配信するだけではなく
化粧品に興味がある人に対して広告を掲載できるようになったのです。 f:id:beatbarrel:20180710225827j:plain

ちなみに、リターゲティングも同じ手法ですよね。
自分のサイトに来たユーザーにcookieを付与するようにしておけば、
ユーザーが全く関係のない他のサイトに行ったとしても、cookieを元に広告を配信することが出来ます。

cookieの問題とITPの起こり

繰り返しになりますが、テクノロジーは人の悩みを解決するために生み出されます。
ITPはcookieへの悩みを解決するために生まれたテクノロジーです。

先程cookieによって、ユーザー単位で広告を配信できるようになったと言いましたが、
この配信には大きなデメリットがあります。

それは、皆さんが広告に対して思っている事かもしれません。
いっつも同じ広告が出てきて嫌だ! とか
全然関係ないのにさっき見ていたサイトの広告が出てきて気持ち悪い! などです。

ユーザーに対して配信する手法は効果的ではありますが、しつこいと気味悪がられてしまいます。
そんな広告に対して不快感を感じているユーザーを見かねたApplef:id:beatbarrel:20180712013839j:plain と発明した技術がITPです。

ここで、ITPでググった時によく出てくる図が出てきます。 ※最近ITP 2.0というものに進化したので、皆さんが知っているものと少し図が違うかもしれません。

f:id:beatbarrel:20180710230153p:plain

3rd-partyとか書いてあるのは一旦無視してください。
大切なことは、左に書いてある部分です。

簡単に訳すと広告の追跡に使われるcookieすぐに破棄されますよと言っています。
https://webkit.org/blog/8311/intelligent-tracking-prevention-2-0/

これによって、ユーザーは誰からもスタンプが押されません。
つまり広告会社からの追跡を免れることが出来て安心めでたしめでたしです。

※概要を知りたい方はここまででも十分だと思います。
ここから先は、もっと詳しい内容について説明していきます。
お客さんなどに詳細を含めて話せるようになりたい方は、もう少しお付き合いください。

ファーストパーティーcookieサードパーティークッキーについて

先程の画像にも3rd-partyという単語が含まれていました。
インターネット広告で言われるcookieには、

ファーストパーティークッキーは、例えるなら遊園地のスタッフが押してくれる再入場スタンプです。
ネット上で言えば、ECサイトSNSにログインしたときのことを考えてください。
f:id:beatbarrel:20180710225828j:plain

元々のPCの仕様を考えると、一回画面を閉じたりPCをシャットダウンした場合、再度ログインが必要になります。

でも、普段パソコン利用している時に、毎回ログインしたりしていませんよね?
これはファーストパーティクッキーがログイン情報を記録しているおかげなのです。

「ファーストパーティー」とは「当事者」という意味です。
遊園地のスタッフが、自分の遊園地のお客さんに対してスタンプを押すようなことです。

お客さんも遊園地に行きたくて行っているので、遊園地のスタンプを押されても別に気になりませんし、別にスタンプ押されても危なくなさそうですよね?
f:id:beatbarrel:20180710225846j:plain ということで、ファーストパーティーは安全で便利なクッキーと言えるでしょう。

それに対してサードパーティークッキーは、広告の追跡などに使われるクッキーです。

サードパーティー「第三者という意味です。
探偵のようなものをイメージしてください。
f:id:beatbarrel:20180710225839j:plain

探偵は遊園地とは一切関係ありませんが、こっそりあなたが遊園地に行ったことを記録しています。
遊園地だけではありません。近所のレストランにも、ショッピングモールにも、どこにでも探偵が潜んでいます。
そして探偵が潜んでいる所に足を踏み込んでしまうと、探偵がその施設に訪問したことを記録します。
f:id:beatbarrel:20180710230545j:plain

そのように探偵が集めてきたデータを元に、ユーザーの趣味嗜好などを判断しているわけです。

実際の例を挙げると、Googleはこの様にデータ収集していると明記されています。

たとえば、広告サービス(AdSense など)や分析ツール(Google アナリティクスなど)を利用しているウェブサイトや、YouTube の動画コンテンツを埋め込んでいるウェブサイトを閲覧すると、お使いのウェブブラウザから Google に特定の情報が自動的に送信されます。 『GOOGLE のサービスを使用するサイトやアプリから収集した情報の GOOGLE による使用』 https://policies.google.com/technologies/partner-sites?hl=ja

Google関連のサービスを使っているユーザーのデータは、全てGoogleが収集するわけです。怖いですね。

というわけで、ITP2.0の画像を再掲しますが、
左側の英語の通り、サードパーティークッキーはすぐに破棄されるようになりました。
そして、ファーストパーティークッキーも、30日間アクセスがなければクッキーが削除される様になりました。

f:id:beatbarrel:20180710230153p:plain

ちなみに、画像の下部の説明は少し専門的な話になります。
AppleはITP 2.0に応じてStorage Access APIというものを用意しており、
これを使うことによってcookieの保持を緩和させてくれるようです。

参考文献 http://b.hatena.ne.jp/entry/s/webkit.org/blog/8124/introducing-storage-access-api/

細かい仕様に関しては、様々なサイトが解説をしています。
個人的にこのサイトがわかりやすかったので、気になる方は読んでみてください。

『「サードパーティクッキー」が危険な理由を正しく知りましょう』 http://ascii.jp/elem/000/000/654/654929/

各社の対応状態

半年前の記事ですが、各社この状態からそこまで大きく動いてないのではないかという印象です。
ITP 2.0になって、Facebookは少し厳しくなったかも?

ただ、Safariユーザーの人口自体があまり大きくないこともあり、
ITPのせいで我が社は終わりだー! ってほど絶望的ではない気もします。
このあたりは各社それぞれ対策を講じていると思うので、自力で調べてみてください。

『iOS11 safari のITP(Intelligent Tracking Prevention)の各社対応まとめ』 http://adworld.hatenablog.com/entry/2017/09/21/012010

補足:Google AnalyticsのITP対応について

冒頭で話していた、なぜGA連携なら問題がないのかという件です。

CriteoなどはITPに対して対策を示せていない状態ですが、
Googleに関しては、Google Analytics(GA)と連携をする、
もしくは管理画面から発行されるグローバルサイトタグを埋めれば、CV含めて問題なく計測できます。

最後は、なんでGAなら問題ないのか、について解説してこの記事を締めくくりたいと思います。

結論:これ見ればOK
https://www.nexal.co.jp/blogs/2061.html

この記事を読んでいる時点で、テック側の知識が少ないと予想されますので
最初からしっっかり読まないと理解できないと思います。

個人的な解釈では下記のイメージです。
・クッキー自体は自分のサイトとしか行わないからファーストパーティー扱い
・GAのjavascriptが何やら動いて、なぜか情報だけはGAに行く
・でもGoogleドメインとのクッキーのやり取りはないから、やっぱりファーストパーティー扱い

とりあえずGoogleすごいとだけ思っておけばOKです。

おわり