gpt4 book ai didi

ios - 不使用 Xcode 制作 Cocoa 应用程序,例如 : using VIM for editing and the Swift compiler

转载 作者:行者123 更新时间:2023-11-29 05:18:06 38 4
gpt4 key购买 nike

这种类型的问题多年前就出现过有关 Objective C 开发的问题,但我对 Swift 特别感兴趣。

目标:

使用 VIM 编写 Swift 源代码(使用 Swift 语法插件)并编译原生 cocoa App( bundle ),类似于从 Xcode 创建简单的 cocoa 应用程序。

动机:

通过相当慢且有时不可靠的互联网连接下载 8GB Xcode 应用程序,再加上“更新时无法打开 Xcode”消息,这意味着我有几天时间来享受无 Xcode 的体验。

次要动机:

有时 Xcode 似乎在幕后执行隐藏的“魔法”,我总是打算深入研究“Xcode 真正在做什么”与“应用程序中有多少是框架与 Xcode/编译器魔法”。

其中有许多子主题,例如:当我从各种来源下载较旧的示例项目时,Xcode 说 - 该项目需要使用较旧版本的 Xcode 迁移到较新版本的 Swift您不再需要迁移它。然而,这些项目主要是源代码和资源,当我构建一个空项目并复制源代码和资源时,它们通常可以正常工作(一旦修复了一些语法错误),这让我很好奇这些破坏交易的不兼容性是什么确实是。

我决定调查此问题的一种方法是:

  1. 使用 VIM 编辑所有需要的文件
  2. 用编程生成的 UI 替换 xib/nib 文件(我对这部分很满意)
  3. 使用 Swift 编译器编译 cocoa 应用程序包,从而得出:
  4. 为 Xcode 项目创建的哪些文件仅与内部 Xcode 事件相关,哪些(以及什么)成为编译器指令(以及如何)。

进展:

我创建了一个默认的 cocoa mac 应用程序,它显示一个空窗口。这将创建以下项目文件:

basicProject/basicProject/AppDelegate.swift
basicProject/basicProject/basicProject.entitlements
basicProject/basicProject/Info.plist
basicProject/basicProject/ViewController.swift
basicProject/basicProject/Assets.xcassets/Contents.json
basicProject/basicProject/Assets.xcassets/AppIcon.appiconset/Contents.json
basicProject/basicProject/Base.lproj/Main.storyboard
basicProject/basicProject.xcodeproj/project.pbxproj
basicProject/basicProject.xcodeproj/xcuserdata/username.xcuserdatad/xcschemes/xcschememanagement.plist
basicProject/basicProject.xcodeproj/project.xcworkspace/contents.xcworkspacedata
basicProject/basicProject.xcodeproj/project.xcworkspace/xcuserdata/username.xcuserdatad/UserInterfaceState.xcuserstate
basicProject/basicProject.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist

在构建目录的顶层,我有:

someXcodeWorkDirectory/scm.plist
someXcodeWorkDirectory/OpenQuickly-ReferencedFrameworks.index-v1
someXcodeWorkDirectory/Logs
someXcodeWorkDirectory/TextIndex
someXcodeWorkDirectory/Index
someXcodeWorkDirectory/Build
someXcodeWorkDirectory/info.plist

我没有全部列出,因为这个空窗口项目大约有 1,800 个文件。

一些例子是:

./Index/DataStore/v5/records/61/NSHTTPCookieStorage.h-SNU4K7QOIQ61
./Index/DataStore/v5/records/61/mach_voucher_types.h-ZENRRUWBXU61
./Index/DataStore/v5/records/XH/SCSITaskLib.h-2051VDYD45GXH
./Index/DataStore/v5/records/XH/SCSICmds_REPORT_LUNS_Definitions.h-2H7QJ9X9DMJXH
./Index/DataStore/v5/records/21/NSResponder.h-3G5XCM1YTXX21
./Index/DataStore/v5/records/4D/NSBezierPath.h-2W852T4P4GT4D
./Index/DataStore/v5/records/4D/IOHIDLibObsolete.h-38UUUALWPN94D
./Build/Intermediates.noindex/basicProject.build/Debug/basicProject.build/all-product-headers.yaml
./Build/Intermediates.noindex/basicProject.build/Debug/basicProject.build/basicProject-all-target-headers.hmap
./Build/Intermediates.noindex/basicProject.build/Debug/basicProject.build/basicProject.hmap

我在寻找什么:

  • 对这 1,800 个文件的作用的一般说明,例如它们是 Xcode 生成的还是编译器/工具链生成的(例如:编译器是否生成这 1800 个文件,以及从广义上讲,为什么生成 SCSICmds?)
  • 任何指向适当引用文献的链接
  • 任何类似事件的链接
  • 有关如何处理/完成任务的任何指导/智慧/直觉。

最佳答案

一个好的资源是Building from the Command Line: Technical Note 2339 . Xcode 所做的一切都是在命令行上完成的,您可以通过“报告导航器”看到这一点。您应该首先遵循 Apple 的文档来使用 Xcode 构建应用程序,因为有很多东西需要学习,并且 Apple 是基于您将使用 Xcode 的假设来解释这一切的。然后您可以在报告导航器中检查 Xcode 的命令。例如,如果您不使用 Xcode 的自动签名,则 CodeSigning 会很复杂。这就是他们制作该功能的原因。如果您手动生成目标包,这将很棘手,您需要成为代码签名方面的专家才能正确生成。

我理解您对彻底性的渴望,但我建议您重新审视一下您的目标。例如,如果您想以编程方式生成 UI,那么只需通过您在 Xcode 项目中编写的代码即可完成此操作,但不要使用 UI 生成器。如果你这样做是因为你想留在你喜欢的开发环境中,而不是学习 XCode,那么我认为它不会起作用。我认为 Xcode 应用程序命令行开发的主要用例是 devops 和构建测试工作,您需要在预先存在的企业构建/测试工具中运行内容。

也许最简单的事情就是像其他人一样使用 Xcode,然后在您喜欢的编辑器中编辑 Swift/Objective-C/C/C++ 文件,然后使用 XCode 完成其余的工作?用于 Swift 开发的最新、最流行的 Vim 包似乎是 https://github.com/keith/swift.vim .还有一个插件可以让 Xcode 使用 Vim 键绑定(bind),https://github.com/XVimProject/XVim2 ,尽管它是真正的 Vim 开发的一个发育不良的替代品。

关于ios - 不使用 Xcode 制作 Cocoa 应用程序,例如 : using VIM for editing and the Swift compiler,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58967181/

38 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com