【iOS開発入門】Xcode、iOSで押さえておくべき基本事項

アイキャッチ_iPhoneiOSアプリ開発
サバ缶
サバ缶

どうもこんにちは!
サバ缶(@tech_begin)です。

私は新卒1年目から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を同じレベル(階層)でまとめることが可能。

以下のように、SubprojectとWorkspaceは使い分けた方が良いでしょう。

① 1つのメインプロジェクトがあり、そこからしか参照がない
  →Subprojectとして組み込む

② 複数のプロジェクトに依存している
  →Workspaceとして束ねる

SafeArea

iPhoneXなどのディスプレイ上部にある「切り欠き」に適した領域のこと。

この領域を考慮して開発することで、切り欠きに被らないようにできる。

storyboard(.xib)

Androidで言う、Designタブで視覚的にデザインできるモードに近い。

iOSの場合は、ファイルで管理している。
このstoryboardに定義したIDを参照して、実行ファイル(.m)でリソース操作したりもする。

注意点としては、ちょっとした修正でも大きな差分が生まれてしまうこと。

修正方法の目星がついたら、一度差分を無くして修正するとGit管理がしやすくなる。

  • 差分を一度全て削除する場合は、「SourceControl → Discard…」を選択する。(プロジェクト全体 / ファイル単体のみも選択可能)
  • 現在は、storyboard ではなくSwiftUI が主流になりつつある。

ViewController

アプリケーションの「データ」と「外観」をつなげるもの。

ボタンなどがタップされた時のハンドリング処理を記述する……など。

Androidでいう、Activityのような立ち位置。

AppDelegate

iOSアプリを作成した時点で生成される「AppDelegate.swift」というデフォルトファイルのこと。

アプリ全体のライフサイクルを管理するためのクラス(ファイル)。
アプリ全体のグローバル変数の管理などにも利用する。

例えば、ログイン有無のフラグ、ログイントークンの保持、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のライフサイクル

UIViewControllerのライフサイクル - Qiita
UIViewControllerのライフサイクルについてUIViewControllerのライフサイクルについてまとめてみました。いざまとめてみるとviewの読み込みや表示に関する部分はある程度理…

条件コンパイル

「シンボル」を定義しておくと、ビルドする Target によって、その処理を実行するか決めることができる。

#ifdef~~~~
  このシンボルが定義されているなら、通る。
#endif

#ifndef ~~~
  このシンボルが定義されているなら通らない。(n=not)
#endif

Objective-C の基本構造

現在のほとんどのプロジェクトでは、Swiftですが、
たまに保守案件で Objective-C が使われているケースがあるため記載します。

Objective-Cで使用される主ファイル
  • .h(ヘッダファイル)
    • インターフェースを定義する。
    • 存在するクラスを俯瞰することができる。
  • .m(実装ファイル)
    • ヘッダーファイルで定義されたインターフェースを実装して、実際に使う。
    • 実装内容を見ることができる。

const(定数)で定義する値(URLなど)も、ヘッダファイル、実装ファイル両方に定義しなければならない。

実装ファイルにURLを定義しているのにエラーが出るときは、ヘッダファイルに定義されているか確認する必要がある。詳しくはこちら(Qiita)を参照。

Objective-Cの特徴

インスタンス生成時、メモリを確保する必要がある →  alloc

値を保存できるようにする → init

以下の構文は同等の意味を持つ。
[[testViewController alloc]init][testViewController new]

文字列の比較は以下のようになる。

[text isEqualToString:@"りんご"];

Xcodeのショートカット

AndroidStudioとの使い分けに苦労しましたが、覚えておくと地味に役立ちます。

ファイル内検索

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」でコンパイルするバージョンを上げる。

インストールできても、うまく起動しないときの対処方法

  1. メニューバー > Product > Archive
  2. 別Windowで開く(Archive)
  3. 右の「Distribute App」を選択
  4. AdHocにチェックする
  5. そのままNextボタンを押す
  6. Exportする場所を指定する
  7. 指定した場所にIPAファイルが出力される
  8. Window > Devices and Simulators
  9. 出力されたIPAファイルを”INSTALLED APPS”にドラッグ&ドロップして再インストールする

画像やボタンのハンドリング処理を探す

  1. 対象の画面のstoryboardを開く
  2. ハンドリング処理を見たい画像やボタンを選択する
  3. 右のサイドバーに表示される紐づいた処理名で全体検索する。

さいごに

実際の案件で学んことをメモしていたため、少し場当たり的な対処法なども含まれています。

お役に立てましたら幸いです!

タイトルとURLをコピーしました