Closed4

TCA(The Composable Architecture)のチュートリアルでのハマりどころ

okuzawatsokuzawats

import ComposableArchitectureがNo Such Moduleになる

Swift Package ManagerでTCAへの依存を追加したところ、 import ComposableArchitecture
No Such Module というエラーとなってビルドできない。

解決策

Xcodeのメニューから、Product > Clean Build Folderを行い、Xcodeを再起動した。
あとから調べると、別の解決方法もあったよう。こちらの解決方法の方が正しいかもしれない。

環境

  • Xcode 15.3(以下のスクラップも同様)
okuzawatsokuzawats

http通信できない

numbersapi.comを叩きに行くと、以下のようなエラーが発生して通信できない。

networkd_settings_read_from_file Sandbox is preventing this process from reading networkd settings file at "/Library/Preferences/com.apple.networkd.plist", please add an exception.

解決策

Allow Arbitrary Loadsの有効化

Info.plistでApp Transport Security Settings > Allow Arbitrary Loadsを有効化すること。現状のXcodeでは、Info.plistがデフォルトでは作成されないため、Info.plistから作成する必要がある。

Outgoing Connections (Client)の有効化

Targets > Signing & Capabilities > App SandboxのNetwork内の項目、Outgoing Connections (Client)にチェックを入れて有効化する。

okuzawatsokuzawats

テストクラスからテスト対象クラスが"Cannot find type〜"になってしまう

テストを書く時にテストクラスからテスト対象クラスを参照できない。

解決策

テスト対象クラスのファイルインスペクタから、Target Membershipに"〜Tests"を追加する。

追記

@testable import を使えばよかったのかもしれない。

okuzawatsokuzawats

numberFact が"inaccessible due to internal protection level"になってしまう

ここまでのプロジェクトの作り方が悪かったのか...?FeatureにInjectした numberFact の可視性の問題が出てしまい、小一時間ほど悩んだ。仕方がないので、NumberFactClientに public を付けて歩いた。

public struct NumberFactClient {
    public var fetch: (Int) async throws -> String
}

extension NumberFactClient: DependencyKey {
    public static let liveValue = Self(
        // 略
}

extension DependencyValues {
    public var numberFact: NumberFactClient {
        // 略
}
このスクラップは2024/05/02にクローズされました