iOS Carthage报错‘project has no shared schemes’的含义与解决方案问询
1. 错误到底是什么意思?
Xcode里的scheme是用来定义编译、运行、测试等整套构建流程的配置集合。而“共享scheme”是指被标记为对外可见的scheme——默认情况下,很多项目的scheme是私有的,只有项目开发者本地能看到。当Carthage、xcodebuild这类自动化工具尝试访问项目的scheme时,如果找不到任何被共享的配置,就会抛出这个错误,说白了就是工具没法识别到项目里能用来自动化构建的公开scheme。
2. xcodebuild -list -project Whatever.xcodeproj能创建共享scheme吗?
不行哦,这个命令的作用仅仅是列出项目里已经存在的共享scheme,完全没有创建或修改scheme的能力。要创建共享scheme,必须手动在Xcode里操作:
- 打开对应的
.xcodeproj文件 - 点击顶部菜单栏的
Product > Scheme > Manage Schemes - 在弹出的窗口里,找到你需要的目标scheme,勾选右侧的
Shared选项 - 保存后,你会看到项目目录下多出
xcshareddata/xcschemes文件夹,里面就是共享的scheme配置文件
3. Carthage + React Native 场景下的解决办法
你说已经把React Native加入Cartfile,执行carthage update后能在Checkouts目录看到它,但还是报错,手动跑xcodebuild -list也有问题——这其实是因为React Native的默认项目里,核心的scheme都没被标记为共享。按照下面的步骤来处理:
- 打开
Carthage/Checkouts/react-native/React/React.xcodeproj - 进入
Manage Schemes窗口,找到React、yoga这些核心的scheme,逐个勾选Shared选项 - 关闭Xcode,重新执行
carthage update --platform iOS(如果是iOS平台,其他平台替换成对应参数) - 如果还是有问题,可以试试清理Carthage缓存:删除
Carthage/Build和Carthage/Checkouts目录,然后执行carthage bootstrap重新拉取依赖
另外提一句:React Native对Carthage的支持确实不算友好,官方更推荐用CocoaPods来管理依赖,如果后续还是碰到各种奇怪的问题,不妨考虑切换到CocoaPods试试。
内容的提问来源于stack exchange,提问作者Turnipdabeets
相关产品推荐
相关产品推荐

