我已经建立了一个React native的android项目,它工作正常。然后,我从iOS部分开始。我正在使用react-native-cli:2.0.1 react-native:0.60.4和Xcode 10和Mac OS Mojave
默认pod文件在安装glog时遇到一些问题,在执行/bin/bash: ./configure: /bin/sh^M: bad interpreter: No such file or directory
时出现错误pod install
。即使在GitHub上做了所有回答后,堆栈溢出(例如安装Cocoapods,重新安装,ruby安装,链接cocoapods)也是如此。然后稍后在GitHub上,我发现pod文件存在一些问题,因此将其替换为在GitHub上为react-native指定的正确内容。然后根据此链接https://forums.expo.io/t/pod-install-errors-on-newly-detached-app-on-macos-installing-glog-bin-bash-configure-bin-sh-m-bad-interpreter-no-such-file-or-directory/10054仍然无法正常工作,然后我修改了glog文件,然后它成功安装了glog。
此后,我在ios / Pods / glog / src / config.h文件中添加了Need to implement mutex.h for your architecture, or #define NO_THREADS
,从而解决了glog define no_thread
的另一个问题
现在坚持下去
/Volumes/Projects/derive-mobile/ios/Pods/glog/src/utilities.h:148:1: Unknown type name '_START_GOOGLE_NAMESPACE_'
/Volumes/Projects/derive-mobile/ios/Pods/glog/src/utilities.h:168:1: Unknown type name 'int64'; did you mean 'google::int64'?
/Volumes/Projects/derive-mobile/ios/Pods/glog/src/utilities.h:170:20: Unknown type name 'int64'; did you mean 'google::int64'?
/Volumes/Projects/derive-mobile/ios/Pods/glog/src/utilities.h:175:1: Unknown type name 'int32'; did you mean 'google::int32'?
/Volumes/Projects/derive-mobile/ios/Pods/glog/src/utilities.h:236:1: Unknown type name '_END_GOOGLE_NAMESPACE_'
/Volumes/Projects/derive-mobile/ios/Pods/glog/src/utilities.h:150:1: Expected unqualified-id
我认为我的glog安装无法顺利进行。我已经在使用项目工作区。
我检查了整个GitHub Facebook反应本机和堆栈溢出,但未发现任何内容。我尝试过旧版构建,清除派生数据。我还尝试了Pod解集成和Pod安装。对于glog,我也尝试过cd ./node_modules/react-native/third-party/glog-0.3.4 && ../../scripts/ios-configure-glog.sh
如何解决此问题?有什么方法可以完全删除glog并重新安装它,而无需使用/bin/bash: ./configure: /bin/sh^M: bad interpreter: No such file or directory
,因为上述解决方案都无法解决
答案 0 :(得分:0)
./configure
文件可能已在DOS或Windows环境中进行了编辑。 (例如,使用notepad
)。该版本可能在每行的末尾添加了回车符(^ M或\ r)...在Unix环境中不兼容。
您可以通过以下方式进行检查:
$ file ./configure
要将其重新转换为Unix格式,可以使用dos2unix
或使用vi -b
进行编辑(在二进制模式下为vi)。
编辑: 在./configure : /bin/sh^M : bad interpreter中,您还有其他重新转换选项。
答案 1 :(得分:0)
对于这个问题,我还没有确定长期的解决方案,但是我已经比该主题走得更远了。
现在,每次调用yarn命令后,我都需要更新ios-configure-glog.sh
来替换以下行:
./configure --host arm-apple-darwin
# Fix build for tvOS
cat << EOF >> src/config.h
/* Add in so we have Apple Target Conditionals */
#ifdef __APPLE__
#include <TargetConditionals.h>
#include <Availability.h>
#endif
/* Special configuration for AppleTVOS */
#if TARGET_OS_TV
#undef HAVE_SYSCALL_H
#undef HAVE_SYS_SYSCALL_H
#undef OS_MACOSX
#endif
/* Special configuration for ucontext */
#undef HAVE_UCONTEXT_H
#undef PC_FROM_UCONTEXT
#if defined(__x86_64__)
#define PC_FROM_UCONTEXT uc_mcontext->__ss.__rip
#elif defined(__i386__)
#define PC_FROM_UCONTEXT uc_mcontext->__ss.__eip
#endif
EOF
使用这些行
dos2unix -f configure
dos2unix -f config.sub
dos2unix -f config.guess
./configure --host arm-apple-darwin
cp {THE FULL PATH TO MY PROJECT}/node_modules/react-native/ReactAndroid/src/main/jni/third-party/glog/config.h src
这一次解决了我所有的glog问题,但这不是永久性的,我真的不希望派遣react-native使其永久化。
也许这将使其他人朝着正确的方向提出长期解决方案。我将错误的文件格式缩小为这3个文件(configure,config.sub,config.guess),这些文件似乎都驻留在我的Xcode应用程序内部,但似乎使用LF行尾,因此我真的不知道该错误如何正在发生。
我也可能从此文件中删除了太多内容,但是我没有看到与此相关的任何问题。
答案 2 :(得分:0)
我尝试了dos2unix
,但老实说,我不知道应将其应用于哪个文件。因为如果执行pod install --verbose
,您会看到glog
正在下载到随机的临时文件夹并进行构建(这是失败的地方)。所以我没有控制权。
所以,我尝试了其他方法。在我的Mac中创建了新用户。 Xcode 是共享应用程序。 pod install
才有效。没有抱怨。现在,控制台输出的差异似乎指向trunk
。
在这里您可以看到“添加规范回购中继” ...
与trunk
无关。然后它开始检查缓存,并下载软件包(例如glog
和Folly
)。不知道为什么。从新用户安装依赖项很容易。
希望此提示可能会导致不同的解决方案。这可能与用户设置/配置有关。就像UTF-8一样。
答案 3 :(得分:0)
对我来说,解决的办法是从xcode(xcode-> preferences-> locations)中删除派生数据文件夹,从ios文件夹中删除pod文件夹,然后运行命令
pod缓存清理–全部, Pod Repo更新(如果使用Pod Repo)和 吊舱安装