57300


# はじめに

embedded frameworkに挑戦しています。  
コンパイルが通り実行もできたのですが、  
`Clean Build Folder`すると毎回エラーになります。

[![画像の説明をここに入力](https://i.stack.imgur.com/ek6PS.png)](https://i.stack.imgur.com/ek6PS.png)

# 再現可能なプロジェクトの場所

Xcodeのプロジェクトファイルも関係すると思いますので、  
ソースコード自体を載せることにあまり意味がないように感じますので、  
プロジェクト全体を持つGitHubへのリンクを置きます。

<https://github.com/shingo-nakanishi/embedded-framework>

↑この中のHogeフォルダです。

# エラー内容

エラー内容は

> undefined symbol: method descriptor for FooKit.Foo__allocating__init() ->
> FooKit.Foo

といったものが主です。

[![画像の説明をここに入力](https://i.stack.imgur.com/PxIOc.png)](https://i.stack.imgur.com/PxIOc.png)

# 一旦は解決するが...

おそらく  
<https://stackoverflow.com/questions/32687105/framework-not-found-in-xcode>  
が解決策になると考え、

一度、本プロジェクトの  
`Embedded Binaries` から全てのembedded
frameworkを「-」ボタンで削除し、「+」ボタンで追加し、複数回Xcodeの実行ボタンを押すと正常に実行されます。

（おそらくXcodeの実行ボタンを押す回数は関係なく、「+」ボタンを押した結果が反映されるのに時間がかかっている？）

[![画像の説明をここに入力](https://i.stack.imgur.com/Gljki.png)](https://i.stack.imgur.com/Gljki.png)

## しかしもう一度、Clean Build Folderするとエラー

上記の通り、「削除＆追加」をすると正常に動きだしましたが、  
もう一度Clean Build Folderするとまた同じエラーになります。  
その都度、「削除＆追加」をすればよいのですが、あまりにも手間です。

なにかやり方が間違っているのでしょうか？  
それとも、Clean Build Folderは基本的にできなくなってしまうのでしょうか？

# 念の為に関係しているソースを載せます

「はじめに」に書いたとおりあまりソースコード自体は関係ない気がしますが、関係しているソースコードも載せておきます。

**ViewController**

[code]

    import UIKit
    import FooKit
    import BarKit
    
    class ViewController: UIViewController {
        override func viewDidLoad() {
            super.viewDidLoad()
    
            print(Foo().f)
            print(Bar().f)
            print(Bar().b)
        }
    }
    
[/code]

**Foo**

[code]

    import Foundation
    
    open class Foo {
        public init() {}
        public let f = "F"
    }
    
[/code]

**Bar**

[code]

    import Foundation
    import FooKit
    
    public class Bar: Foo {
        public let b = "B"
    }
    
[/code]

【再掲】プロジェクト全体のコードは次のリンクです  
<https://github.com/shingo-nakanishi/embedded-framework>

## 参考にしたサイト

embedded frameworkを作成したときに参考にしたサイトを念の為、載せておきます  
<https://qiita.com/edm/items/4cda53320dfa0858d542>


CC BY-SA 4.0
2019-08-07T00:41:16.470
57205
2019-08-11T08:02:26.203
2019-08-07T00:52:30.120
9008
9008
question
swift xcode framework
embedded frameworkのプロジェクトをClean Build Folderすると毎回エラーになる


Target `BarKit`の Target Dependenciesに、継承元の`FooKit`を指定してないためだと思います。

それぞれが並列的にBuildされる際に`Bar`は`Foo`を継承していますから、Target
`BarKit`をBuildするためには`FooKit`が必要です。この依存関係の指定が欠けているためです。


CC BY-SA 4.0
2019-08-11T08:02:26.203
57300
2019-08-11T08:02:26.203
14745
57205
answer