iOSアプリ開発者になりたくて積んでたXcodeではじめるSwiftプログラミングを読んだ

SwiftでiOSアプリ開発やってみたい、けどXcodeすらまともに触れないという状態だったので2年くらい前に買ったXcodeではじめるSwiftプログラミングを読みました。

XcodeではじめるSwiftプログラミング

XcodeではじめるSwiftプログラミング

TOC

  • 1章. Xcodeを始めるための予備知識
  • 2章. プロジェクトの作成から実行までの流れ
  • 3章. Swiftプログラムの基本を学ぶ
  • 4章. オブジェクトの基本操作を理解する
  • 5章. 制御構造を理解する
  • 6章. 文字列/日付時刻/コレクションの操作
  • 7章. 関数のいろいろな活用方法
  • 8章. オリジナルのクラスを活用する
  • 9章. iOSアプリケーション作成の流れ

読書メモ

各章節または自分が理解できるひとかたまりでざっくりまとめたものから、言語仕様以外の部分を。一部あとの章で紹介される内容を先にメモってる箇所もあります。

1章. Xcodeを始めるための予備知識

Swiftとはどんな言語か

Xcodeについて

  • Xcode 6からコンパイラGCCからApple LLVMに置き換わった
  • 左上にEditorグループがあり、スタンダードエディタ、アシスタントエディタ、バージョンエディタを切り替えられる
  • コードの行番号を表示するには、Xcode->Preferences->Text Editing->Editing->Show->Line numbers
  • オンラインマニュアルは、Window->Documentation and API Reference(shift+command+0)

2章. プロジェクトの作成から実行までの流れ

テンプレートからプロジェクトを作成する

  • プロジェクト名、組織名、組織ID、言語を指定する。
  • 作成されたプロジェクトファイルは.xcodeproj
  • プロジェクトをビルドして生成される成果物をターゲットと呼ぶ
    • 例えばサーバ/クライアント構成のプロジェクトでは、サーバアプリケーション、クライアントアプリケーション、共通ライブラリのように3つのターゲットを用意することができる
  • Build Settingsパネル
    • Basicで基本の設定のみ、Allですべての設定が表示される
    • Combinatedで最終的な設定、Levelsでターゲットの設定、プロジェクトの設定、デフォルトの設定が階層表示される
      • git config --local と --global みたいなものか
  • Swiftソースファイルの拡張子は.swift

ビルドとメモリ管理

  • ビルドしたらRunで実行
    • ビルド設定をまとめたものをスキームと呼ぶ(Visual Studioにおける構成管理)
    • 実行、停止ボタン右のスキーム名右クリックからEdit Schemeを選択でスキームを設定可能
  • メモリ管理はARC(Automatic Reference Counting; 自動的な参照カウンタ方式)
  • ビルドされた実行ファイルは、ホームディレクトリ->ライブラリ->Developer->Xcode->DerivedData->プロジェクト名xxxx以下に生成される
    • プロジェクトナビゲータでProducts->プロジェクトフォルダを右クリックしてShow in Folder

ターミナルでビルド

  • swiftc -sdk /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.13.sdk -o hello main.swift
    • -sdkSDK指定、-oで生成するオブジェクト名
  • otool -Lでオブジェクトが使用する共有ライブラリを確認できる

3章. Swiftプログラムの基本を学ぶ

割愛。

Playgroundファイル

  • Playgroundの実態は、プロジェクトに依存しない個別のファイル
    • 内部には複数のファイルがパッケージングされている
  • Welcome to Xcode画面でGet started with a playgroundを選択するか、プロジェクトを開いてFile->New->Playgroundで開始できる

4章. オブジェクトの基本操作を理解する

割愛。

5章. 制御構造を理解する

割愛。

6章. 文字列/日付時刻/コレクションの操作

割愛。

7章. 関数のいろいろな活用方法

割愛。

8章. オリジナルのクラスを活用する

割愛。

9章. iOSアプリケーション作成の流れ

このあたりから実践しながら書いたので本書にないものも書いてる

概要

  • iOSのレイヤー
    • Cocoa Touchレイヤー
    • Mediaレイヤー
      • マルチメディア処理
    • Core Servicesレイヤー
    • Core OSレイヤー
      • OSの基本機能
  • iOSアプリにはGUIが必要
  • Xcode内蔵のGUIデザインツール「Interface Builder」を使用してGUIを作成する
    • コードで記述も可能
  • 画面は、画面定義Viewと画面制御ViewControllerのペアからなる
  • デザインしたViewはStoryboardファイルに保存される
  • Storyboardでは画面間の遷移をXcodeGUIで見たまま構成できる
  • アプリケーションのテストはiOSシミュレータで行う

