新闻详情

新闻详情

首页 / 资讯中心 / 详情

Mac Mouse Fix 的 XCStringsDummyApp:用哑元 Target 让 Xcode 导出不打包进 App 的 .xcstrings 文件

发布时间:2026/10/2 8:19:03来源:尧图网络
Mac Mouse Fix 的 XCStringsDummyApp:用哑元 Target 让 Xcode 导出不打包进 App 的 .xcstrings 文件
桌面应用系统编程【免费下载链接】mac-mouse-fixMac Mouse Fix - Make Your $10 Mouse Better Than an Apple Trackpad!项目地址https://gitcode.com/GitHub_Trending/ma/mac-mouse-fix点击查看免费下载导读XCStringsDummyApp 是 Mac Mouse Fix 仓库中一个特殊的“哑元”工程 Target它本身没有任何业务功能存在的唯一目的是让 Xcode 的本地化导出流程Product Export Localizations...与xcodebuild -exportLocalizations能够导出那些被团队手动维护、又不想编译进任何 .app bundle的.xcstrings文件。阅读本文后你将理解 Xcode 导出本地化的成员规则、这个哑元 Target 的完整搭建思路与关键构建设置并能把同样的技巧复用到自己的多 Target 项目中。一、为什么需要 XCStringsDummyApp一个被 Xcode 规则逼出来的工程技巧在 Mac Mouse Fix 项目中本地化资源的管理方式很特别开发团队手动维护.xcstrings文件而非依赖 Xcode 自动抽取这些文件统一存放在 Localization/Strings/ 下例如Readme.xcstrings、Shared.xcstrings、Acknowledgements.xcstrings、Support/Support.xcstrings等。问题出在 Xcode 的导出规则上。正如 XCStringsDummyApp/Readme.md 所记载的When exporting .xcstrings files into an .xcloc file usingProduct Export Localizations...orxcodebuild -exportLocalizations, Xcode will only export .xcstrings files that are members of at least one target.也就是说Xcode 导出本地化生成.xcloc本地化包时只会导出“至少属于一个 target 成员”的.xcstrings文件。一个没有被任何 target 引用的.xcstrings即使躺在工程目录里也会在导出时被静默忽略。由此产生了两难如果把这些.xcstrings添加为某个正常 App Target如 Mac Mouse Fix 主应用的成员它们确实会被导出但同时也会被编译进最终的.appbundleReadme 中原话是 “It will be included in the compiled .app bundle (I think)”但对其中一部分.xcstrings例如用于生成 Markdown 帮助文档、由脚本或工具消费的字符串表团队明确不希望它们出现在任何已编译的 App bundle里。XCStringsDummyApp 正是为打破这个两难而存在的把这类.xcstrings挂到 XCStringsDummyApp 这个专用 Target 名下从而“骗过”Xcode 的成员检查让它们可以被导出却不会被装进任何真实产品 bundle。二、XCStringsDummyApp 的组成一个最小化的哑元工程XCStringsDummyApp 目录下的文件全部是标准 macOS App 工程的最小骨架逐一看一眼就知道它有多“空”文件作用main.m仅调用NSApplicationMain(argc, argv)空白的autoreleasepool占位不初始化任何逻辑AppDelegate.h空壳的NSApplicationDelegate协议实现声明AppDelegate.mapplicationDidFinishLaunching:与applicationWillTerminate:均为空实现仅返回YES支持安全恢复状态MainMenu.xib承载NSMainNibFile所需的主菜单界面文件XCStringsDummyApp-Info.plist手写的 Info.plist只保留启动必需键xcstrings_dummy_app.entitlements极简沙盒权限仅开启 App Sandbox 与用户选择的只读文件访问从 Mouse Fix.xcodeproj/project.pbxproj 可以看到这个 Target 的产品标识为com.nuebling.xcstrings-dummy-appPRODUCT_BUNDLE_IDENTIFIER产物为XCStringsDummyApp.app部署目标MACOSX_DEPLOYMENT_TARGET 15.0。整个工程没有任何可运行的行为——它从不被用户真正使用只是为了“挂载”字符串表而存在。三、关键构建设置两个开关决定导出行为的成败哑元 Target 能否正常工作取决于 pbxproj 中 Debug/Release 两套构建配置里的几个开关见 project.pbxproj 的 XCStringsDummyApp 构建配置段1.LOCALIZATION_EXPORT_SUPPORTED NO这是最核心的开关。置为NO后Xcode 在导出本地化时不会把这个 Target 的常规界面本地化资源如MainMenu.xib对应的 strings纳入.xcloc从而保证哑元 Target 只贡献我们想导出的.xcstrings不会夹带无关的本地化内容。2.SWIFT_EMIT_LOC_STRINGS YES保留这个开关可以让 Xcode 在导出时仍然扫描并导出该 Target 名下挂载的字符串资源。它与LOCALIZATION_EXPORT_SUPPORTED NO配合形成“参与导出、但不导出界面资源”的精确行为。此外该 Target 还启用了ENABLE_HARDENED_RUNTIME YES、自动签名CODE_SIGN_STYLE Automatic等常规设置保证它在任何 scheme 下都能被正常编译——因为导出前 Xcode 会对涉及的 Target 执行构建。四、为什么要用 Objective-C 写构建时间是第一考量Readme 中明确写道We made this objc for hopefully faster build times.从源码看这个结论很直观main.m 与 AppDelegate.m 全部是纯 Objective-C 的空实现不包含任何 Swift 代码。因为本地化导出通常要先构建参与导出的 TargetSwift 工程的编译类型检查、模块生成、SwiftUI 预览编译等成本远高于同规模的 ObjC 工程用 ObjC 写一个“什么都不做”的哑元 App能把导出前的构建时间压到最低。对照整个仓库——Mac Mouse Fix 主应用和 Helper 都是 Swift/ObjC 混编的大型 Target参见 App/ 与 Helper/ 目录导出时若不得不构建它们代价显然可观。哑元 Target 用纯 ObjC 就是针对这一开销的刻意优化。五、注意事项构建哑元 Target 时的三个坑Readme 还记录了搭建过程中的实战经验源自 mac-mouse-fix-website 仓库中同用途的xcode-dummy-target的教训可参看 Various Notes/Localization Notes.md 了解本项目本地化工作流的更多背景必须禁用MainMenu.xib的本地化否则该 nib 的本地化变体会作为资源被导出进.xcloc污染导出产物必须手动添加 Info.plistReadme 强调需要“manually add an Info.plist file and remove the localizable keys”。本项目正是这样做的——XCStringsDummyApp-Info.plist 只保留了CFBundleIdentifier、NSMainNibFile、NSPrincipalClass、CFBundleExecutable、CFBundlePackageType等启动必需键并全部用$(...)构建设置变量取值完全没有CFBundleDisplayName、CFBundleName这类可本地化键默认的本地化键会泄漏进.xcloc若不按上面两步处理Xcode 生成的本地化键会出现在.xcloc文件中需要事后清理不如一开始就规避。六、已知问题为什么导出时总是构建 Mac Mouse Fix 主 TargetReadme 在 “Questions” 一节记录了一个截至 2025 年 9 月仍未解决的疑惑Product Export Localizations...always builds the Mac Mouse Fix target, which is probably slowest part of the export. But why does it do that? Why not the other targets? Is there a build-setting to turn this off? Mysterious.即执行导出命令时Xcode总是会构建 Mac Mouse Fix 主应用 Target——这通常是整个导出流程中最慢的部分。而哑元 Target 本身设计为纯 ObjC 空壳恰恰是为了让“导出必须构建的 Target”尽量轻量。主 Target 被无故构建、而其他 Target如 Helper却不被构建的现象从源码结构看暂时没有明显的构建设置可以解释Readme 将其定性为 “Mysterious”。如果你在自建哑元 Target 时也遇到类似的“多余构建”这属于 Xcode 行为层面的已知坑值得单独排查。七、总结哑元 Target 模式的价值XCStringsDummyApp 为 macOS 工程提供了一种可复制的本地化工程模式把需要被 Xcode 导出、但不应进入产品 bundle的.xcstrings集中挂载到一个专用哑元 Target用LOCALIZATION_EXPORT_SUPPORTED NO屏蔽界面资源导出用纯 ObjC 实现压缩构建成本通过xcodebuild -exportLocalizations或 Xcode 菜单的Export Localizations...一次性产出包含这些字符串表的.xcloc。对任何多 Target、且同时维护“编译型”与“非编译型”字符串表的 macOS 项目这一模式都能直接迁移使用。相关源码与配置均可在仓库中按路径查阅XCStringsDummyApp/Readme.md、XCStringsDummyApp/main.m、XCStringsDummyApp/XCStringsDummyApp-Info.plist、Mouse Fix.xcodeproj/project.pbxproj以及被挂载导出的字符串表目录 Localization/Strings/。赞分享桌面应用系统编程【免费下载链接】mac-mouse-fixMac Mouse Fix - Make Your $10 Mouse Better Than an Apple Trackpad!项目地址https://gitcode.com/GitHub_Trending/ma/mac-mouse-fix点击查看免费下载相关推荐4-ZERO-3工具完全指南从入门到精通的403/401绕过技术4 ZERO 3工具完全指南从入门到精通的403/401绕过技术 4 ZERO 3是一款功能强大的403/401绕过工具通过自动化的Bash脚本集成了多种绕Parallelformers基准测试报告在不同硬件配置下的性能表现对比Parallelformers基准测试报告在不同硬件配置下的性能表现对比 Parallelformers作为一款高效的模型并行化工具包专为大规模语言模型的部彻底解决Mac Mouse Fix设备配置冲突让你的鼠标设置不再打架彻底解决Mac Mouse Fix设备配置冲突让你的鼠标设置不再打架 你是否遇到过这样的情况在Mac上安装了Mac Mouse Fix后鼠标设置时而正桌面应用系统编程上一篇QMK Boardrun Classic 固件开发指南正交立柱 60% 布局、Ergodox 键帽兼容与默认键位解析下一篇Epic Stack 部署实战指南Fly.io 多区域部署、LiteFS 与 GitHub Actions CI/CD 全解析创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

