投稿者: PICxPIC

【自分用のメモ】今更ながらSwiftやらStoryBoardやらを学ぶ【随時更新】

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とか何にもせずにそのまま使うことが出来るっぽい。簡単に種類の違うメソッドを外部ファイル化できるってことやね。たぶんね。

UnityとARkitを勉強するよ

ここしばらくiPhoneアプリの制作からも離れて静観していたのですが、特にすることもなくなり暇になってきたので、やろうやろうと思って保留していたUnityとARについて勉強しようと思います。

とりあえずUnityとARをまとめて勉強できると思い、「ARKitとUnityではじめるARアプリ開発」という本を購入。

UnityもARもまったく分からないけれど、本を読みながら適当にサンプルを動かしてみた。

マジで本に言われたとおりにサンプルを動かしただけなんだけれど、何かを成し遂げた錯覚を覚える不思議。

このまま本を進めていこうと思ったんだけれど、ARkitどうこうの前にUnityのカメラとかの基本的な使い方がさっぱりわからず、そちらから手をつけないといかんなと思い、まずUnityの教科書から読むことにした。

まぁ使い方を覚えるだけなので1日くらいでサラッとやるつもりです。

ARはプラットフォーム選びが難しい

とはいえ私はUnityを身に付けたいわけではなく、あくまでもARの技術を身に付けたいわけです。

しかし、2019年現在、AR開発のプラットフォームはARkitだったりARCoreだったり、Unity使ったり使わなかったり、知らんけどいろいろ選ぶのが大変そうです。

とりあえずUnityを経由させておけばどうなってもまぁなんとかなるだろう、という安直な考えで今回はUnity経由でやろうとしているわけです。

Objective-C+XIBしかやらずに平成の終わりまで過ごしてしまったので、UnityもC#もSwiftもさっぱりわかりませんがとにかくちょっとずつがんばろうと思います。

iPhoneが発表されてから10年以上経つことへの雑記。

スティーブ・ジョブズによってiPhoneが発表されてからもう10年以上が経つ。

最初のiPhoneにはAppleが開発したアプリしかインストールできず、AppStoreという概念はなかった。

それからすぐにAppStoreがリリースされ、誰でも開発者登録をすれば世界中のiPhoneユーザーに自分の作ったアプリを使ってもらえるようになった。

私がアプリを作り出したのはAppStoreがリリースされてからおよそ2年後の2010年の秋ごろだった。

そこまで早く参入したわけでもなかったのだけれど、当時は今より圧倒的に情報が少なく、かつ開発手順も複雑だったので、「iPhoneアプリを作っている」という人はプログラマーの中でもかなり稀だった。

その黎明期にiPhoneアプリ開発というものに参加できたのは本当に運がよかったと思うし、そういった場をくれたAppleには感謝しかない。

あれから時間が経ち、リリースしたアプリが20本を超えたが、今はほとんど新規アプリをリリースしていない。

ここでちょっとiPhoneアプリのあれこれを振り返ってみようと思う。

続きを読む

AdMobが新しくなってなんか変わった。

AdMobが何やら新しくなった。

前回ガラっと変わったのは確か2012年とかそのあたりで、AdSenseとシステムが統合されたためリニューアルと同時に単価が激しく上昇していた記憶がある。

今回のリニューアルでは単価の上昇とかはなくて、FireBaseを本格的に使ってもらうためのものだと思われる。

なお、いつ出来たのかは知らないが、広告のユニットID以外に下記のような感じに「アプリID」をAppDelegate内で指定する必要があるようす。

@implementation AppDelegate

- (BOOL)application:(UIApplication *)application
    didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

  // Initialize Google Mobile Ads SDK
  // Sample AdMob app ID: ca-app-pub-3940256099942544~1458002511
  [GADMobileAds configureWithApplicationID:@"YOUR_ADMOB_APP_ID"];
  return YES;
}
@end

詳しくはAdMobのGet Startedを参照してください。

そういえば以前は本番の広告ユニットIDを指定するとテスト環境でも広告が表示されたが、今は表示されないみたいです。

なので、テスト環境ではAdMobが指定するテスト用広告IDを設定してね、ということらしい。インプレッション広告とかもあるから不正な収益が発生してしまうからでしょうね。

通常のiPad解像度(1536×2048)でつくったアプリをiPad Pro(2048×2732)で引き伸ばして表示する方法

iPadアプリを申請したらいきなりitunes connectでエラーが発生。

どうやらiPad Proの12.9インチ版スクリーンショットが必須になったらしい。ということはつまり、iPadアプリではiPad Proで動くことが必須になったということですね。

といってもiPad Proの解像度(2048×2732)なんて意識して作っていなかったので、どうしましょ、iPhoneアプリをiPadで起動すると自動で引き伸ばしてくれるように、なんとか引き伸ばして表示させる方法はないだろうかと調べたところ、ありました。

従来のソフトのままでiPad Proの画面に対応する方法
iPad Proが広すぎるため、取り急ぎ今までのアプリと同じサイズで対応しておきたい

Launch Screen Fileを設定しなければよい

Launch Screen Fileを設定する箇所を白紙にしておけばよいようです。大変助かりました。

引き伸ばしたスクリーンショットをitunes connectで設定して実際に申請したところ、問題なく「Ready for Sale」になりました。よかったよかった。

iPhoneでは5.5インチ、4.7インチ、4インチ、3.5インチと様々な解像度対応が必要で大変ですが、どの機種も一般のユーザーが使う解像度なので対応必須は当然だと思っています。しかし、個人的にはiPad Proは一般ユースとはちょっと違うんじゃないかな〜と感じていて、対応必須というのはちょっと厳しいような気がします。

Xcodeやitunes connectで、12.9インチ対応するかどうかをチェックボックスで選択できたりしたら分かりやすいんですけどね。

私もしばらくはこのLaunch Screen Fileを白紙にする方法で対応したいと思います。

プロフィール

PICxPIC
1983年生まれ。2010年からiOSアプリを開発し、2012年に法人化。メディア掲載やランキング、ダウンロード数などの詳しい実績などはこちら

PICxPICのアプリ

赤ちゃんの大冒険

おさるランド

動物オーケストラ2

子どもゲームランド

おしゃべりボタン

天空までのぼれ!

ジャンプで川下り

ひよこランド

動物オーケストラ

ポコポコアニマル

キラキラお絵かき

音が出るお絵かき

あいづちん