🧰 Xcode ポータル

Appleプラットフォーム開発の統合開発環境(IDE)Xcodeを、概要→基本→基礎→最新→応用→発展の順に学べるポータルです。

最終更新: 2025-08-13 15:44(JST)
ページの使い方
  • 左の目次か上部ナビでセクション移動できます。
  • 🔎 検索でセクション内のカードをフィルタできます。
  • 🧪 コードは「Copy」ボタンで簡単コピー。

概要

Xcodeは、エディタビルド/実行UI設計テストプロファイルまでを一体化したApple純正IDEです。プロジェクト、ターゲット、スキームの概念を中心にアプリのライフサイクル全体を管理します。

プロジェクト/ターゲット/スキーム

プロジェクト=全体設定、ターゲット=成果物単位、スキーム=実行/分析の組み合わせ。

# スキーム例
# App(本体) / AppTests(単体) / AppUITests(UI)を切替
# ⌘ + R で実行、⌘ + U でテスト

UIビルダー:Interface Builder / SwiftUI

Storyboard / XIBとSwiftUI Previewの二刀流。実案件では混在も可。

// SwiftUI サンプル
import SwiftUI

struct HelloView: View {
  var body: some View {
    Text("Hello, Xcode!")
      .font(.title)
      .padding()
  }
}

デバッガ & ブレークポイント

LLDBで変数確認、ウォッチ、条件付きブレークポイント、シンボリックブレークポイントなど。

# LLDB例
(lldb) po view.frame
(lldb) breakpoint set --name viewDidAppear

基本

プロジェクト作成

  1. File › New › Project
  2. App(iOS)を選択し、Product NameやTeamを設定
  3. Interface(SwiftUI or UIKit)を選ぶ

ビルド設定(Build Settings)

Swift Language Version、Optimization Level、Other Linker Flagsなどを把握。

# 例:Release最適化
SWIFT_OPTIMIZATION_LEVEL = -O

スキーム(Scheme)運用

Debug/Release切替、環境変数注入、Arguments Passed On Launchの管理。

# 例:開発API切替
APP_ENV=dev
FEATURE_FLAG_EXPERIMENTAL=1

基礎

XCTest(単体テスト)

import XCTest
@testable import MyApp

final class MathTests: XCTestCase {
  func testAdd() {
    XCTAssertEqual(1 + 2, 3)
  }
}

UITest(UIテスト)

import XCTest

final class MyAppUITests: XCTestCase {
  func testLoginFlow() {
    let app = XCUIApplication()
    app.launch()
    app.textFields["email"].tap()
    app.typeText("user@example.com")
    app.secureTextFields["password"].tap()
    app.typeText("secret")
    app.buttons["Login"].tap()
    XCTAssertTrue(app.staticTexts["Welcome"].exists)
  }
}

Instruments(計測)

Time Profiler、Leaks、Allocations、Energy Logでボトルネック診断。

最新情報

ここは運用に合わせて更新してください(手動更新 or JSON差し替え対応)。

手軽な運用のコツ
  • news.json を置けば自動でカード表示。
  • CMS不要で静的に運用できます。

応用

マルチターゲット構成

Free / Pro、社内配布 / ストア配布などでターゲットを分割、ビルド設定を継承。

CI連携(xcodebuild / xcodebuild+fastlane)

# xcodebuild例
xcodebuild \
  -scheme MyApp \
  -configuration Release \
  -destination 'platform=iOS Simulator,name=iPhone 15' \
  clean build test

ビルド設定差分管理

.xcconfig を使って環境ごとの設定をテキスト管理。レビューしやすくCIとも相性◎。

// Debug.xcconfig
SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG
API_BASE_URL = https://dev.example.com

発展

ビルド時間短縮Tips

  • Swift Concurrency最適化・型推論過多の回避
  • モジュール分割とキャッシュ活用
  • プリコンパイル済み依存の導入

モジュール設計

Featureごとの分離、Domain/UseCase/Interface/Infraで責務分担。

iOS iPhone / iPad開発

SwiftUIテンプレート

import SwiftUI

@main
struct MyApp: App {
  var body: some Scene {
    WindowGroup {
      ContentView()
    }
  }
}

struct ContentView: View {
  var body: some View {
    NavigationStack {
      List {
        NavigationLink("詳細へ") { Text("Detail") }
      }
      .navigationTitle("Home")
    }
  }
}

UIKit + Storyboard最小構成

// AppDelegate.swift(抜粋:Storyboard使用時は最小でOK)
func application(_ application: UIApplication,
  didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
  true
}