尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

Ignite 的 iOS 原生工程:ios 文件夹的生成时机、结构与 Xcode 调试指南

Ignite 的 iOS 原生工程:ios 文件夹的生成时机、结构与 Xcode 调试指南 Ignite 的 iOS 原生工程ios 文件夹的生成时机、结构与 Xcode 调试指南【免费下载链接】igniteInfinite Reds battle-tested React Native project boilerplate, along with a CLI, component/model generators, and more! 9 years of continuous development and counting.项目地址: https://gitcode.com/GitHub_Trending/ig/ignite导读本文围绕 Ignite 项目模板中的ios文件夹展开讲清楚它在什么条件下生成、内部包含哪些原生工程内容、与 Expo CNG连续原生生成工作流的关系以及如何用 Xcode 打开并运行、如何通过 EAS 构建 iOS 包。读完本文你将掌握手动管理 iOS 原生代码的完整路径并理解 Ignite 团队为何默认推荐 CNG 工作流。ios 文件夹从哪来两条生成路径在 docs/boilerplate/ios.md 中明确说明ios文件夹以及通常同时出现的android文件夹出现在项目根目录只有两种来源使用ignite new创建新应用时选择manual手动工作流在项目根目录运行pnpm run prebuild:clean。无论哪条路径其背后都是同一个机制Expo Prebuild 根据app.json/app.config.ts中的配置一次性生成完整的原生 iOS / Xcode 工程并已预先配置好与 React Native 的集成。源码视角new 命令中的工作流选择从 src/commands/new.ts 可以看到ignite new会在未显式传入--workflow参数时向用户询问是采用expo还是manual工作流确认后会打印workflow: ${workflow}日志。当依赖安装成功后new.ts 会通过packager.run(prebuild:clean, ...)执行原生模板生成——也就是 boilerplate/package.json 中定义的npx expo prebuild --clean。一个值得注意的细节在 new.ts 中当工作流为manual时CLI 会从生成的.gitignore中移除/android与/ios两行。这意味着manual 工作流下原生目录被视作需要提交到版本库的一等公民而在默认的 CNG 工作流下它们被忽略、可随时重新生成。文件夹内部是什么预配置好的 Xcode 工程ios文件夹是一个标准的 iOS 原生工程包含.xcworkspace/.xcodeproj、PodfileCocoaPods 依赖管理、Info.plist以及由 Expo Prebuild 生成的各类原生源文件。它开箱即可与 React Native 协同工作你可以像对待任何 React Native 项目一样用 Xcode 打开并运行到模拟器或真机上。工程名与包名的来源工程的身份信息并非手写而是来自 boilerplate/app.json 中的ios配置段ios: { icon: ./assets/images/app-icon-ios.png, supportsTablet: true, bundleIdentifier: com.helloworld }bundleIdentifieriOS 包名Bundle IDPrebuild 会将其写入 Xcode 工程的签名与产品标识supportsTablet是否声明支持 iPadiconApp 图标资源会被写入工程的 AppIcon 资产目录。需要修改包名或图标时直接修改app.json并重新执行pnpm run prebuild:clean即可让原生工程同步更新。iOS 隐私清单app.config.ts 中的原生级配置生成的原生工程还会带入 boilerplate/app.config.ts 中通过动态配置注入的 iOS 设置。该文件使用 TypeScript 编写并借助tsx/cjs加载其中默认加入了一份Apple 隐私清单Privacy Manifestios: { ...config.ios, privacyManifests: { NSPrivacyAccessedAPITypes: [ { NSPrivacyAccessedAPIType: NSPrivacyAccessedAPICategoryUserDefaults, NSPrivacyAccessedAPITypeReasons: [CA92.1], // CA92.1 Access info from same app, per documentation }, ], }, },这份配置声明了应用会访问UserDefaults这一“需说明理由的 API”类别原因代码为CA92.1。如果你在原生的ios文件夹中直接修改了涉及这些 API 的逻辑需要在此处补充对应的隐私声明条目。这也是“直接维护原生代码”时最容易遗漏、却可能影响 App Store 审核的环节。manual 工作流 vs Expo CNG为什么不推荐直接改原生Ignite 团队在 docs/expo/CNG.md 中给出的建议是绝大多数应用都应优先使用 Expo CNG 工作流。它的优势包括无需直接与 Gradle 和 CocoaPods 打交道升级 React Native 或 Expo SDK 时极为省力因为你不需要绕开自己的原生定制大量流行库都有现成的 Config Plugin也支持编写自定义插件来注入原生配置。而 manual 工作流的定位在 docs/expo/DIY.md 中描述得很直白它主要为不想使用 Expo Prebuild、希望自行维护原生代码的开发者保留。文档同时揭示了一个实现细节manual 工作流底层仍然是CNG流程——CLI 只是帮你把ios/android文件夹生成出来之后你就不再运行 Prebuild而是直接定制这两个原生工程所以称为手动部分。这意味着一旦选择了 manual 工作流你就承担起了 CocoaPods 管理、Xcode 工程配置、SDK 升级时的原生适配等全部责任。如果你的应用需要深度原生定制如接入自研原生 SDK、修改原生启动流程ios文件夹正是你施展的舞台否则保持 CNG 工作流、让ios文件夹保持在.gitignore中随用随生是更省心的选择。用 Xcode 运行与调试拿到ios文件夹后运行方式与任意 React Native 项目一致安装依赖并安装 Pods在项目根目录执行pnpm install随后cd ios pod install或直接使用npx pod-install用 Xcode 打开ios/HelloWorld.xcworkspace注意是 workspace 而非 project因为工程依赖 CocoaPods选择目标模拟器或已连接的真机真机需配置好开发者签名与 Bundle ID点击 Run 构建并启动应用。针对原生代码的调试官方文档建议参考 React Native 原生调试章节使用 LLDB 断点、查看原生日志等。ios文件夹中的 Swift/Objective-C 文件均可在 Xcode 中直接打断点调试这与纯 JS 层的调试器是互补的两套工具链。通过 EAS 云构建 iOS 包无需本机 Xcode如果你不想在本机折腾 XcodeIgnite 的默认方案是 EASExpo Application Services云构建相关说明见 docs/expo/EAS.md。boilerplate/eas.json 已为 iOS 预置了多档构建配置development: { extends: production, distribution: internal, ios: { buildConfiguration: Debug, simulator: true } }, development:device: { extends: development, distribution: internal, ios: { buildConfiguration: Debug, simulator: false } }, preview: { extends: production, distribution: internal, ios: { simulator: true } }, preview:device: { extends: preview, ios: { simulator: false } }, production: {}配置要点buildConfiguration: Debug指定 Xcode 构建配置为 Debug便于携带开发调试能力simulator: true / false控制构建产物面向模拟器还是真机真机构建需要签名证书与 Provisioning Profiledistribution: internal产物通过 EAS 内部渠道分发。boilerplate/package.json 中提供了对应的快捷脚本全部通过--local在本机构建pnpm run build:ios:sim # 开发版iOS 模拟器 pnpm run build:ios:device # 开发版iOS 真机 pnpm run build:ios:preview # 预览版模拟器 pnpm run build:ios:prod # 生产版真机日常本地开发启动模拟器应用则使用pnpm run ios # 等价于 expo run:ios注意在 CNG 工作流下expo run:ios会在构建前按需执行 Prebuild重新生成ios文件夹而在 manual 工作流下它直接编译你已维护的ios文件夹。实践建议与注意事项确认你所在的工作流运行pnpm run prebuild:clean会覆盖你手工修改的原生代码因此在 manual 工作流下请谨慎执行该命令提交策略manual 工作流应把ios目录提交进 GitCLI 已自动从.gitignore中移除/iosCNG 工作流则保持忽略隐私合规无论哪种工作流只要 iOS 原生代码访问了 Apple 的“需说明理由 API”都应同步维护 boilerplate/app.config.ts 中的privacyManifests升级路径CNG 工作流可通过升级 Expo SDK 后重新 Prebuild 获得最新原生模板manual 工作流则需要手动比对并移植原生改动这也是其维护成本最高的环节。总之ios文件夹是 Ignite 在需要直接掌控原生层时的出口平时安心使用 CNG 让原生工程随配置再生真正需要深度定制时再通过 manual 工作流或prebuild:clean把它落地并用 Xcode 或 EAS 完成构建与调试。【免费下载链接】igniteInfinite Reds battle-tested React Native project boilerplate, along with a CLI, component/model generators, and more! 9 years of continuous development and counting.项目地址: https://gitcode.com/GitHub_Trending/ig/ignite创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表