プロジェクトの作成

  • 新しいプロジェクトを開き、iOS->Applicationから適当なテンプレートを選択
  • プロジェクト名、組織IDを入力し、言語にSwiftを選択して次へ
  • 保存先フォルダを選択してCreateを押すと、選択したフォルダにプロジェクト名のサブフォルダができ、そこにプロジェクトが作成される

プロジェクトの構成

  • .xcodeproj
    • プロジェクトファイル
  • アプリ/AppDelegate.swift
    • @UIApplicationMainがアプリ起動時に呼び出される。その他アプリの状態変化イベントで呼び出されるデリゲートメソッドが定義してある。
  • アプリ/Main.storyboard
    • Viewと画面遷移の定義
  • アプリ/LaunchScreen.storyboard
    • スプラッシュ画面の定義?
    • 中に定義されているViewのInterface Builder DocumentにあるUse as Launch Screenにチェックが入っているとスプラッシュ画面として呼び出されるのだろうか
    • Xcode 9.2時点ではLaunchScreen.xibファイルはなく、.storyboardに統一されたようだ
  • アプリ/Assets.xcassets
    • アプリ内で使用する画像などのアセットファイルを登録する
    • Xcode 9.2時点ではImages.xcassetsではなく、Assets.xcassetsという名前に変更されているようだ
  • アプリ/ViewController.swift
    • Viewと紐付けれれたController. viewDidLoadに読み込み完了時の処理を記述する。didReceiveMemoryWarningはメモリ不足時に呼び出されるので、ここにメモリ解放等の処理を記述する
  • アプリ/Info.plist
    • 本書には記載なし。なにかハマったときにいじくるファイルという理解
  • アプリTests,アプリUITests
    • テストの雛形
  • Products
    • おそらく成果物が生成される

Interface BuilderでMain.storyboardを開く

  • 画面の説明。Storyboardでは各画面のことをシーン(Scene)と呼ぶ
    • Sceneがあり、ViewControllerがあり、Viewがある
    • First ResponderとExitはなるほどわからんとおもった
  • 左下にドキュメントアウトラインを開く/閉じる、右下にミニツールバーがある

プロジェクトをビルドして実行する

  • 画面上部ツールバーの「Scheme」から実行対象を選び、Runボタンで選んだ実行対象上でアプリが動作する。シミュレータのiPad 9.7inchで試した
  • シミュレータの初期言語は英語なので、Homeボタンで実行中のアプリをバックグラウンドへ送り、設定から言語を日本語にする

StoryboardにGUI部品をレイアウトする

  • 右下のライブラリペインから、オブジェクトライブラリを開き、GUIオブジェクトをViewにドラッグ&ドロップ
  • 配置したオブジェクトのアトリビュートインスペクタ(右上のアイコン並んているところからボリュームみたいなやつを選択)でいろいろ設定できる

アウトレットの設定

  • Outlet; ViewControllerからGUI部品をインスタンス変数として参照する仕組み
  • 1章の「Xcodeについて」で触れたアシスタントエディタを開き、GUIオブジェクトを選択してcontrolを押しながらコードにドラッグ&ドロップ。必要なプロパティを設定してConnectを選択するとインスタンスを参照するためのコードが挿入される
    • Storage: ARCのメモリ管理の属性設定。デザインファイルに配置したGUI部品なら基本的にWeak(弱い参照)

ボタンにアクションを設定

  • ボタンを配置し、アシスタントエディタにcontrolを押しながらドラッグ&ドロップ
  • ConnectionにActionを選択し、Eventに指定したイベント発生時に呼び出すメソッド名をNameに指定してConnectを選択する

ここまでの内容で作ったアプリ

f:id:Cormorant:20171209084657g:plain
(ボタンクリックで現在日付を取得して表示)

iPhone用カレンダーアプリを作成する

割愛

SwiftでiOSアプリ作れるようになった

Xcodeの使い方を含め解説してくれるおかげでサクッとできました。Swiftはともかく、Xcodeの使い方がいまいち分からず雰囲気でやっていたところがあったので、この本を読んで非常に助けられました。

8章まで9月30日に読み切ったのに、そこから放置して実際にiOSアプリ作る9章を読み始めたのが12月9日になってから、というのがほんとうに残念ですね。どうしてあきらめるんだそこで!最後まで読め!