

Realm入門という本の「06_モデルオブジェクトの生成と初期化」の下記サンプルコードをダウンロードして使おうとXcode9.1で開いた所、エラーが出て前に進めません。解決方法を御教示頂けないでしょうか。

### エラー内容

ModelCreationのViewController.swift/import RealmSwiftのところに

[code]

    Module compiled with Swift 3.0.2 cannot be imported in Swift 3.2.2
    
[/code]

### 試したこと

ネットで探して以下の４点を試しました。  
①`carthage bootstrap --platform iOS --no-use-binaries`  
（結果→`-bash: carthage: command not found`）  
②`$ brew update`／`$ brew install carthage`をやった（結果→ `command not found`。）  
③`Carthage.pkg` をダウンロードしてインストール後に①（結果→ `command not found`。）  
④`build holder`のクリーン後に①（結果→ `command not found`。）

環境 MacBookPro HighSierra10.13.1 Xcode9.1

[code]

    import UIKit
    import RealmSwift
    
    class Person: Object {
        dynamic var name = ""
        dynamic var age = 0
        dynamic var dog: Dog?   // Dogモデルと1対1の関連
        let cats = List<Cat>()  // Catモデルと1対多の関連
    }
    
    class Animal: Object {
        dynamic var name = ""
        dynamic var age = 0
    }
    
    class Dog: Animal {
    }
    
    class Cat: Animal {
    }
    
    class ViewController: UIViewController {
        
        override func viewDidLoad() {
            super.viewDidLoad()
            
            // MARK: - 6.2 生成と初期化する方法
            print("6.2 生成と初期化する方法(p035)")
            
            print("- ①生成後に各プロパティ値を設定する(p036)")
            var dog = Dog()
            dog.name = "Momo"
            dog.age = 9
            
            print("- ②キー値コーディング(KVC)に準拠しているオブジェクトで初期化する(p036)")
            dog = Dog(value: ["name": "Momo", "age": 9]) // Dictionaryで初期化
            
            print("- ③各プロパティの値の配列で初期化する(p036)")
            dog = Dog(value: ["Momo", 9])
            
            // MARK: - 6.3 ネストしたモデルオブジェクトの生成と初期化
            print("6.3 ネストしたモデルオブジェクトの生成と初期化(p037)")
            
            let cat1 = Cat(value: ["Toto", 1])
            let cat2 = Cat(value: ["Rao", 2])
            
            print("- ①生成後に各プロパティ値を設定する(p037)")
            var person = Person()
            person.name = "Yu"
            person.age = 32
            person.dog = dog
            person.cats.append(objectsIn: [cat1, cat2])
            
            print("- ②キー値コーディング(KVC)に準拠しているオブジェクトで初期化する(p037)")
            person = Person(value: ["name": "Yu",
                                    "age": 32,
                                    "dog": ["name": "Momo", "age": 9],
                                    "cats": [["name": "Toto", "age": 1],
                                             ["name": "Rao", "age": 2]]])
            
            // Objectもキー値コーディングに準拠しているので初期化に使用できます。
            person = Person(value: ["name": "Yu",
                                    "age": 32,
                                    "dog": dog,
                                    "cats": [cat1, cat2]])
            
            print("- ③各プロパティの値の配列で初期化する(p038)")
            person = Person(value: ["Yu",
                                    32,
                                    dog,
                                    [cat1, cat2]])
            
            // オプショナル型やListクラス内の要素がない場合でも、配列内の値を省略することはできません。
            // 値がない場合はnilを指定する必要があります。
            person = Person(value: ["Yu",
                                    32,
                                    nil,
                                    nil] as [Any?])
            
            // 例えば次のコードはオプショナル型とList型に対しての要素がないためクラッシュする。
            // person = Person(value: ["Yu", 32]) // ← 実行すると例外が発生しクラッシュ
        }
        
        // MARK: - Util
        
        @IBOutlet weak var textView: UITextView!
        
        func print(_ string: String) {
            Swift.print(string)
            if textView.text.characters.count > 0 {
                textView.text = textView.text.appending("\n")
            }
            textView.text = textView.text.appending(string)
        }
        
    }
    
[/code]


CC BY-SA 4.0
2017-11-26T06:38:50.670
39850
2019-12-19T17:50:43.910
2020-06-17T08:14:45.997
-1
13657
question
swift realm
Module compiled with Swift 3.0.2 cannot be imported in Swift 3.2.2 の対策


解決しました。  
サンプルソースにある、このプロジェクトのディレクトリをダウンロードしたディレクトリとは異なる場所に移動してから、プロジェクトを開き、中のRealmと、RealmSwiftのframeworkを削除して、使用しているXcodeのバージョンに対応したRealmと、RealmSwiftのframeworkをインストールしたところ、simulatorで動きました。  
インストールは、この本の「第３章Realmのインストール（DynamicFrameworkによるインストール）」に従いました。  
コンパイルをする段階にバージョンの違いがあると思い込んでいましたが、frameworkそのものにXcodeのバージョンに対応しているものがあることを理解しました。carthageの問題ではありませんでした。


CC BY-SA 3.0
2017-12-01T07:36:11.573
39965
2017-12-01T07:46:55.397
2017-12-01T07:46:55.397
13657
13657
39850
answer