ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Loop 贡献指南:从 Fork、Xcode 签名构建到提交 PR 的完整 macOS 开源协作流程

Loop 贡献指南:从 Fork、Xcode 签名构建到提交 PR 的完整 macOS 开源协作流程 桌面应用【免费下载链接】LoopWindow management made elegant.项目地址https://gitcode.com/GitHub_Trending/lo/Loop点击查看免费下载LoopWindow management made elegant是一款开源的 macOS 窗口管理应用通过径向菜单、键盘快捷键、Cycles 动作序列与 Stash 等特性简化窗口的移动、缩放与排列。本文以仓库根目录下的 CONTRIBUTING.md 为骨架完整讲解如何为 Loop 贡献代码、提交图标与参与本地化并结合仓库内的真实配置文件与源码CI 工作流、Issue 模板、Crowdin 配置、图标与本地化资源目录补充可验证的细节帮助你在 Fork → 构建 → 格式化 → 提交 PR 的全流程中少踩坑。贡献方向先想清楚你能做什么Loop 欢迎多种形式的贡献官方在 CONTRIBUTING.md 中列出的重点方向包括本地化Localisation为 Loop 添加你的语言或修正现有翻译中的语法错误与笔误。功能改进如果你有可以主动实现的想法或发现某处代码可以优化先提交 Issue 说明你想做什么获得维护者认可后再将改动推入 PR。图标IconsLoop 非常欢迎优秀图标做出团队认可的设计后它可能会被收录供所有用户使用。Bug 报告前往 Issues 标签页按引导模板提交你遇到的问题。需要注意的是Loop 对 AI 辅助贡献有严格政策。若计划在贡献中使用 AI 工具必须先阅读并遵守仓库根目录下的 AI_POLICY.md所有 AI 使用必须以任何形式披露说明使用的工具与辅助方式AI 辅助的 PR 必须由人类完整验证不允许任何 AI 生成的媒体内容图片、图表、音频、视频不允许未经人工编辑的批量 AI 输出。政策明确说明这不是反 AI而是要求使用者对输出负责。提交代码前的第一步Opening an issue在写任何代码之前维护者需要先理解你将要改动、新增或改进的范围这能避免你的工作与正在进行的其他改动冲突保证协作过程更顺畅。流程为创建一个 Issue清晰阐述你遇到的问题、要做的改动或改进。等待维护者回应如果被接受就可以开始动手了。Issue 通过后接下来就是标准的开源协作路径Fork 仓库 → 克隆到本地 → 在 Xcode 中构建 → 推送改动 → 提交 PR。Fork 与克隆把仓库变成你的Fork 仓库Fork 会在你的 GitHub 账户下创建 Loop 仓库的个人副本让你可以在不影响原项目的情况下自由修改。前往 Loop 仓库页面点击右上角的Fork按钮即可。Fork 成功后仓库上方会显示Loop forked from MrKai77/Loop克隆你的 Fork打开终端进入你希望存放代码的目录执行以下命令cd downloads # 或者你希望克隆 Loop 的任意目录 git clone https://github.com/{your-name}/Loop.git # 记得把 {your-name} 替换成你的真实 GitHub 用户名 # 例如https://github.com/MrKai77/Loop.git cd Loop open Loop.xcodeproj克隆完成后open Loop.xcodeproj会自动用 Xcode 打开工程工程文件位于仓库根目录的 Loop.xcodeproj。Loop 目前提供两个共享 SchemeLoop.xcscheme 与 Loop (GH ACTIONS).xcscheme.xcscheme)日常开发使用前者即可。Xcode 环境准备与签名还没有 Apple Developer 账户免费账户即可完成本地开发不需要付费开发者计划在 developer.apple.com 注册加入 Developer Program免费账户即可。安装 Xcode。在菜单栏点击Xcode → Preferences在打开的窗口中选择Accounts添加你的开发者账户。添加后账户会出现在左侧 Apple ID 列表中选中它。点击窗口底部的Manage Certificates...。在左下角点击图标选择Apple Development。当列表中新增Apple Development Certificates条目后点击Done关闭账户管理器。为 Loop 签名等待依赖全部解析完成通常最多几分钟。点击左侧文件浏览器顶部的Loop带 App Store 图标的那个项目条目。在右侧打开的面板顶部点击Signing Capabilities。在Signing下将Team下拉菜单切换为你的开发者 ID。在Signing → macOS下将Signing Certificate切换为Development。构建验证签名完成后即可构建按⌘R运行 Loop。如果构建成功会弹出提示要求授予 Loop 辅助功能Accessibility权限——只有当你改动的是与窗口移动或核心逻辑相关的代码时才需要开启如果是简单的代码改动则无需开启。这与仓库的实际实现一致Loop 的窗口控制依赖辅助功能 API参见 Extensions/AXUIElementExtensions.swift 与 AccessibilityManager.swiftCore 目录下的 LoopManager.swift 是核心调度入口。格式化与代码注释PR 能否通过的红线重要你必须安装 SwiftFormat。这是保证整个代码库格式一致的关键工具。提交 PR 时CI 会运行格式化校验格式不正确会被直接拒绝。本地提交前运行swiftformat .仓库中的 CI 工作流 .github/workflows/lint.yml 印证了这一点当 PR 触及**/*.swift、.swiftformat.yml或工作流文件时会在macos-latest上执行- name: SwiftFormat run: swiftformat --lint . --reporter github-actions-log即 CI 以--lint模式检查整个仓库的 Swift 文件格式并用github-actions-log报告器把问题直接反馈到 PR 检查中。除了格式所有代码必须包含完整的注释。良好的文档帮助其他贡献者理解代码并降低维护成本。CONTRIBUTING 给出的示例是/// Determines if two colors are similar based on a threshold. /// - Parameters: /// - color: The color to compare with the receiver. /// - threshold: The maximum allowed difference between color components. /// - Returns: A Boolean value indicating whether the two colors are similar. func isSimilar(to color: NSColor, threshold: CGFloat 0.1) - Bool { // Convert both colors to the RGB color space for comparison. guard let color1 usingColorSpace(.deviceRGB), let color2 color.usingColorSpace(.deviceRGB) else { return false } // Compare the red, green, and blue components of both colors. return abs(color1.redComponent - color2.redComponent) threshold abs(color1.greenComponent - color2.greenComponent) threshold abs(color1.blueComponent - color2.blueComponent) threshold }而下面这种一句话敷衍注释是不会被接受的// Compares to another and returns a boolean func isSimilar(to color: NSColor, threshold: CGFloat 0.1) - Bool { ... }从源码看Loop 也确实遵循这种文档注释 行内注释的规范例如 CGEventExtensions.swift、Window.swift 等核心文件都带有详尽的///注释。低质量贡献会被关闭虽然 Loop 感激所有人的兴趣但低质量 PR 可能被直接关闭。典型的低质量贡献包括只修正单个拼写或语法错误。改写某条已有的本地化字符串。添加或修改没有实际意义的单行注释。不影响逻辑、行为或可维护性的琐碎一行改动。对于这类小改动你前面提交的 Issue 通常就足够了——维护者会把这些小改进合并进更大的改动中。以独立 PR 形式提交反而会增加合并冲突风险、给团队带来额外工作。如何提交 PRXcode 顶部的代码编辑器区域有 integrate 选项你可以通过它推送也可以通过 CLI甚至用 VSCode 推送。推荐使用 CLI 方式# 将改动加入 git 暂存区 git add . # 用有意义的 message 提交 git commit -m Your detailed commit message # 提交时必须在开头使用以下 emoji # Bug 修复必须包含 bug emoji。 # ✨ 新增功能必须包含 star emoji。 # 本地化必须包含 globe emoji。 # 例如 # git commit -m ✨ Add wallpaper theming # 推送改动到你的 fork git push origin develop # 然后前往 GitHub进入你的 fork点击 Create pull request 按钮。 # 填写详情并提交 PR。 # 如果 PR 需要修改你必须以 Draft PR 形式推送。注意 commit message 的 emoji 约定是硬性要求Bug 修复用 、新增功能用 ✨、本地化用 。这也与仓库的模块划分相呼应主题/图标功能集中在 Theming 与 Accent Color 目录本地化字符串统一维护在 Localizable.xcstrings 中。提交图标用 Suggest new icon 模板Loop 非常欢迎图标仓库的 Assets.xcassets/App Icons 下已经有 Black Hole、Holo、Keycap、Rose Pine、Synthwave Sunset 等十余套图标。随着应用成长部分旧图标也可能被移除为新人让位不要气馁。提交方式前往 GitHub 的Issues标签页点击New issue再点击Suggest new icon按钮按引导流程提案。若被驳回你会收到反馈意见被否决也不是唯一机会可以带着更成熟的设计再次尝试。你不需要是专业设计师只需要在设计里捕捉到 Loop 的气质。仓库的 Issue 模板 .github/ISSUE_TEMPLATE/suggest-icon.yml 展示了需要填写的字段Icon Files必填直接拖拽.icon/.svg/.png资源或粘贴图标 URL同时附上创作图标的源文件或链接Figma、Sketch 等。Icon Name必填图标在 Loop 中显示的确切名称例如Black Hole。Concept Meaning选填说明图标的含义与价值。Preferred Social Media Handle选填希望出现在贡献名单中的社交账号留空则使用你的 GitHub 账号。Additional Context选填补充参考资料、实景 mockup 或相关讨论。Final Checks勾选建议用英文书写、确保提交的是图标而非图标需求、确认拥有资产版权、愿意根据反馈迭代设计。从代码结构看图标资源以.icon包形式组织在 Loop/Resources 下每个AppIcon-*.icon包含icon.json与设计源文件运行时由 Icon/IconManager.swift 加载并注册Icon/Icon.swift 定义图标模型供 Theming/IconConfiguration.swift 在设置界面中切换。因此投稿时尽量同时提供矢量源文件便于团队适配不同的应用图标尺寸16px1024px。本地化通过 Crowdin 参与翻译Loop 希望在每种语言中都能本地化。团队使用 Crowdin 进行快速、简便的翻译协作。开始翻译打开 Loop Crowdin 页面。点击Join the team按钮。用你的 GitHub 账号登录或注册。在页面顶部留言点击Request Access。等待账号通过审核。开始翻译如果你的语言没有列在 Crowdin 上不要慌——直接联系维护者或通过 Discord 沟通团队会帮你把语言加进去。翻译文件与 CI 的对应关系仓库的 Crowdin 配置 .github/crowdin.yml 展示了翻译覆盖的文件范围files: - source: Loop/Localizable.xcstrings translation: Loop/Localizable.xcstrings multilingual: true - source: Loop/en.lproj/InfoPlist.strings translation: Loop/%osx_code%/%original_file_name%也就是说翻译内容分为两类应用内界面字符串Loop/Localizable.xcstringsSwiftUI 的 String Catalog 格式采用多语言单文件模式。系统级描述字符串Loop/en.lproj/InfoPlist.stringsInfo.plist 相关文案按语言代码展开到各 lproj 目录。从仓库目录看Loop/下已存在 ar、de、en、es、fr、it、ja、ko、nl-BE、pl、pt-BR、ru、zh-Hans、zh-Hant 共 14 个语言目录。Crowdin 的上传/下载由 .github/workflows/crowdin-upload.yml 与 .github/workflows/crowdin-download.yml 两个工作流自动完成翻译结果会定期回写到仓库因此你不必手动处理文件合并。常见问题与维护者期望需要帮助随时可以通过 CONTRIBUTING.md 中给出的 Discord 频道联系或在 GitHub 上创建 Issue。Contributing 的最终目的是协作先开 Issue、等确认、再动手能最大化避免重复劳动小改动交给维护者合并大改动走完整 PR 流程并遵守 SwiftFormat 与注释规范。AI 辅助场景务必遵守 AI_POLICY.md 的披露与人工验证要求AI 生成的代码若未经测试或针对你无法运行的环境编写PR 可能被直接关闭。掌握了 Fork、Xcode 签名、SwiftFormat 格式化、emoji 提交约定、图标模板与 Crowdin 翻译流程你就可以放心地成为 Loop 生态的贡献者了。如果你更想先体验产品本身README 中的 Installation 章节Homebrewbrew install loop或下载最新 Release与 Usage 章节触发键、键盘快捷键、loop://URL Scheme 脚本化也值得一读。赞分享桌面应用【免费下载链接】LoopWindow management made elegant.项目地址https://gitcode.com/GitHub_Trending/lo/Loop点击查看免费下载相关推荐Retrofit 贡献指南从 Fork 提交 PR 到构建验证与 CLA 签署的完整流程Retrofit 贡献指南从 Fork 提交 PR 到构建验证与 CLA 签署的完整流程 Retrofit 是一款面向 Android 与 JVM 的类型安全网络API设计WXT 贡献指南从 Fork、提 PR 到随主仓库发版的完整开源协作流程WXT 贡献指南从 Fork、提 PR 到随主仓库发版的完整开源协作流程 本指南基于 WXT 官方仓库根目录下的 CONTRIBUTING.md https:前端开发工具构建工具插件系统Duix.Avatar 数字人本地部署指南10 秒视频克隆专属数字人与声音Duix.Avatar 数字人本地部署指南10 秒视频克隆专属数字人与声音 Duix.Avatar 是一款开源数字人工具包全程本地运行提交一段 10 秒视人工智能AI 应用数字人媒体生成桌面应用上一篇解决90%加载耗时vue-vben-admin国际化按需加载全攻略下一篇如何通过Plyr移动端手势控制实现滑动调节音量和进度创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表