出现找不到第三方库文件问题, invalid bitcode signature 不妨试试下面的方法

关于 invalid bitcode signature

《出现找不到第三方库文件问题, invalid bitcode signature 不妨试试下面的方法》

invalid bitcode signature解决方案

1.错误原因:

《出现找不到第三方库文件问题, invalid bitcode signature 不妨试试下面的方法》

解决办法:

将YES与NO换一下位置

《出现找不到第三方库文件问题, invalid bitcode signature 不妨试试下面的方法》

2.Clean重启

首先要做的就是网管的终极套路,关机重启,所以我们遇到问题当然就是Clean Project and Build,不行就Restart Xcode,其实很多莫名奇怪的问题都可以通过这样的方案搞定,毕竟Xcode确实bug不少,不知道是不是我的mac性能差,我的Xcode就经常出现找不到头文件或者联想不出关键字的问题。

3.修改Bitcode检测
《出现找不到第三方库文件问题, invalid bitcode signature 不妨试试下面的方法》
Bitcode.png

4.Build Active Architecture Only设置

《出现找不到第三方库文件问题, invalid bitcode signature 不妨试试下面的方法》

Build Active Architecture Only.png

我把所有的组合搭配都试过了,Debug -> YES/NO,Release -> YES/NO,各种搭配,各种配搭,无奈,It doesn’t work。

5.删除DerivedData文件夹

打开xcode找到Products文件夹 -> Products文件夹里的.app文件,show in Finder 选择三栏显示模式 -> 往前滑找到DerivedData文件夹, 删除 。

《出现找不到第三方库文件问题, invalid bitcode signature 不妨试试下面的方法》

DerivedData.png

It doesn’t work。

6.Custom Compiler Flags

在Building Seting -> 中 -> Custom Compiler Flags加 -> -fembed-bitcode

《出现找不到第三方库文件问题, invalid bitcode signature 不妨试试下面的方法》

Custom Compiler Flags.png

It doesn’t work。

至此,基本上Google上所有的方案都是这几个,然而都没有解决我的问题,所以果断换关键字搜索,也就是linker command failed with exit code 1,可能出现的两个Error都是因为linker command failed with exit code 1。

linker command failed with exit code 1解决方案

1,看看是不是有新添加的文件跟之前文件同名
2,错误信息中出现了某个类的名字,去原文件中看看#import了哪些第三方库,把这些库挨个注释排除,找到出错的那个库,然后按照官方提供的步骤重新添加一遍。
3.SVN或git忽略了某些文件,如.o 等文件没能update下来,查看.o文件可能是红色的,可以重新添加或者修改SVN(git)的忽略设置
4.把.a文件删除再重新拖到项目中解决问题
5.可能重复添加了文件(也可能没勾选 Copy items if neded 这个选项),建议删除后重新添加
6.工程中文件名重复了 也会出现同样的错误
7.”Build Settings”->”Enable Bitcode”设置为NO ,因为有些SDK不支持Bitcode
8.可能在引用的时候 可能写的是#import “XXXXX.m” ,如果是改为#import “XXXXX.h”
9.可能你导入的SDK只能在真机下才能运行,模拟器会报错!
10.找到 Build settings->Linking->Other Linker Flags将此属性修改成-all_load 或者 -ObjC
11.Build settings->Search Path->Library Search Paths 添加静态库的相应路径

我的解决方案

