React Native项目转npm库时iOS构建报错:Build input file cannot be found: 'main.m'
解决iOS构建错误:Build input file cannot be found: 'main.m'
这个问题的核心原因很清晰——你的rsync命令误排除了存放main.m的核心目录,导致编译时Pod项目找不到这个关键文件。下面是具体的修复步骤:
1. 调整rsync命令,保留main.m所在目录
你当前的rsync命令里包含了--exclude='xyzClientMobile',而main.m正好位于ios/xyzClientMobile/路径下,这直接导致该文件没有被复制到dist文件夹中。修改命令,去掉这个排除项,只保留对无用子目录和文件的排除:
npm run "ios:lib": "rsync -r ./ios --exclude='.*' --exclude='xyzClientMobile.xcworkspace' --exclude='xyzClientMobile-tvOS' --exclude='xyzClientMobile-tvOSTests' --exclude='xyzClientMobileTests' --exclude='Pods' --exclude='Podfile.lock' ./dist && npm run ios:podspec"
修改后xyzClientMobile目录会被完整复制到dist/ios下,其中的main.m自然也会被包含进去。
2. 验证Podspec文件的路径配置
确保你的Podspec文件正确引用了main.m及其他需要的源文件。比如在Podspec中应该有类似这样的配置:
spec.source_files = "ios/xyzClientMobile/main.m", "ios/xyzClientMobile/**/*.{h,m,swift}"
这里的路径要和dist文件夹中的实际结构对应,保证CocoaPods能正确定位所有需要编译的文件。
3. 清理并重新构建项目
完成上述修改后,执行以下步骤确保环境干净:
- 进入
dist/ios目录,删除Pods文件夹和Podfile.lock - 运行
pod install重新安装依赖 - 打开Xcode项目,清理构建缓存(
Cmd+Shift+K),然后重新尝试构建
错误根源说明
你在原项目project.pbxproj中看到的main.m引用,说明原项目的Xcode配置依赖这个文件来启动库。但你的rsync命令把包含它的xyzClientMobile整个排除了,导致dist目录里缺失该文件,最终触发了编译时的文件找不到错误。
内容的提问来源于stack exchange,提问作者Roshan Malik




