TCA(The Composable Architecture)のチュートリアルでのハマりどころ
import ComposableArchitectureがNo Such Moduleになる
Swift Package ManagerでTCAへの依存を追加したところ、 import ComposableArchitecture
が
No Such Module
というエラーとなってビルドできない。
解決策
Xcodeのメニューから、Product > Clean Build Folderを行い、Xcodeを再起動した。
あとから調べると、別の解決方法もあったよう。こちらの解決方法の方が正しいかもしれない。
環境
- Xcode 15.3(以下のスクラップも同様)
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)にチェックを入れて有効化する。
テストクラスからテスト対象クラスが"Cannot find type〜"になってしまう
テストを書く時にテストクラスからテスト対象クラスを参照できない。
解決策
テスト対象クラスのファイルインスペクタから、Target Membershipに"〜Tests"を追加する。
追記
@testable import
を使えばよかったのかもしれない。
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 {
// 略
}