以上方案我基本上都做了,无奈还是没搞定,我就在猜测是不是静态库版本的问题,因为我的Xcode已经升级到了最新的版本,而项目是挺老的项目了,所以秉承着打破砂锅问到底的精神果断去下载老版本的Xcode,通常我们可以在App Store应用商店中免费下载Xcode的最新版本,但如果我们想要获取特定版本呢?苹果在开发者网站中提供了历史所有版本的系统和开发工具的下载,网址:developer.apple.com/download/mo…
幸运的是公司的网络比较快,Xcode7很快下载下来了,然后及时如何让两个版本共存,其实直接给Xcode改名即可,可以一个版本保留原名,另一个版本加上版本号。也可以给多个版本都加上版本号,例如Xcode7和Xcode8。需要注意的是,如果你有使用第三方开发工具,请尽量避免在名称中出现空格。
Xcode安装好了以后,果断真机调试,你猜的没错Could not find Developer Disk Image,公司最低版本的手机为iOS 9.3.5的iPhone4s,而我下载的Xcode7最高支持的设备为iOS 9.0,此时解决的办法有两个,要么升级Xcode,要么下载该Disk Image,两者相比较当然是厚颜无耻的去问别人要了一个9.3版本的Disk Image,然后放到/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/DeviceSupport目录下,重启Xcode,编译运行通过。

iOS 经典错误library not found for -lXXX

开发中经常会和
ibrary not found for -xxx
打交道,尤其是我们从远程仓库或者github clone下来一个项目,编译很有可能报这个错误。如下图:
《出现找不到第三方库文件问题, invalid bitcode signature 不妨试试下面的方法》

报错信息

library not found for -lXXX 属于iOS经典错误之一。下面我们通过复现这个错误的方式来说明这个错误的解决方法。其中l是lib(library)的意思。

首先声明,我的工程中引用了友盟的统计SDK,名称叫做libMobClickLibrary.a。存储在 third_party目录下,如下图(左图为libMobClickLibrary.a在工程目录/虚拟目录的位置,右图为libMobClickLibrary.a在磁盘目录/物理目录的位置):

《出现找不到第三方库文件问题, invalid bitcode signature 不妨试试下面的方法》

工程目录
《出现找不到第三方库文件问题, invalid bitcode signature 不妨试试下面的方法》

磁盘目录

没有配置Library Search Paths导致报错

(1)删除building setting -> Library Search Paths下的 $(PROJECT_DIR)/YunFu/third_party/UMAnalytics。如下图:
那么,你可能会问,为什么要删除这个路径而不是其他的路径呢?因为我知道这个路径就是libMobClickLibrary.a静态库的目录。

《出现找不到第三方库文件问题, invalid bitcode signature 不妨试试下面的方法》

(2)command + B编译项目,然后不出所料,我们会遇到下面这个错误:

《出现找不到第三方库文件问题, invalid bitcode signature 不妨试试下面的方法》

(3)点开这个错误,然后就能看到这个经典错误,如下图:
这个错误的意思是找不到名字叫做 MobClickLibrary的库。

《出现找不到第三方库文件问题, invalid bitcode signature 不妨试试下面的方法》

至此,我们可知,就因为我们在Library Search Paths下删除了$(PROJECT_DIR)/YunFu/third_party/UMAnalytics 导致报这个library not found for -lMobClickLibrary的错误。所以下次遇到同类问题,我们便可知道某个静态库的路径可能没有配置。

结论一:没有配置静态库的search路径导致出现library not found for lXXX。
注意:设置的路径必须是静态库在磁盘下的路径(物理目录),不能设置为项目的虚拟目录。拿此例来说,libMobClickLibrary.a的在项目中是放在third_party文件夹下的,而其真正的磁盘路径是third_party下的UMAnalytics文件夹。

没有正确配置Library Search Paths导致报错

上面的情况是,我们没有配置某个静态库的路径会导致library not found for lXXX错误。而有时候,我们确实在Library Search Paths下配置了静态库路径,却依然报同样错误。此时我们就要考虑,这个路径配置的到底对不对。如下图(分别是libMobClickLibrary.a正确的路径和错误的路径):
正确路径:

《出现找不到第三方库文件问题, invalid bitcode signature 不妨试试下面的方法》

正确路径

错误路径(去掉了最后一级目录”/UMAnalytics”):

《出现找不到第三方库文件问题, invalid bitcode signature 不妨试试下面的方法》

错误路径

编译项目依然会报同样的错误library not found for -lMobClickLibrary.a,如下图:

