作者最近的公司项目要做实现rar解压的功能,在网上找了很久貌似关于rar解压的资料很少,不过有很多人推荐一个名叫“Unrar4iOS”的第三方开源框架,于是下载并尝试使用发现该开源框架并在使用过程中发现了一些存在的问题,特在此做下总结让后来人少走些弯路。

1.不支持armv7s;
2.编译好的framework中将Unrar4iOS.h和Unrar4iOS.mm编译在内有些方法并未实现,比如-(BOOL) unrarFileTo:(NSString*) path overWrite:(BOOL) overwrite;该方法的实现居然是空的也就是什么都没做(原作者最终虽然更新了两个文件但是并未重新编译framework);
3.对于第二个问题可能有人会说把Unrar4iOS.h和Unrar4iOS.mm这两个文件重新拉近项目中不就可以了吗?答案是“如果你的项目中other link flags没有设置为-ObjC是可以这么做的,否则的话会报一些标识符重复的错误”。
 
针对以上各种问题我本来想用最新源码重新编译一个framework以支持armv7s,但是把源码拖进其它工程报出各种编译错误,由于时间问题最终还是放弃了,如果有哪位好心人将最新的远吗编译成功了一个framework的话欢迎给我留言或者直接拿出来开源(广大码农将不胜感激)。
 
那么现在就来说说我是如何做的吧
其实我也是采用了上面说的第三个问题中提到的方法,我们的主工程other link flags设置了-ObjC这是一个摆在眼前的事实,我不能为了集成这一个framework而去修改主工程的配置(修改的话涉及面太多),那么只能从重复标示符下手了,既然重复了我把你修改掉不就行了嘛(退一步海阔天空),不过像我这么做的话第一个问题是不能解决了只能忍痛舍弃armv7s,语言再多总是显得太苍白,下面我会教大家一步一步的将该framework集成进你的工程确保不报错。
 
第一步:下载源码。链接:https://github.com/ararog/Unrar4iOS
第二步:将解压后的Unrar4iOS目录下的RARExtractException和Unrar4iOS的.h.m文件、Unrar4iOSExample->Frameworks->Unrar4iOS.framework分别拖进你的工程并勾选copy,如下图所示:
 
这时如果你的工程开启了ARC的话可能会报一下错误,将autorelease删除掉即可。

 
再次运行还是会报错
因为raros.hpp和dll.hpp的头文件被包含在framework内,所以我们要采用尖括号“<>”的方式引入这两个头文件,修改后如下:
 
再次运行,又会发现一些ARC的问题,将release等删掉即可
 
至此你的工程应该能在模拟器上编译成功了,换下真机编译试试,是的会报之前说的那个armv7s的错误
 
修改方法:将第一个红框内的YES改为NO,删除第二个红框内的arm64和armv7s,只保留armv7.
 
还有一件事别忘了添加libz.dylib
现在你可以查看一下你的工程配置,如果下图所示的other link flags没有设置-ObjC标记,那么到现在你已经可以成功的在模拟器和真机上使用Unrar4iOS.framework了,如果你和我一样设置了-ObjC标记的话请继续往下看
 
如果设置了-ObjC的话你应该会看到以下错误提示标识符重复,原因是我们拖进来的Unrar4iOS.mm的实现文件和framework中的文件重复了
具体解决办法是先将Unrar4iOS和Unrar4iOS.mm这两个文件从工程中删除掉,待修改完成后再重新添加进来,我的做法是将这两个文件重新命名为“KWUnrar4iOS.h和KWUnrar4iOS.mm”并将KWUnrar4iOS.mm中两个“CallbackProc”修改为“CallbackProcc”,完成这一步后就可以把这两个文件重新添加进工程,最后修改后的工程结构如下:
 
真机编译ok,到此终于完成了所有的步骤,下面放出我自己的demo链接
https://github.com/zzltjnh/Unrar4iOSDemo
 
------------------------------------------华丽丽的分割线---------------------------------------------
*昨天好多人反映不支持arm64的应用无法提交appStore,因此今天又将这个东东搞了一下。
未完待续。。。
 
 
 

iOS关于rar解压第三方库Unrar4iOS使用总结的更多相关文章

  1. ubuntu 下rar解压工具安装方法

    1.压缩功能安装 sudo apt-get install rar卸载 sudo apt-get remove rar2.解压功能安装 sudo apt-get install unrar卸载 sud ...

  2. centos系统安装rar解压工具unar

    centOS上不支持rar解压,需要额外安装软件,收费版是unrar,免费版是unar unar在centOS上安装需要源码编译,下面是安装方法: 1.安装依赖 yum install gnustep ...

  3. rar 解压

    三.rar命令语法 将/etc 目录压缩为etc.rar 命令为: rar a etc.rar /etc 1 将etc.rar 解压 命令为: rar x etc.rar unrar -e etc.t ...

  4. linux 下安装rar解压

    在liunx下原本是不支持rar文件的,需要安装liunx下的winrar版本,操作如下 wget http://www.rarsoft.com/rar/rarlinux-4.0.1.tar.gz t ...

  5. Linux tar.gz 、zip、rar 解压 压缩命令

    tar -c: 建立压缩档案 -x:解压 -t:查看内容 -r:向压缩归档文件末尾追加文件 -u:更新原压缩包中的文件 这五个是独立的命令,压缩解压都要用到其中一个,可以和别的命令连用但只能用其中一个 ...

  6. linux rar 解压忽略带密码压缩包

    #解压忽略密码 rar x -p- file.rar #解压忽略子目录 rar x -ep file.rar

  7. 在centos下安装rar解压.rar压缩包

    CentOS本身不自带rar环境,因此对于rar文件无法直接解压,需要先配置rar环境. 首先需要确定自己的系统是64位还是32位的,通过这个命令: [root@localhost]# uname - ...

  8. ios paper for facebook 使用第三方库

    facebook paper使用的第三方库 Facebook Paper使用的第三方库 第三方库名 简介 链接 ACE code editor https://github.com/ajaxorg/a ...

  9. iOS真机调试引入第三方库(如友盟等)编译时候,出现错误提示

    用Xcode 7 beta 3在真机(iOS 8.3)上运行一下工程,结果发现工程编译不过.看了下问题,报的是以下错误: MARK:解决方法:在building Setting 中设置bitCode ...

随机推荐

  1. 2014 Super Training #8 B Consecutive Blocks --排序+贪心

    当时不知道怎么下手,后来一看原来就是排个序然后乱搞就行了. 解法不想写了,可见:http://blog.csdn.net/u013368721/article/details/28071241 其实就 ...

  2. Android配置----adb工具的使用

    Adb(android debug bridge):android 调试桥,用于将本地的文件 push 到环境中,或者从手机环境中 pull 文件到本地. 一.ADB的主要功能: · 运行设备的she ...

  3. Linux环境安装Jenkins

    安装环境: CenOS 6.4 JDK_1.6.0_23 一.安装前检查环境 检查是否安装JDK: java --version 二.安装Jenkins 1. 添加Jenkins的源(reposito ...

  4. java 10-4 Scanner方法

    Scanner:用于接收键盘录入数据  常用的两个方法(int举例): public int nextInt():获取一个int类型的值 public String nextLine():获取一个St ...

  5. 第三方登录之qq登录(转载)

    iOS QQ第三方登实现   我们经常会见到应用登陆的时候会有QQ,微信,微博等的第三方登陆 如图: 下面我们主要讲一下qq的第三方登陆如何实现 首先,到官网注册: http://wiki.conne ...

  6. UWP 解压 GZIP

    准备工作: 通过 NUGET 安装 Microsoft.Bcl.Compression ; 使用命名空间 using System.IO.Compression ; public static asy ...

  7. mvc4中的 webapi 的使用方式

    目录 一:简单介绍什么是Web api 二:怎么定义的 Post Get Put 和 Delete 三:简单使用,直接从前台传递一个类到后台接收 四:其他获取值的方式 一:简单介绍什么是Web api ...

  8. 分享基于EF+MVC+Bootstrap的通用后台管理系统及架构(转)

    http://www.cnblogs.com/guozili/p/3496265.html 基于EF+MVC+Bootstrap构建通用后台管理系统,集成轻量级的缓存模块.日志模块.上传缩略图模块.通 ...

  9. 在opencv3中实现机器学习之:利用正态贝叶斯分类

    opencv3.0版本中,实现正态贝叶斯分类器(Normal Bayes Classifier)分类实例 #include "stdafx.h" #include "op ...

  10. 就是要你明白机器学习系列--决策树算法之悲观剪枝算法(PEP)

    前言 在机器学习经典算法中,决策树算法的重要性想必大家都是知道的.不管是ID3算法还是比如C4.5算法等等,都面临一个问题,就是通过直接生成的完全决策树对于训练样本来说是“过度拟合”的,说白了是太精确 ...