文章转载自杨君的小黑屋,对排版进行了一些调整
前言
本文会介绍一个自己写的工具,能够把第三方iOS应用转成动态库,并加载到自己的App中,文章最后会以支付宝为例,展示如何调用其中的C函数和OC方法。
工具开源地址:
https://github.com/tobefuturer/app2dylib
文章转载自杨君的小黑屋,对排版进行了一些调整
本文会介绍一个自己写的工具,能够把第三方iOS应用转成动态库,并加载到自己的App中,文章最后会以支付宝为例,展示如何调用其中的C函数和OC方法。
工具开源地址:
https://github.com/tobefuturer/app2dylib
最近整理项目,发现用到了很多第三方的SDK,这些SDK都是直接拖到项目里面的比较乱,打算把这些乱七八糟的第三方SDK全都交给 CocoaPods 来管理。
你不知道 CocoaPods 是什么?给你个传送门 https://cocoapods.org
这里我用微信 SDK 来举个栗子,从微信开发者中心下载对应的 SDK。
在iOS7之前我们可以通过- (NSString *)uniqueIdentifier
这个方法获取iPhone的唯一标识符,也叫作UDID。不过自从iOS7苹果就把这个方法给禁了,此时我们想要获取iPhone的唯一标识符就很困难。
不过苹果提供一个叫做IDFA的标识符,这个IDFA是广告标识符用来追踪广告投放的,不过用户可以在设置中手动重置IDFA,可靠性很低,目前常见的两种标记iPhone的方式为
这两种模式都有个弊端,用户重置手机或者刷机唯一标识符会发生变化,不过对于大多数情况是够用了。看来苹果是把路给封死了,有没有办法拿到之前的UDID呢?我们注意到iPhone的设置通用关于里面有手机的硬件信息,其中有一个serialNumber,这个serialnumber就是我们查询手机是否过保的依据,那么它肯定是唯一的,所以下文是围绕这个进行的探索。最终是可以拿到这个serialNumber的, 不过由于苹果的沙盒限制,所以只能在越狱机中拿到,如果想在非越狱机中拿到必须添加entitlements文件来获取权限,可想而知这个应用是无法上架的。下文仅作为逆向工程的一种思路和探索
平时在写js代码时会用到一些简单的计算,比方说系统中我们数据库储存的金额是分,前端展示的是元,所以在用户输入元之后要转成分传给后台,这个公式小学一年级就学过了
1 | 1.11*100 = 111 |
一般来说这个计算结果是没问题的,但是在js里面却有这样的尴尬
1 | 1.11*100 = 111.00000000000001 |
结果不是我们想要的111,类似的情况还有
1 | 0.1+0.2 = 0.30000000000000004 //加法 |
一般遇到这种问题,我们都有成熟的解决方案解决
用着用着就习惯了,一直没有搞清楚为什么会有这样的误差。这两天正好有空,看了一些博客终于搞清楚了。
下文的讨论基于ARC
平时开发中我们遇到block里面引用self的情况,大部分都是这样处理的
1 | __weak typeof(self) weakSelf = self; |
转载请注明出处:来自LeonLei的博客http://www.gaoshilei.com
我们习惯了这样用,貌似这样用了之后可以解决循环引用的问题,而且可以保证block执行之前self不会被释放掉?真相总是残酷的,然而事实并非如此!下面将会对block中引用self的三种方式进行讨论,并给出原因和另外一种解决方案。
1 | `Undefined symbols for architecture x86_64: |