fix(build): 手动 patch SPM 链接 + 清孤儿文件让 Task 6 真正可编译
经过多轮 Xcode UI / SPM 解析失败,本 commit 合并以下修复: pbxproj 手动 patch: - 删除孤立的 mlx-swift XCRemoteSwiftPackageReference(版本 0.31.3 与 mlx-swift-examples 2.29.1 锁定的 0.29.1..<0.30.0 冲突) - 在 体己 target 加入 MLXLLM + MLXLMCommon 两个 product 依赖,绑定到 mlx-swift-examples 包。补齐 PBXBuildFile + XCSwiftPackageProductDependency + packageProductDependencies + Frameworks build phase 4 处条目 LLMSession.swift 简化: - 去掉 import MLX(避免需要把 mlx-swift transitive MLX/MLXFast/MLXNN 等 5 个 product 也链上,大幅简化依赖) - 移除 MLX.GPU.synchronize() 调用——研究笔记里建议的尾部同步对 AsyncStream 数据正确性无影响,省一份直接 import 依赖 清理孤儿文件: - 体己/AI/Theme.swift 和 体己/AI/TabBar.swift 是早期混乱中由出错的 fix subagent 创建的占位 stub,跟 DesignSystem/Tokens.swift 重复声明 enum Tj,导致 invalid redeclaration 附:Package.resolved 由 xcodebuild SPM resolve 生成,加入版本控制确保 团队成员锁定相同版本图。 ** BUILD SUCCEEDED ** 验证通过(iPhone 17 Pro simulator)。 Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -6,6 +6,11 @@
|
|||||||
objectVersion = 77;
|
objectVersion = 77;
|
||||||
objects = {
|
objects = {
|
||||||
|
|
||||||
|
/* Begin PBXBuildFile section */
|
||||||
|
FEED000000000000DEAD0001 /* MLXLLM in Frameworks */ = {isa = PBXBuildFile; productRef = FEED000000000000DEAD0003 /* MLXLLM */; };
|
||||||
|
FEED000000000000DEAD0002 /* MLXLMCommon in Frameworks */ = {isa = PBXBuildFile; productRef = FEED000000000000DEAD0004 /* MLXLMCommon */; };
|
||||||
|
/* End PBXBuildFile section */
|
||||||
|
|
||||||
/* Begin PBXContainerItemProxy section */
|
/* Begin PBXContainerItemProxy section */
|
||||||
5E463D092FC403BC0089145B /* PBXContainerItemProxy */ = {
|
5E463D092FC403BC0089145B /* PBXContainerItemProxy */ = {
|
||||||
isa = PBXContainerItemProxy;
|
isa = PBXContainerItemProxy;
|
||||||
@@ -52,6 +57,8 @@
|
|||||||
isa = PBXFrameworksBuildPhase;
|
isa = PBXFrameworksBuildPhase;
|
||||||
buildActionMask = 2147483647;
|
buildActionMask = 2147483647;
|
||||||
files = (
|
files = (
|
||||||
|
FEED000000000000DEAD0001 /* MLXLLM in Frameworks */,
|
||||||
|
FEED000000000000DEAD0002 /* MLXLMCommon in Frameworks */,
|
||||||
);
|
);
|
||||||
runOnlyForDeploymentPostprocessing = 0;
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
};
|
};
|
||||||
@@ -112,6 +119,8 @@
|
|||||||
);
|
);
|
||||||
name = "体己";
|
name = "体己";
|
||||||
packageProductDependencies = (
|
packageProductDependencies = (
|
||||||
|
FEED000000000000DEAD0003 /* MLXLLM */,
|
||||||
|
FEED000000000000DEAD0004 /* MLXLMCommon */,
|
||||||
);
|
);
|
||||||
productName = "体己";
|
productName = "体己";
|
||||||
productReference = 5E463CF92FC403BB0089145B /* 体己.app */;
|
productReference = 5E463CF92FC403BB0089145B /* 体己.app */;
|
||||||
@@ -195,6 +204,9 @@
|
|||||||
);
|
);
|
||||||
mainGroup = 5E463CF02FC403BB0089145B;
|
mainGroup = 5E463CF02FC403BB0089145B;
|
||||||
minimizedProjectReferenceProxies = 1;
|
minimizedProjectReferenceProxies = 1;
|
||||||
|
packageReferences = (
|
||||||
|
5E9A1F872FC43C9A0097DD29 /* XCRemoteSwiftPackageReference "mlx-swift-examples" */,
|
||||||
|
);
|
||||||
preferredProjectObjectVersion = 77;
|
preferredProjectObjectVersion = 77;
|
||||||
productRefGroup = 5E463CFA2FC403BB0089145B /* Products */;
|
productRefGroup = 5E463CFA2FC403BB0089145B /* Products */;
|
||||||
projectDirPath = "";
|
projectDirPath = "";
|
||||||
@@ -615,6 +627,30 @@
|
|||||||
defaultConfigurationName = Release;
|
defaultConfigurationName = Release;
|
||||||
};
|
};
|
||||||
/* End XCConfigurationList section */
|
/* End XCConfigurationList section */
|
||||||
|
|
||||||
|
/* Begin XCRemoteSwiftPackageReference section */
|
||||||
|
5E9A1F872FC43C9A0097DD29 /* XCRemoteSwiftPackageReference "mlx-swift-examples" */ = {
|
||||||
|
isa = XCRemoteSwiftPackageReference;
|
||||||
|
repositoryURL = "https://github.com/ml-explore/mlx-swift-examples";
|
||||||
|
requirement = {
|
||||||
|
kind = upToNextMajorVersion;
|
||||||
|
minimumVersion = 2.29.1;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
/* End XCRemoteSwiftPackageReference section */
|
||||||
|
|
||||||
|
/* Begin XCSwiftPackageProductDependency section */
|
||||||
|
FEED000000000000DEAD0003 /* MLXLLM */ = {
|
||||||
|
isa = XCSwiftPackageProductDependency;
|
||||||
|
package = 5E9A1F872FC43C9A0097DD29 /* XCRemoteSwiftPackageReference "mlx-swift-examples" */;
|
||||||
|
productName = MLXLLM;
|
||||||
|
};
|
||||||
|
FEED000000000000DEAD0004 /* MLXLMCommon */ = {
|
||||||
|
isa = XCSwiftPackageProductDependency;
|
||||||
|
package = 5E9A1F872FC43C9A0097DD29 /* XCRemoteSwiftPackageReference "mlx-swift-examples" */;
|
||||||
|
productName = MLXLMCommon;
|
||||||
|
};
|
||||||
|
/* End XCSwiftPackageProductDependency section */
|
||||||
};
|
};
|
||||||
rootObject = 5E463CF12FC403BB0089145B /* Project object */;
|
rootObject = 5E463CF12FC403BB0089145B /* Project object */;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,69 @@
|
|||||||
|
{
|
||||||
|
"originHash" : "6b8265ebd61c6fdfca835dd1f90f17439ca9abc5c11a8b7b5db8790be0349e4d",
|
||||||
|
"pins" : [
|
||||||
|
{
|
||||||
|
"identity" : "gzipswift",
|
||||||
|
"kind" : "remoteSourceControl",
|
||||||
|
"location" : "https://github.com/1024jp/GzipSwift",
|
||||||
|
"state" : {
|
||||||
|
"revision" : "731037f6cc2be2ec01562f6597c1d0aa3fe6fd05",
|
||||||
|
"version" : "6.0.1"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"identity" : "mlx-swift",
|
||||||
|
"kind" : "remoteSourceControl",
|
||||||
|
"location" : "https://github.com/ml-explore/mlx-swift",
|
||||||
|
"state" : {
|
||||||
|
"revision" : "072b684acaae80b6a463abab3a103732f33774bf",
|
||||||
|
"version" : "0.29.1"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"identity" : "mlx-swift-examples",
|
||||||
|
"kind" : "remoteSourceControl",
|
||||||
|
"location" : "https://github.com/ml-explore/mlx-swift-examples",
|
||||||
|
"state" : {
|
||||||
|
"revision" : "9bff95ca5f0b9e8c021acc4d71a2bbe4a7441631",
|
||||||
|
"version" : "2.29.1"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"identity" : "swift-collections",
|
||||||
|
"kind" : "remoteSourceControl",
|
||||||
|
"location" : "https://github.com/apple/swift-collections.git",
|
||||||
|
"state" : {
|
||||||
|
"revision" : "fea17c02d767f46b23070fdfdacc28a03a39232a",
|
||||||
|
"version" : "1.5.1"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"identity" : "swift-jinja",
|
||||||
|
"kind" : "remoteSourceControl",
|
||||||
|
"location" : "https://github.com/huggingface/swift-jinja.git",
|
||||||
|
"state" : {
|
||||||
|
"revision" : "0b67ecb79139f6addef8699eff3622808aa6c7dc",
|
||||||
|
"version" : "2.3.6"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"identity" : "swift-numerics",
|
||||||
|
"kind" : "remoteSourceControl",
|
||||||
|
"location" : "https://github.com/apple/swift-numerics",
|
||||||
|
"state" : {
|
||||||
|
"revision" : "0c0290ff6b24942dadb83a929ffaaa1481df04a2",
|
||||||
|
"version" : "1.1.1"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"identity" : "swift-transformers",
|
||||||
|
"kind" : "remoteSourceControl",
|
||||||
|
"location" : "https://github.com/huggingface/swift-transformers",
|
||||||
|
"state" : {
|
||||||
|
"revision" : "a2e184dddb4757bc943e77fbe99ac6786c53f0b2",
|
||||||
|
"version" : "1.0.0"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"version" : 3
|
||||||
|
}
|
||||||
@@ -1,5 +1,4 @@
|
|||||||
import Foundation
|
import Foundation
|
||||||
import MLX
|
|
||||||
import MLXLLM
|
import MLXLLM
|
||||||
import MLXLMCommon
|
import MLXLMCommon
|
||||||
|
|
||||||
@@ -65,10 +64,10 @@ actor LLMSession {
|
|||||||
break
|
break
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// 取消路径无需同步,避免浪费 GPU 阻塞
|
// 注:研究笔记里曾建议尾部 MLX.GPU.synchronize() 以确保
|
||||||
if !Task.isCancelled {
|
// GPU 操作全部完成。但 AsyncStream 已经 yield 真实解码后的
|
||||||
MLX.GPU.synchronize()
|
// 文字,GPU 是否完全空闲不影响数据正确性。去掉此调用同时省
|
||||||
}
|
// 一份 transitive import MLX 的依赖,简化 SPM 链接。
|
||||||
}
|
}
|
||||||
continuation.finish()
|
continuation.finish()
|
||||||
} catch {
|
} catch {
|
||||||
|
|||||||
Reference in New Issue
Block a user