打造个人极客空间:纯前端集成工具集与音乐播放器实践 2026/10/2 9:03:51

打造个人极客空间:纯前端集成工具集与音乐播放器实践

我搭这个“我的极客空间”网站,起因特别朴素:每天要开一堆在线工具,格式化JSON、转时间戳、生成二维码、查正则表达式,书签栏塞得密密麻麻;想听会儿音乐又得切到另一个标签页,来回折腾特别打断心流。后来干…

阅读更多 →
商业回报的本质:资本>智力>技能>人力劳动,你的不可替代性在哪一层? 2026/10/2 9:03:51

商业回报的本质:资本>智力>技能>人力劳动,你的不可替代性在哪一层?

我在独立接项目的第三年彻底想通了一个道理:决定你报价上限的,不是你干了多少活,而是你到底掌握着哪个环节的不可替代性。之前带过一个团队做线上工具类产品,最忙的时候六个研发连轴转两个月,结果项目结算时老板给的评…

阅读更多 →
行李箱物品检测VOC数据集:解决安检AI误报难题 2026/10/2 9:03:50

行李箱物品检测VOC数据集:解决安检AI误报难题

简介:本资源是面向计算机视觉初学者与目标检测实践者的行李箱内物品检测专用数据集,适用于YOLO系列模型训练、安检场景算法验证及多目标检测课程实验。数据集采用标准Pascal VOC格式组织,共1050个文件,包含521张带标注的JPG图像、…

阅读更多 →
性能测试不是脚本操作,而是业务驱动的系统压力实验 2026/10/2 9:03:50

性能测试不是脚本操作,而是业务驱动的系统压力实验

1. 这不是“跑个脚本就完事”的性能测试——它是一场对系统生命力的深度体检很多人刚接触“软件测试——性能测试”这个词时,第一反应是:不就是用JMeter点几下,看个响应时间、TPS曲线,然后写个报告交差?我干这行十多年…

阅读更多 →
Visual Studio 重磅更新!GitHub Copilot 智能体模式预览版上线,TaoToken 统一 Key 打通多模型调用 2026/10/2 9:03:49

Visual Studio 重磅更新!GitHub Copilot 智能体模式预览版上线,TaoToken 统一 Key 打通多模型调用

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
Visio建模本质:从画图工具到信息结构化表达平台 2026/10/2 9:03:43

Visio建模本质:从画图工具到信息结构化表达平台

1. Visio不是画图软件,是信息结构化表达的手术刀很多人第一次打开Visio,下意识把它当成“高级PPT绘图工具”——拖几个矩形、连几根线、加点文字,完事。结果做出来的流程图别人看不懂,网络拓扑图设备关系混乱,UML类图继…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