《出现找不到第三方库文件问题, invalid bitcode signature 不妨试试下面的方法》

错误信息

归根到底,原因在于,我们虽然跟他指定了libMobClickLibrary.a的目录,但是在所指定的目录下没有搜索到静态库libMobClickLibrary.a。此时又分为两种情况:

  • 情况一:如果我们指定的目录和静态库libMobClickLibrary.a的目录完全不相关,那么需要重新到Library Search Paths下设置(注意:设置的是静态库的磁盘路径)

  • 情况二:如果我们指定的目录和静态库的目录有关系。即,我们指定的目录是静态库所在目录的上级目录,或者是上上级目录。这种情况下,无需指定静态库的精确的路径,只需要把non-recursive选项修改为recursive即可。如下图:

    《出现找不到第三方库文件问题, invalid bitcode signature 不妨试试下面的方法》
    设置recursive

因为recursive选项代表在我们指定的目录下递归搜索静态库。即,如果在当前目录没有搜索到静态库,那么就去当前目录的子目录下继续搜索。默认情况下是non-recursive(非递归)的。

结论二:虽然Library Search Paths 中配置了静态库的search路径。但是没有正确配置而导致出现library not found for lXXX。

导入第三方framework静态库编译报错xxx.h file not found

上面讲的是当我们项目导入的是.a静态库,但因为没有在 Library Search Paths 中配置.a静态库的search路径,或者是虽然配置了路径但是路径配置错误而导致出现library not found for -xxx错误的解决办法。
但我们知道,在iOS中,静态库有两种形式:.a格式的静态库和.framework格式的静态库。
那么如果我们的项目中引入了.framework格式的静态库要不要配置search路径呢?答案是肯定的,无论我们以什么方式导入.framework静态库(cocoapods的方式或者直接把framework静态库拖拽到项目中的方式),如果没有配置framework的search路径,同样会报错,但报的错误却是和.a格式的静态库有些不同,如果我们项目中引入了framework格式静态库也使用了静态库(所谓使用就是import了framework静态库中的某个头文件),但没有配置search路径,那么就会报 xxx.h file not found 这类错误。如下图:

《出现找不到第三方库文件问题, invalid bitcode signature 不妨试试下面的方法》

xxx file not found

因为我的项目中引入了一个叫做PushCenterSDK.framework的静态库。同时也使用了这个静态库中的某个API。如下图所示,分别是静态库在项目中的路径和磁盘路径:

《出现找不到第三方库文件问题, invalid bitcode signature 不妨试试下面的方法》

在项目中的路径
《出现找不到第三方库文件问题, invalid bitcode signature 不妨试试下面的方法》

在磁盘中的路径

我们依然采用复现问题的方式来验证解决错误的方法,首先,我的项目是可以编译通过的,然后尝试在build setting -> Framework Search Paths 下删除PushCenterSDK.framework的搜索路径(磁盘路径),下图分别是删除前和删除后的截图:

删除前:

《出现找不到第三方库文件问题, invalid bitcode signature 不妨试试下面的方法》

删除前

删除后:

《出现找不到第三方库文件问题, invalid bitcode signature 不妨试试下面的方法》

删除后

删除路径之后编译项目,发现出现了如下错误XXX.h file not found, 如下图:
很显然,没有找到PushCenterSDK 下的TBSDKPushCenterEngine.h文件。

《出现找不到第三方库文件问题, invalid bitcode signature 不妨试试下面的方法》

报错

综上,framework静态库的路径也是必须的,如果项目中的framework静态库的路径配置错误或者没有配置就会报错 xxx.h file not found 类似错误。下次遇到这类错误,便可以从framework search paths 着手思考。

同样,framework静态库的搜索路径也支持递归搜索,我们不必配置一个精确无误的路径,可以指定一个父级目录,然后选择 recursive。

结论:无论我们以什么方式导入.framework静态库(cocoapods的方式或者直接把framework静态库拖拽到项目中的方式),如果没有配置framework的search路径,同样会报错,但报的错误却是和.a格式的静态库有些不同,如果我们项目中引入了framework格式静态库也使用了静态库(所谓使用就是import了framework静态库中的某个头文件),但没有配置search路径,那么就会报 xxx.h file not found 这类错误

在开发的过程中难免会遇到很多的错误,可是当看到系统给出的英文时,又不知道是什么意思。所以这篇文章总结了Xcode中常见的一些英文单词及词组,可以帮助初学的人快速了解给出的提示。多练习,就肯定能基本掌握。

expression:表达式

assignable:赋值
variable:变量+
redefinition:重复定义
type:类型
conflicting:冲突项
invalid:无效的
conversion:转换
specifier:说明符
indent:缩进
operands:运算对象、操作数
binary:二进制
expected:期望
logical:逻辑
const :常量
constant:常量
statements:语句
initialization:初始化
condition:条件
increment:增量
index:索引、下标
abbrev:简写、缩写
alias:别名,化名
modified:修改/改进的
parameter:参数
implicit:隐含的
undo:取消
redo:重做
cancel:取消
octal:八进制的
incompatible:不匹配的
duplicate:重复
action:行为
instance:实例
modify:修改
general:普通的   in general:大体,一般来说
subclass:子类
superclass:父类
inherit:继承
contents:内容
primitive:原始的
modify:修改
ordered:有序的
collection:集合
dynamic:动态的
querying:查询
deriving:派生
description:描述,描写
collection:集合
programmatic:编程的
a set of:一系列、一组
overview :概述
related 相关的
declared in:声明在…(文件里)
availability:可用的
framework:框架、类库
Conforms to:服从….协议
Conforms :服从
dynamic:动态
term:条目
exact:确切的
membership:成员
entry:条目
consists of:由…组成
unique:独特的、唯一的
determined:决定
conform to:服从,遵照
protocol:协议
distinct:不同的、独特的
addition:添加、增加
literals:字面量
denote:表示,指示
category:类目、分类
concrete:具体的
decouples:解耦
KVC:Key-Value Coding:键值对编码

Getting Numeric Values:获得一个数值
Identifying and Comparing Strings:识别和比较字符串
Replacing Substrings:替换子串
Finding Characters and Substrings:查找字符和子串
Dividing Strings:分割字符串
Combining Strings:拼接字符串
Getting C Strings:得到c语言的字符串
Getting Characters and Bytes:获取字符或字节
Getting a String’s Length:得到字符串的长度
Writing to a File or URL:把内容写到一个文件或者URL里
Creating and Initializing a String from a File:从文件里创建并初始化一个字符串
Deprecated:弃用
Creating and Initializing Strings:创建初始化字符串
tasks:功能
Adopted Protocols:采用的/服从的协议

 

 

 

 

 

1: local declaration “XXX”hide instance variable

reason:一般是你函数里面定义的变量和class属性变量重名了。很少有和系统变量重名的情况。 这样的情况,修改一下变量的名字就好。

 

 

2、Undefined symbols for architecture x86_64:

 可能由于某些类库不支持64位Architecture造成,

 可以在项目Build Setting=》Architecture设为非64位的选项

 

3、编译warning:ld: warning: directory not foundfor option

 

 选择工程, 编译的 (targets)

 选择 Build Settings 菜单

 查找 Library Search Paths 和 Framework Search Paths,删掉编译报warning的路径即OK

 

4、Undefined symbols for architecture armv7s: “_OBJC_CLASS_$_SZAdWebViewDelegate”, referenced from:xxxx

 查找了半天,总以为缺少某个文件,后对比正常的sample发现问题出在armv7s,这是针对iPhone5 cpu优化的编译,可能你某个库不支持,解决方法是:

 Build Setting->Build Active Architecture only 的值由NO设为YES,查了一下这个选项的资料:

 

 这个属性设置为yes,是为了debug的时候编译速度更快,它只编译当前的architecture版本。

 而设置为no时,会编译所有的版本。

 这个是设备对应的architecture:

 armv6:iPhone 2G/3G,iPod1G/2G

 armv7:iPhone 3GS/4/4s,iPod3G/4G,iPad1G/2G/3G

 armv7s:iPhone5, iPod5

 编译出的版本是向下兼容的(不太对,应该说,设备是向下兼容的),比如你设置此值为yes,用iphone4编译出来的是armv7版本的,iphone5也可以运行,但是armv6的设备就不能运行。

 所以,一般debug的时候可以选择设置为yes,release的时候要改为no,以适应不同设备。

 

5、Xcode “Attaching to…” 卡住,模拟器停留在启动界面

 网上有很多方法,什么Clean Build Folder,和各种删除,但有一个点是优先要考虑的,就是host没有修改过,修复如下:

 

 

 

 

 

1、error: macro names must be identifiers YourProject_prefix.pch

原因: 因为你弄脏了预处理器宏,在它处于<Multiple Values>的时候修改了它

解决方法: Configiration选择All Configirations,清空它 然后分别重新定义你的Debug,Release,Distributin预处理器宏吧

2、warning: no rule to process file ‘$(PROJECT_DIR)/LoadingView.h’ of type sourcecode.c.h for architecture armv6

原因: Target里Compile Sources里含有头文件 了,那里面不需要头文件

解决方法: 从Target里Compile Sources里删除头文件

3、Command /Developer/Platforms/iPhoneOS.platform/Developer/Library/Xcode/Plug-ins/iPhoneOS Build System Support.xcplugin/Contents/Resources/copypng failed with exit code 1

原因: png图像文件拷贝失败,看看信息上面提示Can’t find哪个文件,一般都是从文件系统里删除文件而没有通过Xcode删除造成的,Xcode的项目配置文件依然纪录着这个文件的引用

解决办法: 给文件系统里增加相应的文件,或者从Xcode的Groups & Files删除它,或者从Target的Copy Bundle Resources里删除它

4、Code Sign error: The identity ‘iPhone Developer: Your Name’ doesn’t match any valid certificate/private key pair in the default keychain

原因: 签名错误

解决办法: Target -> Get Info -> Build -> Code Signing -> 修改签名

记得左上角的Configuration类型要跟当前Build类型对应(Debug, Release, Distribution),否则改了也白改

5、could not create bundle folder for versioned model *.moda(好像是这个后缀名的这个文件)

原因:编译一次会产生一个新的

解决办法:应该把编译产生出来的moda文件都删了,然后clean下工程,重新build即可

6、error:There are no valid certificate/private key pairs in the default keychain

7、error:Cannot assign to ‘self’ outside of a method in the init family

原因:只能在init方法中给self赋值,Xcode判断是否为init方法规则:方法返回id,并且名字以init     +大写字母开头+其他  为准则。例如:- (id) initWithXXX;

出错代码:- (id) Myinit{

 self = [super init];

 ……

}

解决方法:- (id) initWithMy

{

 self = [super init];

}

 

1, iOS真机调试时,报错:failed to get the task for process 20900

原因:

证书问题,project和targets的证书都必须是开发证书,ADHOC的证书会出现此问题。

解决方案:

    project和targets的证书使用开发证书。

2,当 一个socket正在连接,这时又一个新的socket建立链接,会抛出错误 “ Attempting to connect while connected or accepting connections. Disconnect first.”。

原因:

第一个socket还没返回isConnected  为YES,   就建立第二个socket连接。

解决方案:

AsyncSocket有个属性叫isDisconnected,但接口并未开放,将- (BOOL)isDisconnected;

加入到AsyncSocket.h中。

然后在连接处:

if(![_sendSocket isDisconnected])

    {

        [_sendSocket disconnect];

    }

3,tcp socket willDisconnectWithError:Error Domain=NSPOSIXErrorDomain Code=65

 “The operation couldn’t be completed. No route to host”

        No route to host (socket error ::10065) 

       产生此问题的原因:网络连接不上此服务器。

       解决:查看ip是否正确,查看调试设备网络连接是否正常。

4,报错:CALayer bounds contains NaN:

绘图时,某个长宽值中包含除数为0的操作。

 

5,报错:libxml/tree.h not found

      解决方案:

      步骤1:

      工程–>PROJECT–>Build Settings

      将“Header Search Paths”的值设置为<${SDK_DIR}/usr/include/libxml2>即可。

      步骤2:

      工程–>TARGETS–>Build Settings

      将“Header Search Paths”的值设置为<${SDK_DIR}/usr/include/libxml2>即可。

倒数第三个问题:

《出现找不到第三方库文件问题, invalid bitcode signature 不妨试试下面的方法》

意思是有重复的,解压.a文件,删除重复的文件之后,再重新打包,导入到项目中

iOS解压静态库.a文件

先先准备一个静态库.a文件,比如叫libWeiboSDK.a,放在桌面的test目录里。

1、首先进入到libWeiboSDK.a文件夹 file一下libWeiboSDK.a,看一下该文件包含几种arch。

    执行: cd /Users/dotnar/Desktop/Test

                file    libWeiboSDK.a

    打印:

libWeiboSDK.a: Mach-O universal binary with 4 architectures: [arm_v7:current ar archive] [x86_64]

libWeiboSDK.a (for architecture armv7):current ar archive

libWeiboSDK.a (for architecture arm64):current ar archive

libWeiboSDK.a (for architecture i386):current ar archive

libWeiboSDK.a (for architecture x86_64):current ar archive

可以看到该文件包含四种arch,分别是armv7、arm64、i386、x86_64

2、抽离其中一个arch ,由于下面抽离object的时候必须是要单一的库,所以这里我们之抽出armv7并命名为armv7.a:

执行:lipo libWeiboSDK.a -thin armv7 -output armv7.a

这时候应该在test目录下多了一个v7.a文件。

3、抽离.a文件的object

执行:ar -x armv7.a

你会发现在test目录下多了很多.o文件

4、转换.o文件 (如下的NSData+WBSDKBase64.o文件)

执行:nm NSData+WBSDKBase64.o> NSData+WBSDKBase64.m

此时你会发现生成了一个NSData+WBSDKBase64.m

以上是解压步骤,打包资料很多,自行百度

倒数第二个问题:

《出现找不到第三方库文件问题, invalid bitcode signature 不妨试试下面的方法》

《出现找不到第三方库文件问题, invalid bitcode signature 不妨试试下面的方法》

升级第三方库的时候,报这个错误,前两个错误可以看出,升完级之后,MAMapKit文件需要在lib中导入一个小库,即《出现找不到第三方库文件问题, invalid bitcode signature 不妨试试下面的方法》

后面的那几个问题则是,升完级之后,也是没有导入相应的小库,查看极光API,查看新版特性,导入库则可,(遇到问题不知道从何下手时,仔细看一下错误提示,进入相应的错误界面,查看导入了哪个第三方库,然后查看cocoapods库的时候,没有导入啥,在手动导入)。

最后一个,打开项目,突然就出现了这个问题

《出现找不到第三方库文件问题, invalid bitcode signature 不妨试试下面的方法》

分析中:后来测试了好几种方法,最后把重点放到了前几天刚添加的友盟统计上,只要一调用这个方法,就会报错

《出现找不到第三方库文件问题, invalid bitcode signature 不妨试试下面的方法》

解决办法:将debug模式改为release模式,再次运行,OK了,如果你的还不行的话,就先不要他了,明天或者后台,他自己也就会好的

我虐代码千百遍,代码待我如初恋!

    原文作者:加油骑士
    原文地址: https://blog.csdn.net/namoweixiao123/article/details/78124750
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