iOS-Tuist外部依赖fetch与generate报错问题求助
Tuist v2 依赖配置问题排查与解决
环境与依赖配置
使用Tuist v2.7,通过Dependencies.swift管理项目外部依赖,配置代码如下:
import ProjectDescription let dependencies = Dependencies( carthage: [], swiftPackageManager: [ .package(url: "https://github.com/onevcat/Kingfisher", .upToNextMajor(from: "7.3.2")), .package(url: "https://github.com/pointfreeco/swift-composable-architecture", .upToNextMajor(from: "0.40.2")), .package(url: "https://github.com/stripe/stripe-ios", .upToNextMajor(from: "22.8.1")), .package(url: "https://github.com/segmentio/analytics-ios", .upToNextMajor(from: "4.1.6")), .package(url: "https://github.com/OneSignal/OneSignal-XCFramework", .upToNextMajor(from: "3.11.2")), .package(url: "https://github.com/AppsFlyerSDK/segment-appsflyer-ios", .upToNextMajor(from: "6.8.1")), .package(url: "https://github.com/newrelic/newrelic-ios-agent-spm", .upToNextMajor(from: "7.3.8")), .package(url: "https://github.com/iterable/swift-sdk", .upToNextMajor(from: "6.4.7")), .package(url: "https://github.com/kishikawakatsumi/KeychainAccess", .upToNextMajor(from: "4.2.2")), .package(url: "https://github.com/airbnb/lottie-ios", .upToNextMajor(from: "3.4.3")), .package(url: "https://github.com/pusher/pusher-websocket-swift", .upToNextMajor(from: "10.1.1")), .package(url: "https://github.com/Juanpe/SkeletonView", .upToNextMajor(from: "1.30.2")), .package(url: "https://github.com/persona-id/inquiry-ios-2", .upToNextMajor(from: "2.4.0")), .package(url: "https://github.com/gymshark/ios-stack-kit", .upToNextMajor(from: "1.2.0")) ], platforms: [.iOS] )
依赖引用实现
通过扩展TargetDependency简化依赖引用,代码如下:
extension TargetDependency { static let oneSignal = TargetDependency.external(name: "OneSignal-XCFramework") static let kingFisher = TargetDependency.external(name: "Kingfisher") static let skeletonView = TargetDependency.external(name: "SkeletonView") static let pusher = TargetDependency.external(name: "pusher-websocket-swift") static let lottie = TargetDependency.external(name: "lottie-ios") static let iterable = TargetDependency.external(name: "swift-sdk") static let segment = TargetDependency.external(name: "analytics-ios") static let appsFlayer = TargetDependency.external(name: "segment-appsflyer-ios") static let stripe = TargetDependency.external(name: "stripe-ios") static let tca = TargetDependency.external(name: "swift-composable-architecture") static let stackKit = TargetDependency.external(name: "ios-stack-kit") static let newRelic = TargetDependency.external(name: "newrelic-ios-agent-spm") static let keychain = TargetDependency.external(name: "KeychainAccess") static let persona = TargetDependency.external(name: "inquiry-ios-2") }
在Feature模块中引用依赖:
public static func joinFeature() -> (source: Self, test: Self) { frameworkBuilder( name: .feature(.joinFeature), dependencies: [ .target(.feature(.alert)), .target(.designSystem), .target(.scenes), .target(.clientService), .tca, .kingFisher ], hasResources: true, product: .framework, folder: folder ) }
框架构建工具函数:
static func frameworkBuilder( name: TargetName, headers: ProjectDescription.Headers? = nil, dependencies: [TargetDependency] = [], settings: ProjectDescription.Settings? = nil, hasResources: Bool = false, product: Product = .framework, folder: String = "" ) -> (source: Target, test: Target) { return ( source: Target( name: name.name, platform: .iOS, product: product, bundleId: "\(name.name).framework", deploymentTarget: .iOS(targetVersion: "14.0", devices: [.ipad, .iphone]), infoPlist: .default, sources: ["Targets/\(folder)\(name.name)/Sources/**"], resources: hasResources ? ["Targets/\(folder)\(name.name)/Resources/**"] : [], headers: headers, dependencies: dependencies, settings: settings ), test: Target( name: name.name + "Tests", platform: .iOS, product: .unitTests, bundleId: "\(name.name).framework.test", infoPlist: .default, sources: ["Targets/\(folder)\(name.name)/Tests/**"], dependencies: [.target(name: name.name)] ) ) }
遇到的问题
- 问题1:拉取依赖时报错
执行tuist dependencies fetch,依赖拉取成功但抛出错误:
The dependency kind remoteSourceControl is not supported. Consider creating an issue using the following link: https://github.com/tuist/tuist/issues/new/choose
- 问题2:生成项目时报错
拉取依赖后执行tuist generate,报错:
`OneSignal-XCFramework` is not a valid configured external dependency Consider creating an issue using the following link: https://github.com/tuist/tuist/issues/new/choose
问题解决(更新)
经排查,问题根源在于TargetDependency.external中使用的依赖名称错误。正确的依赖名称可以从项目生成的graph.json文件中获取。
内容的提问来源于stack exchange,提问作者Olcay Ertaş
相关产品推荐
相关产品推荐

