iOS App Archive 时报:linker command failed with exit code 1 (use -v to see invocation) 问题原因及解决方案汇总

在 iOS App 开发过程中,经常会遇到该问题:

linker command failed with exit code 1 (use -v to see invocation) 

我在解决该问题的过程中,收集整理了一般引发该问题的原因以及对应的解决方法。

BitCode

新建一个 iOS 项目时, xcode 默认会将 bitcode 项设置为 YES,即启用,如果我们引入了一些不支持 bitcode 的第三方库,会引起这个问题。

bitcode 是一种编译结果中间态,它并不能直接运行,但是它包含了一个程序所需要的所有内容,它最终将被编译成为可运行的二进制包,启用 bitcode 的好处是,苹果可以随时根据自己的优化,基于 bitcode 生成更优化的二进制包,而不需要我们重新上传新的版本。 iOS 默认开启,但是可以关闭,watchOS 下则是必须开启的,mac OS 不支持,如果我们开发的程序只支持 iOS,那么可以选择关闭它。

尝试使用以下方式解决:

  • 打开 Build Settings
  • Enable Bitcode 设置为 NO

添加了第三方库,且不是静态库

如果添加了第三方库,且该库不是静态库之后发生此问题,那么可以尝试:

  • 先按上面 BitCode 的方式解决,若不行
  • 打开 Build Settings
  • 找到 Linking
  • Other Linker Flags 改为 -all_load 或者 -ObjC,视情况而定,多试几次。

引入了重复的包

……
duplicate symbol _OBJC_IVAR_$_RCTHTTPRequestHandler._session in:
    /Users/pantao/Library/Developer/Xcode/DerivedData/chongaiApp-dixtnlpvsctvmwdzrkacqqenegoh/Build/Intermediates.noindex/ArchiveIntermediates/chongaiApp/BuildProductsPath/Release-iphoneos/libReact.a(RCTHTTPRequestHandler.o)
    /Users/pantao/Library/Developer/Xcode/DerivedData/chongaiApp-dixtnlpvsctvmwdzrkacqqenegoh/Build/Intermediates.noindex/ArchiveIntermediates/chongaiApp/BuildProductsPath/Release-iphoneos/libRCTNetwork.a(RCTHTTPRequestHandler.o)
duplicate symbol _OBJC_METACLASS_$_RCTHTTPRequestHandler in:
    /Users/pantao/Library/Developer/Xcode/DerivedData/chongaiApp-dixtnlpvsctvmwdzrkacqqenegoh/Build/Intermediates.noindex/ArchiveIntermediates/chongaiApp/BuildProductsPath/Release-iphoneos/libReact.a(RCTHTTPRequestHandler.o)
    /Users/pantao/Library/Developer/Xcode/DerivedData/chongaiApp-dixtnlpvsctvmwdzrkacqqenegoh/Build/Intermediates.noindex/ArchiveIntermediates/chongaiApp/BuildProductsPath/Release-iphoneos/libRCTNetwork.a(RCTHTTPRequestHandler.o)
ld: 485 duplicate symbols for architecture arm64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

这个问题是我这次遇到的,

一直以为 上面这一段提示只是警告,但是其实它才是导致这个问题产生的原因,我最后是根据提示, symbol _OBJC_METACLASS_$_RCTHTTPRequestHandler 同时在 libReact.alibRCTNetwork.a 中定义了,我后来是一个一个的删除提示里面的多余的引用,解决问题。

  • 打开 Build Phases
  • 找到 Link Binary With Libraries (N items)
  • 根据提示中,删除重复项(名称有可能不同,但是里面的内容可能是一样的)

标签: React Native, ios

评论已关闭