让 Xcode 见鬼去

2023-10-30 06:13:17 +08:00
Jat001  Jat001

为什么?

Xcode 的配置文件虽然是纯文本,但正常人基本看不懂。也没有一个工具可以在不丢失任何信息的情况下把 project.pbxproj 解析成人类可读的格式。

最近开发 Flutter ,发现官方提供的 macOS 和 iOS 模版都是基于 Xcode 的,也就是说如果想要查看或修改构建配置,必须打开 Xcode ,这显然是可以接受的 (unacceptable)。

如何拒绝打开 Xcode

Xcodeproj 可以把 project.pbxproj 解析成 YAML 格式,在 Flutter 的 macOS 模版上试了下,构建相关的信息基本没丢。

但 Flutter 自身仍要借助 Xcode 来构建,所以只能看是不行的,必须有工具重新生成 project.pbxproj

XcodeGen 虽然可以通过 YAML 生成 project.pbxproj,但它的 spec 跟 Xcodeproj 解析出来的 YAML 完全不同。

目前只能通过对照 Xcodeproj 解析出来的 YAML 和 XcodeGen 的 spec 人工完成。

示例

我花了两天时间把 Flutter macOS 模版里的 project.pbxproj 解析成了 YAML ,简单改改就能直接用了。

https://github.com/jat001/ddns4cdn-aio/blob/main/src/macos/project.yml

另外还有一份通过 Swift 调用 staic library (.a) 或 shared library (.so) 的示例,仍然无需打开 Xcode 就可编译。

https://github.com/jat001/ddns4cdn/tree/main/src/cgo/swift

这个项目其实是 Go 写的,通过 cgo 实现了用 C, C++, Objective-C 和 Swift 调用 Go 。当然,入参只有一个字符串,毕竟类型转换很麻烦,复杂的调用不如直接用目标语言重写。

8393 次点击
所在节点   Xcode  Xcode
45 条回复
zongren
zongren
2023-10-31 14:32:25 +08:00
@Jat001 可以接受丢失一些信息呢?或者说在解决了 Xcodeproj 和 XcodeGen 的 yaml 格式不匹配的问题后,是否能丢失一些(不影响构建)信息的情况下完成 1 、转 yaml ; 2 、编辑 yaml ; 3 、生成 proj ; 4 、命令行打包的工作流?
Jat001
Jat001
2023-10-31 21:31:10 +08:00
@zeromake #39
swift 可以 debug 啊
https://marketplace.visualstudio.com/items?itemName=sswg.swift-lang
vscode 最大的贡献就是发明了 lsp ,只要按照协议开发对应的插件,就不需要编辑器专门支持

@zongren #41
1 就会丢,丢啥不确定,毕竟是封闭的配置文件,没有文档告诉你有什么参数
3 有可能随着 xcode 更新,有些参数废弃了,或者有些参数新增了
我觉得你还是自己试试看,装下也没多少时间,
zeromake
zeromake
2023-11-01 09:46:35 +08:00
@zongren @Jat001
metal 在 xcode 里调试方便啊,直接可以看到 shader 的输入和输出
snowasnow
snowasnow
2023-11-13 21:33:11 +08:00
zoharSoul
zoharSoul
340 天前
@lisongeee #16 新版本必须打开 xcode

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/986552

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX