IOS引入第三方冲突解决办法

最近项目组在做一些第三方功能的集成,不止一次的遇到第三方库冲突的问题,需要将冲突部分进行手动移除.

一般第三方的.a支持不同平台,需要将各个平台的冲突的xxx.o删除,才能解决引入冲突问题.

写了一个简单的脚本,可以删除冲突xxx.o,并且重新生成.a

参数${1}为与工程冲突的第三方功能的.a名称

参数${2}为冲突的.o文件名称

#!/bin/sh
DEVICE_ARCHS=("armv7" "armv7s" "arm64" "i386" "x86_64")
extra_count=${#DEVICE_ARCHS[@]}
for((i=0;i<extra_count;i++));do
mkdir -p ${DEVICE_ARCHS[i]}
done
for((j=0;j<extra_count;j++));do
    echo ${DEVICE_ARCHS[j]}
    lipo ${1}.a -thin ${DEVICE_ARCHS[j]} -output ${DEVICE_ARCHS[j]}/${1}_${DEVICE_ARCHS[j]}.a
    cd ${DEVICE_ARCHS[j]} && ar xv ${1}_${DEVICE_ARCHS[j]}.a
    rm -rf ${DEVICE_ARCHS[j]}/${1}_${DEVICE_ARCHS[j]}.a
    rm ${2}.o
    cd .. && ar rcs ${DEVICE_ARCHS[j]}/${1}_${DEVICE_ARCHS[j]}.a ${DEVICE_ARCHS[j]}/*.o
    rm -rf ${DEVICE_ARCHS[j]}/*.o
done

rm ${1}.a
string=‘‘
for((j=0;j<extra_count;j++));do
string+=${DEVICE_ARCHS[j]}/${1}_${DEVICE_ARCHS[j]}.a‘ ‘
done

lipo -create ${string} -output ${1}.a

for((i=0;i<extra_count;i++));do
rm -rf ${DEVICE_ARCHS[i]}
done

样例:

sh ./xxx.sh libX xxx

执行完成后libX.a中的xxx.o会被移除

时间: 2024-11-08 17:19:23

IOS引入第三方冲突解决办法的相关文章

Android中View类OnClickListener和DialogInterface类OnClickListener冲突解决办法

如下面所示,同时导入这两个,会提示其中一个与另一个产生冲突. 1 import android.view.View.OnClickListener; 2 import android.content.DialogInterface.OnClickListener; 其实,当我们用某个Listener时,不一定就要import它,直接用全名去定义就不需要import了,例如 1 mButton1.setOnClickListener(new OnClickListener() 2 { 3 4 @O

std::min和自定义宏冲突解决办法

#include<algorithm> #include<iostream> #define min(a,b)!(b<a)?a:b int main(){ int a=1,b=2; std::cout<<(std::min)(a,b); return 0; } 加入一个括号,std::min就不会被宏替代了. std::min和自定义宏冲突解决办法

ecshop transport.js 和 jquery 冲突解决办法

您提供一个简单的解决transport.js 和 jquery 方法: 在 page_header.lbi 库文件中加入如下代码,注意操作顺序: 1.先导入transport.js  文件 {insert_scripts files='transport.js,utils.js'} 2.然后导入您网站使用的jquery文件 <script language="javascript" src="您的jquery存放路径"></script> 3

git 冲突解决办法

在项目中使用git管理,冲突是在所难免的,如果没办法解决冲突,可以试试这个办法! 第一步.对工程进行备份,最好是拷贝到其他文件夹中 第二步.在cmd命令栏上,进入到工程目录下,这里的工程只你正在开发的工程 第三步.输入命令 git stash git stash clear git reset --hard  id 注:id指你上传文件的id,在eclipse中右键工程->team->show in history 就可以看到上传的id git pull 第四步.刷新工程 第五步.将备份好的工

IOS lib(.a)库冲突解决办法

在引入第三方lib(.a)库时,经常会由于第三方lib库中又引入同你现有工程相同的开源代码而造成.o冲突,最近在集成汉王名片识别时发生ASIHttp的.o冲突.我想说的是像这种开源的使用率很高的源代码本不应该包含在lib库中,就算是你要包含那也要改个名字是吧.不过没办法现在人家既然包含,我们就只有想办法分离了. 1.依次查看lib库所支持的框架类型.i386:模拟器,armv7:iphone4,armv7s:iphone5,iphone5s,arm64:iphone6,iphone6p. 1 a

iOS进行MD5加密libary冲突解决办法

进行md5加密的时候加入liblibcommonCrypto.dylib遇到libary冲突 报library not found for -lcommonCrypto和libcommonCrypto.dylib.Link against the umbrella framework 'System.framework'错误 解决办法 删除liblibcommonCrypto.dylib 倒入 JavaScriptCore.framework #import <CommonCrypto/Comm

Maven jar包冲突解决办法

下面两个配置有简洁的包依赖冲突: <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>1.7.5</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId

.Net Framework项目引用.NetStandard标准库出现版本冲突解决办法

今天在工作中出现一个引用问题,害我找问题找了很久.起因是在一个Winform项目下需要引用一个.NetStandard标准库,标准库引用了System.ComponentModel.Annotations程序集,版本是4.5.0,在Winform项目运行过程中抛出了以下异常: “未能加载文件或程序集“System.ComponentModel.Annotations, Version=4.2.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3

Tomcat 在mac上(Idea)端口冲突解决办法

Port already in use: 1099 在mac上解决办法直接是找到占用1099端口的pid: 解决方式: lsof -i:1099 回车,之后会有pid,然后执行 kill (pid号) 最后问题就得到了解决! 注意:有的时候kill不能将占用端口的pid kill掉,所以只能查到pid,这个时候可以打开mac的"活动监视器 "进行查看相对应的pid 对应的进程,找到之后将其关闭就可以了. (左上角的那个灰色x按钮就能关闭) 在windows 上可以在程序管理器上进行相同