Xcode 打包常见错误问题

xzhuan原创稿件,转载请注明出处!
建议搜索关键字查找解决方案

问题1: iOS error “_OBJC_CLASS_$_ASIdentifierManager”, referenced from: objc-class-ref in
解决方案: 选中TARGETS: Build Phases/Link Binary With Libraries(24 items)
添加AdSupport.Framework类库即可

问题2:接微信登录IOS SDK编译错误
Undefined symbols for architecture arm64:
 "_OBJC_CLASS_$_CTTelephonyNetworkInfo", referenced from:
     objc-class-ref in libWeChatSDK.a(MTAHelper.o)
解决方案 Build Phases-Link Binary With Libraries 添加库 CoreTelphony.framework

问题3:接微信登录IOS SDK 于Build Settings - Other Linker Flags 添加 -Objc 和 -all_load导致和 Tolua的 libtolua.a库冲突,错误如下:
   duplicate symbol _toluaflags in:
   /Users/tcw/Desktop/DSJ/Libraries/Plugins/iOS/libtolua.a(tolua-81B774E523FFB654.o)
   /Users/tcw/Desktop/DSJ/Libraries/Plugins/iOS/libtolua.a(int64.o)
ld: 1 duplicate symbol for architecture arm64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

解决方案:
①删除掉 Other Linker Flag 的 -all_load 就可以解决静态库冲突的问题,
但是这样做的话,会使一些外部的静态库,使用objc扩展函数(catagory)的方法失效

②如果是有些库使用到了扩展函数(catagory)可以分别对这个库进行加载
使用:-force_load
-force_load Libraries/Plugins/iOS/libWeChatSDK.a
(Libraries是添加到当前目录下的)
或
-force_load $(BUILT_PRODUCTS_DIR)/libxxx.a
(这里是直接添加静态库项目源码的做法)
使用-force_load分别进行加载还是蛮方便的,如果有些函数加入了main函数使用all_load就相当麻烦了。
以上可以解决libtolua.a与libWeChatSDK.a的冲突

③如果两个静态库冲突的结构是相同的,可以考虑将两个静态库拆分出来进行合并。
查看文件的架构有哪些
$ lipo -info libtolua.a
Architectures in the fat file: libtolua.a are: armv7 (cputype (12) cpusubtype (11)) i386 
将armv7解压出来
lipo libtolua.a -thin armv7 -output libtolua-armv7.a
新建立一个文件夹出来存放解压的(.o)文件
$ mkdir armv7
$ cd armv7
将静态库中的文件解压
$ ar -x ../libtolua-armv7.a
然后将另一个静态库根据以上的步骤做一遍,然后观察连个解压的静态库中,有那些是一样的就合并在一起,不过注意的是两个静态库冲突的(.o)文件必须一致,否则也会出现错误。
合并完后进行打包了
$ libtool -static -o ../libnew-armv7.a *.o
如果像在虚拟机也使用,进行相同的步骤后,将i386的架构合并再一起就可以了。
合并静态库
$ lipo -create -output lib.a libnew-armv76.a libi386.a
此过程稍微繁琐~~


问题4:error: 'openssl/asn1.h' file not found
原因: iOS 引入支付宝 缺少 #include   报错
解决方法:
在 Building Settings -> Search Paths -> Header Search Paths 里添加 aliPay.SDK(因为openssl/asn1.h就在这个文件夹里) 的路径进去就可以了
示列:  "$(SRCROOT)/Libraries/Plugins/iOS/PaySDK/sdk/alipay"


问题5: iOS-Duplicate Symbol链接错的原因总结和解决方法
原因:
       5.1  #import "ClassA.m” // 书写问题
       5.2  同一个类,实现两次,即有两个@implementation 
       5.3  Targets的Build Phase设置项里,查看Complie Sources这一项,看看出现问题的类是不是有重复的,用文件名过滤也比较容易发现。


问题6: /Users/mac/Desktop/ios/MapFileParser.sh: Permission denied报错
原因:权限问题
解决方法:
打开控制台,执行
chmod a+x /Users/mac/Desktop/ios/MapFileParser.sh

你可能感兴趣的:(Xcode 打包常见错误问题)