如何在Xcode 14.1中成功编译开源Apple macOS国际象棋源码
完整编译运行macOS Chess源码(369-408版本区间)的步骤及错误修复
先确认:你提到的macOS Chess确实是基于Objective-C编写,底层对接sjeng这个C语言国际象棋引擎,这点没错。
下面是能成功编译运行的完整步骤,以及针对你遇到的build-book脚本错误的具体修复方案:
一、前期准备
- 使用Xcode 14.1,确保已配置有效的Apple开发者账号
- 下载369-408版本区间的Chess源码
二、项目基础配置修改
- 注释
Chess.xcconfig文件中的所有#include行,避免系统配置冲突 - 删除
Chess.entitlements文件中的com.apple.private.tcc.allow权限项,移除私有权限依赖 - 修改Bundle标识符:将默认的
com.apple.Chess改为自定义值(比如com.yourdomain.CustomChess) - 在Xcode中为项目配置对应开发者账号的描述文件,确保签名配置正常
三、修复sjeng引擎C99编译错误
针对Implicit declaration of function is invalid in C99错误:
- 定位到报错的C代码文件,在文件顶部添加缺失函数的声明(比如报错函数是
foo(),就补加int foo();,对应实际返回值类型) - 或调整代码顺序,将函数定义移到调用语句之前
四、解决build-book脚本核心错误
这个build-book脚本用于生成国际象棋开局库文件nbook.db,依赖编译完成的sjeng.ChessEngine可执行文件。你遇到的错误是脚本找不到该可执行文件,修复步骤如下:
单独编译sjeng引擎
- 在Xcode项目导航器中选中
sjeng.ChessEngine目标 - 点击Xcode顶部的「Build」按钮,确保该目标编译完成,产物会生成在
DerivedData/[项目名]/Build/Products/Development/目录下 - 验证路径:手动打开该目录,确认
sjeng.ChessEngine存在
- 在Xcode项目导航器中选中
修改build-book脚本路径
- 打开项目中的
build-book脚本文件 - 找到
SJENG=/Users/.../sjeng.ChessEngine这一行,替换为你刚才验证的实际路径 - 保存脚本后,重新执行编译
- 打开项目中的
备选方案:手动生成开局库并添加到项目
- 打开终端,进入Chess源码目录
- 执行编译好的sjeng引擎路径+脚本命令:
/path/to/your/sjeng.ChessEngine < nbook.pgn > nbook.db - 将生成的
nbook.db拖入Xcode项目的资源目录,确保被添加到目标的Copy Files阶段 - 在Xcode的Build Phases中,找到执行
make nbook.db的External Build Tool步骤,禁用该步骤
五、编译运行
- 选中Chess主目标,选择Mac真机或兼容的模拟器作为运行目标
- 点击Xcode的「Run」按钮,完成编译后即可启动Chess游戏
内容的提问来源于stack exchange,提问作者Nerdy Bunz
相关产品推荐
相关产品推荐

