Androidエンジニアだった僕が、急にiOSアプリ開発に携わった際、学んだことをまとめておきました。
随時更新していく予定です。
Xcode、Swiftの基本用語
Target
ビルド結果で得られる成果物のこと。
iOS, watchOS, OSXなどがある(ビルド時に必ず指定する)。
Xcode上では、左のエクスプローラーで、プロジェクト名をクリックすると選択できる。
Project(.xcodeproj)
iOSやwatchOSなど複数のTargetをグループ化する。
Xcodeは、Projectを開き、Targetをビルドする仕組みになっている。
※「project.pbxproj」というファイルでファイルを管理している。このファイルに記載がされていないと認識されない。
Subproject
先述のProjectの中に、他のProjectを組み込める。
単体でも、親Projectでも開くことができる。
Workspace(.xcworkspace)
複数のProjectを同じレベル(階層)でまとめるのが Workspace。
補足
●1つのメインプロジェクトがあり、そこからだけしか参照がない
→Subprojectとして組み込む
●複数のプロジェクトに依存している
→Workspaceとして束ねる
SafeArea
iPhoneXなどのディスプレイ上部にある「切り欠き」に適した領域のこと。
この領域を考慮して開発することで、切り欠きに被らないようにできる。
storyboard(.xib)
Androidで言う、Designタブで視覚的にデザインできるモードに近い。
iOSの場合は、ファイルで管理している。
このstoryboardに定義したIDを参照して、実行ファイル(.m)でリソース操作したりもする。
注意点としては、ちょっとした修正でも大きな差分を生んでしまうこと。
修正方法の目星がついたら、一度差分を無くして修正するとGit管理がしやすくなる。
・差分を一度全て消す際は、「SourceControl→Discard…」を選択する。
(プロジェクト全体、ファイル単体のみも選べる)
ViewController
アプリケーションのデータと外観をつなげるもの。
ボタンなどにハンドリング処理を付与させることができる。
Androidでいう、Activityのような立ち位置。
AppDelegate
iOSアプリを作成した時点で生成される「AppDelegate.swift」というデフォルトファイルのこと。

Objective-Cの場合は、
AppDelegate.mという実装ファイルです。
アプリ全体のライフサイクルを管理するためのクラス(ファイル)で、
アプリ全体で使うグローバル変数などの管理にも使う。
例えばログイン有無のフラグやGoogleAnalyticsのトラッキングIDなど。
Extension
iOS特有の開発指向のことで、既存のクラスや構造体を拡張することができる。
String型などSDKが持っている「型」は通常改変不可能だが、iOSではそれをExtension(拡張)することができる。
Javaの「継承」と似ているが、クラス名をそのまま拡張することが可能。

例えば「String型を継承して新しい機能を追加する」
みたいなイメージですね。
CocoaPods
iOSのライブラリ管理ツールのこと。
以下の記事にて詳細を解説!

UIViewの制約
- AliginCenter X(Y) to
- 垂直、または水平方向の中心に揃える
- Trailing Space to
- 右側の間隔
- Leading Space to
- 左側の間隔
- BottomSpace to
- 下方向の間隔
- TopSpace to
- 上方向の間隔
- Propartional Height(Width) to
- パーセンテージで位置調整できる
UIViewControllerのライフサイクル

条件コンパイル
シンボルを定義しておくと、ビルドする「やつ」によって、その処理を通すか、通さないかを決めることができる。
1 2 3 4 5 6 7 |
#ifdef~~~~ このシンボルが定義されているなら、通る。 #endif #ifndef ~~~ このシンボルが定義されているなら通らない。(n=not) #endif |
Objective-Cの基本構造
- .h(ヘッダファイル)
- インターフェースを定義する。
- 存在するクラスを俯瞰することができる。
- .m(実装ファイル)
- ヘッダーファイルで定義されたインターフェースを実装して、実際に使う。
- 実装内容を見ることができる。
上記2つのファイルで分離させることで、管理しやすくしている(多分)
※現在はほとんどのプロジェクトでSwiftが用いられています。

Objective-Cを使った新規プロジェクトはほぼ無い!
あるとしたら保守案件だろうな。。。
const(定数)で定義する値(URLなど)も、ヘッダファイル、実装ファイル両方に定義しなければならない。
実装ファイルにURLを定義しているのにエラーが出るときは、ヘッダファイルに定義されているか確認する必要がある!
詳しくはこちら(Qiita)
Objective-Cの特徴
インスタンス生成時、メモリを確保する→alloc
値を保存できるようにする→init
また、以下の構文は同等の意味をもつ。
[[testViewController alloc]init] = [testViewController new]
文字列の比較は
[text isEqualToString:@”りんご”];
Xcodeのショートカット
地味に覚えておくと役に立ちます。
AndroidStudioと若干違うショートカットもあるので、Android開発者の方は使い分けに苦労します。
ファイル内検索
command + F
全体検索
command + Shift + F
ビルド
command + B
ファイル名検索
command + Shift + O
(カーソルがあった位置に)戻る、進む
command + Shift + ←(戻る)
command + Shift + →(進む)
解析の方法と不具合時の対処方法
Xcodeのバージョンを上げたらビルドエラーが出たときの対処方法
Targetを選択(Xcodeの左側にあるエクスプローラーで、プロジェクト名をクリック)し、Build Settingsを選択する。
後半にある「Swift Compiler – Language」の「Swift Language Version」でコンパイルするバージョンを上げる。
インストールできても、うまく起動しないときの対処方法
- メニューバー > Product > Archive
- 別Windowで開く(Archive)
- 右の「Distribute App」を選択
- AdHocにチェックする
- そのままNextボタンを押す
- Exportする場所を指定する
- 指定した場所にIPAファイルが出力される
- Window > Devices and Simulators
- 出力されたIPAファイルを”INSTALLED APPS”にドラッグ&ドロップして再インストールする
画像やボタンのハンドリング処理を探す
- 対象の画面のstoryboardを開く
- ハンドリング処理を見たい画像やボタンを選択する
- 右のサイドバーに表示される紐づいた処理名で全体検索する。
たった2日でマスターできるiPhoneアプリ開発集中講座
全くアプリ開発に馴染みがない人でも分かりやすい一冊です。iOSとは何か?というところから丁寧に教えてくれます!