Xcodeエラー対応: ld: symbol(s) not found for architecture x86_64

開発環境

> xcodebuild -version
Xcode 13.3
Build version 13E113

エラー

Undefined symbols for architecture x86_64:
  "SampleModule.SampleModule.init() -> SampleModule.SampleModule", referenced from:
      Test20220519.ViewController.viewDidLoad() -> () in ViewController.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

エラー再現手順

  1. XcodeのProject内にPackageを追加
  2. Project側で1で追加したPackageの処理を利用
  3. Project実行時に「ld: symbol(s) not found for architecture x86_64」が発生

1. XcodeのProject内にPackageを追加

2. Project側で1で追加したPackageの処理を利用

Package側

public struct SampleModule {
    public private(set) var text = "Hello, World!"

    public init() {
    }
}

Project側

import UIKit
import SampleModule

final class ViewController: UIViewController {
    override func viewDidLoad() {
        super.viewDidLoad()

        print(SampleModule().text)
    }
}

この時点でコード補完は効く。

3. Project実行時に「ld: symbol(s) not found for architecture x86_64」が発生

Undefined symbols for architecture x86_64:
  "SampleModule.SampleModule.init() -> SampleModule.SampleModule", referenced from:
      Test20220519.ViewController.viewDidLoad() -> () in ViewController.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

対応方法

XcodeのTARGETS > Frameworks, Libraries, and Embedded ContentにPackageを追加する。

追加された状態になるとProjectの実行が成功する。