iOS13になり、いくつか「今までOKだったけどこれからはダメ」というものが増えました。
詳しくは下記あたりを参照してほしいのですが、その中でも「今後はUIWebViewを使ったアプリは申請できなくなる」というのが最も大きい変更かなと思っています。
・iOS 13における必須対応について
・2020年中に対応すべき iOS13 以降向けの対応 (WebView, Split View など)まとめと補足
・iOS13対応をまとめてみた
実際にいつごろから本格的に禁止になるかはわかりませんが、
(上記サイトには2020年4月から新規アプリでUIWebViewを使っているものはリジェクト、既存アプリは2020年12月末でリジェクトと書いています。まぁアップルさんは微妙にずれることもあるので)
今後禁止になるのは間違いないので今から対応しましょう。
アプリ内のUIWebViewを、今後推奨されているWKWebViewに変更するのはそんなに大変じゃないっぽいです。私のアプリも既存のUIWebViewクラスのクラス名をWKWebViewに変更して、XIB内のWebViewをWeb Kit Viewに変えるだけでいけました。
<2020年5月6日:追加>
全然違いました。UIWebViewからWKWebViewへの変更で注意する点についても後日書きます。
WKWebView対応のAdMobのSDKを使用する時の注意点
さて本題ですが、上記UIWebViewの廃止に伴い、AdMobがWKWebViewを使ったSDKをリリースしました。AdMobを利用している方はこちらを早めに入れておいた方がいいと思います。
一点注意点というか、私が勝手にハマったところなのですが、AdMobの最新SDKをダウンロードすると下記のフレームワークが入っています。
・GoogleAppMeasurement.framework
・GoogleMobileAds.framework
・GoogleUtilities.xcframework
・nanopb.xcframework
・Licenses
最後の「Licenses」は必要ないとして、AdMobのスタートガイドにしたがって上記4つのフレームワークをプロジェクトに突っ込んだら、なんかエラーがでました。
エラーの内容は「必要なフレームワークが足りない」とのことだったので、エラー文にしたがって「webKit.framework」と「JavaScriptCore.framework」を追加したらエラーが消えました。
でも、なーんかおかしいな〜スタートガイドにそんなの入れろって書いてないのにな〜なんて思って見直してみたら、上記4つのフレームワークの「GoogleUtilities.xcframework」と「nanopb.xcframework」が「.xcframework」って書いてありました。
聞いたこともなかったので調べたら、xcframeworkというのはいろんなプラットフォームで使うフレームワークを1まとめにできるものらしいです。
xcframeworkフォルダの中を見ると、
・ios-armv7_arm64
・ios-i386_x86_64-simulator
・ios-x86_64-maccatalyst
というフォルダがあり、その中にそれぞれフレームワークが入っています。
AdMobをiOSアプリで表示するのに必要なのは「ios-armv7_arm64」フォルダの中にあるフレームワークだけなので、「GoogleUtilities.xcframework」と「nanopb.xcframework」の中の「ios-armv7_arm64」からそれぞれ「GoogleUtilities.framework」と「nanopb.xcframework」を選んでプロジェクトに突っ込めばOKです。
これでさっき入れた「webKit.framework」と「JavaScriptCore.framework」を消してもエラーが出ずに広告が表示されました。
知ってる人からしたら当たり前のことだったのかもしれませんが、私はハマったので書いておきます。
あと、個人的にはiPadを12.9インチ対応せずに自動で引き延ばしているため、Launch Imageが廃止になってLaunch StoryboardやXIBにしなくてはいけないのがめんどくさいです・・・。
Launch Storyboardとかにしたら12.9インチなどのiPadで起動した時に引き延ばされず、ちゃんとそれぞれの画面サイズに対応しなくちゃいけないので・・・
Obbhjective-C + XIBとの気になった違い。
基本
・クラスをimportする必要がない。まじか。
・AppDelegeteはそのままだと何もせず、そのままinfo.plistで指定されたStoryBoardを見に行く。どこからViewControllerが呼ばれたか謎チックだが、info.plistで指定されたStoryBoard→initial View Controllerのチェックが入っているViewController、という流れで呼ばれる。
ページ遷移
・画面遷移は、
1、StoryBoardのsegueでボタンから直接飛び先へリンク
2、StoryBoardのページとページをリンクして、リンク線のidentiferに固有のID(名前)をつけてperformSegueでページ移動を処理する
3、最初っからコードで全部書く
とかいろいろある。
・画面遷移の戻るのは、戻り先のControllerにunwind関数を書いて、StoryBoardでExitにボタンをリンクして関数を選択すればOK。
・unwindのsegueリンク線のidentiferに固有のID(名前)をつければ帰る時になにか分岐や処理させることができる
メモリ管理
ARCは、まぁ循環参照してない限りは普通のことをやってる分には特に意識しなくていいっぽい。
意味不明に効果音とかでタッチする度に謎にインスタンス生成したりしない限りは大丈夫でしょう。わかんね〜からとりあえずLeaksでInstruments起動して確かめればよいと思われる。多分。
変数
・変数は型を明示せずかつ初期値を入れていないとエラーになる(下記、オプショナル型での宣言を除く )。型を明示していれば初期値はなくてもエラーにならない。なお、初期値を入れることが推奨されている。
https://swift.tecc0.com/?p=325
nilを変数に入れるためには型名の後に?をつけてオプショナル型にする。ほんで使うときはnil以外が入ってる状態で変数名の後に!をつけて使う。
https://qiita.com/maiki055/items/b24378a3707bd35a31a8
オプショナル型を使うときはアンラップせよ。
https://qiita.com/Saayaman/items/1e2a87b9e61e419eaa73
イニシャライズ
なんだかよく分からないけれど、UIViewControllerを継承したVIewControllerとかでinit()みたいなこと書くとエラーが出る。調べたけどなんだかよくわからんコード追加すればできたけどこれでいいのか・・・。
class ViewController: UIViewController {
var text: String = ""
var value: Int = 0
// 任意の引数を取る自作のイニシャライザ
init(text: String, value: Int) {
// 受け取った引数でプロパティを初期化
self.text = text
self.value = value
// クラスの持つ指定イニシャライザを呼び出す
super.init(nibName: nil, bundle: nil)
}
// 新しく init を定義した場合に必須
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
以下略
プロトコル
名前だけで中身のないメソッドが用意されてるクラスみたいなので、「このプロトコルに批准したらちゃんと約束のメソッドを用意してね」ってやつ。
@objc optical がついてるメソッドは用意してもしなくてもOK。
プロトコルを作ることは、まず、ない。使い方を覚えればOK。
変数に型としてプロトコルを指定することもできる。そうすると、そのプロトコルに批准してるクラスのインスタンスしか入れられない。
var country:KyotoProtocol = Japan()
列挙体
自分で作った型。
型メソッド
インスタンス作らなくてもわかるような外側のことをする、クラスのメソッド。
デリゲート
わかるけどわからん。とりあえず他のクラスの能力を使えるようになるってことでいいんじゃね。
extension
クラスにメソッドやらプロパティやらを追加できる。本質的なメリットがよくわからんけれど、デリゲートメソッドを別で書いたりして中身が分けれてキレイになるのは間違いない。
ここまでのことは全「絶対に挫折しないiPhoneアプリ超入門」に書いてある。分かりやすい本だ。
他のファイルのメソッドとかを使う
Swiftでは、他のファイル(test.swiftとか)に書いたメソッドを、importとか何にもせずにそのまま使うことが出来るっぽい。簡単に種類の違うメソッドを外部ファイル化できるってことやね。たぶんね。

先日リリースした「おさるランド」がiPhoneアプリの情報サイトApplivにてレビューされました!
Applivのレビュー記事はこちら:タッチで遊ぼう!おさるランド – 子ども・赤ちゃん・幼児向けの無料ゲームアプリ
ちなみに、Applivでの幼児・子供向け知育/遊びのアプリランキングはこちら。おさるランドもランキングにはいれ〜!
Appliv さま、誠にありがとうございます!

おうちでお子さまにiPadで遊ばせているママ、パパはとても多いと思います。
家事の最中やちょっと手がはなせないときなどに、お子さま1人で安全に遊べるのでとっても便利ですよね。
今回はそんな小さなお子さんを持つパパママ向けにオススメの、「子供向けの定番iPadアプリ8選!しかも無料!!」をご紹介します。
弊社のアプリもありますので、ぜひダウンロードしてみてください♪
続きを読む