获取iPhone中登陆过的WiFi密码
1.在iPhone中登陆iCloud ,钥匙串选择使用iCloud
2.在同一AppleID账号登陆的Mac上去钥匙串中查看对应的WiFi密码
3.查看密码需要输入电脑账号密码。
Architechtures
armv6, armv7, armv7s, arm64指的是arm处理器的指令集。(真机)
i386, x86_64指的是pc端处理器指令集。(模拟器)
xcode中,指令集相关的选项主要有三种:
1,Architectures:该选项指定工程可被编译成支持何种指令集的数据包。由于工程会针对每一种指令集编译出对应的二进制数据包,所以支持的指令集越多,对应生成的ipa包就越大。
2,Valid Architectures:限制了工程可支持的指令集范围。即,工程最终支持的指令集在valid architectures定义的这个范围之内,所以工程最终编译出的包支持的指令集将由Architetures和Valid Architectures选项定义的指令集的交集决定。
3,Build Active Architecture Only:设定是否只编译出当前连接设备所支持的指令集。一般,debug的时候可指定为YES,为了debug的时候编译速度快;release的时候指定为NO,以适应不同的设备。
CocoaPods
pod update 太慢
手动去 GitHub 下载master spec,发现后续的更新有问题
问题:[!] CocoaPods could not find compatible versions for pod “UMCAnalytics”:
In snapshot (Podfile.lock):
UMCAnalytics (= 6.0.2)
In Podfile:
UMCAnalytics
None of your spec sources contain a spec satisfying the dependencies:UMCAnalytics, UMCAnalytics (= 6.0.2)
.
You have either:
out-of-date source repos which you can update withpod repo update
or withpod install --repo-update
.
mistyped the name or version.
not added the source repo that hosts the Podspec to your Podfile.
Note: as of CocoaPods 1.0,pod repo update
does not happen onpod install
by default.
需要更新master索引库
更新 master 索引库
更新到一半报错:[!] /usr/bin/git clone https://github.com/CocoaPods/Specs.git master --progressCloning into ‘master’…remote: Counting objects: 1076833, done.remote: Compressing objects: 100% (100/100), done.error: RPC failed; curl 56 SSLRead() return error -980654.00 KiB/sfatal: The remote end hung up unexpectedlyfatal: early EOFfatal: index-pack failed
1.先查看源 gem sources 如果包含https://rubygems.org继续,否则,gem sources -a https://rubygems.org
2…安装 railgem install rails
3.pod setup
如果直接复制master 到respo 会导致后期无法更新pod ,自行添加.git也不行
carthage
carthage update --platform ios(下载库的时候)无法构建 framework
Failed to write to /Users/xx/Documents/think_tank/swiftDemo/Carthage/Build/iOS/SwiftyJSON.framework: Error Domain=NSCocoaErrorDomain Code=260 "The file “SwiftyJSON.framework” couldn’t be opened because there is no such file." UserInfo={NSFilePath=/Users/dushengjia/Library/Developer/Xcode/DerivedData/SwiftyJSON-amrebnrlsfqwjubevczxildlcwzc/Build/Products/Release-iphoneos/SwiftyJSON.framework, NSUnderlyingError=0x7f90ef7964a0 {Error Domain=NSPOSIXErrorDomain Code=2 "No such file or directory
字符串宏
#define NSString(...) [NSString stringWithFormat:__VA_ARGS__](字符串宏)
ReactiveObjectC
函数响应式编程
a = b + c,赋值之后 b 或者 c 的值变化后,a 的值不会跟着变化,而响应式编程的目标就是,如果 b 或者 c 的数值发生变化,a 的数值会同时发生变化
核心思想
创建信号->订阅信号(subscribeNext)->发送信号
swift
区间
"…< “与“…”,前面半开半闭,后面是闭区间
类型装换符
as
1.子类转父类
2.数值类型装换
3.switch中的模式匹配
as!
类型强转 有 crash 风险
as?
可选转换,转换不成功 返回nil
runtime
object_getClass 获取变量类名
UI
设置状态栏
override var preferredStatusBarStyle: UIStatusBarStyle {
return UIStatusBarStyle.lightContent//只有白色和黑色
}
设置导航栏
tintColor 设置导航栏、标签栏的颜色
//去掉导航栏底下的黑线
self.navigationController?.navigationBar.shadowImage = UIImage.init()
self.navigationController?.navigationBar.titleTextAttributes = [NSAttributedStringKey.foregroundColor: UIColor.black]//设置字体颜色
bounds 坐标原点是屏幕, frame 坐标原点是父控件
*UITableView.tableFootView 要设置一个bgView 再添加子控件才可以显示正常的frame 设置。
动态静态cell混用,必须用到storyBoard ,要设定cell 的高度,否则会奔溃(报数组越界)
UITableViewController 手势侧滑返回半路取消,view 会整体下移
按钮设置了图片设置它unable ,会导致图片变灰白,如果不想它响应事件应该 把用户交互设为false
CUICatalog: Invalid asset name supplied: (null)因为设置图片的时候字符串为空
屏幕宽高
iPhone4.4s 320480
iphon5,5s,5c,se 320568
iphone6,6s,7,7s,8 375 *667
iphone6p 7p,8p 414 *736
iPhonex 375 812
iphonexs iPhonexr 414896
Xcode
Xcode快捷键
1 cmd + . 停止
2 cmd + 1~8工程导航
3 cmd + 0 控制左边的显隐
4 cmd + opt + 0 控制右边的显隐
5 cmd + shift + y 控制下边的显隐
6 cmd + g 结合cmd + f 查找下一处
7 cmd + shift + g 查找上一处
8 cmd + l 调到某一行
9 cmd + shift + o 查找类
10 cmd + shift + j 定位类在文件的位置
11 cmd + ctl + 箭头 .h 和.m的相互切换
12 cmd + shift + 0 查看文档
13 cmd + opt + t 控制上边的工具栏
14 cmd + opt + 左右箭头 收放方法体
15.cmd + 方向键 (模拟器的方向)
xib
@IBDesignable
在视图类前面声明,实时在xib 查看@IBInspectable 定义过的属性的修改情况
@IBInspectable
在 Xcode 右侧面板添加自定义的运行时属性
问题
dyld: Library not loaded: /usr/local/opt/readline/lib/libreadline.7.dylib
Referenced from: /usr/local/bin/awk
Reason: image not found(Xcode Version 10.1 beta (10O23u)刚升级)
方法一
brew upgrade gawk
方法二
ln -s /usr/local/opt/readline/lib/libreadline.dylib /usr/local/opt/readline/lib/libreadline.6.dylib
Xcode 命令不能用了!xcrun: error: active developer path ("/Applications/Xcode.app/Contents/Developer")?
1.使用终端命令:sudo xcode-select -switch /Applications/Xcode.app/Contents/Developer(注意这是xcode 实际的安装路径,要注意是 Xcode.app 还是 Xcod-beta.app 还是其他 )
xcode 10 缺少 libstdc++6.0.9
> 如果在pods 中有引用到需要到 pods 文件夹中的 debug&realse.xcconfig把他们删掉
文档注释突然不能用了
xx.entitlements
通知证书-在target-capabilties- Push Notifications-fix
> Xcode 10 Multiple commands produce 报错解决
New Build System会对构建中的元素循环进行严格的检查,避免不必要的重建,这个也是错误出现的原因。针对Xcode10(默认设置新创建系统)进行一下操作即可适应老项目不报错:
Xcode -> File -> Workspace Setting… -> Build System中选择(Legacy Build System) -> Done
运行项目即可
用Xcode10跑之前的项目,也就报了一种类型的错误:Multiple commands produce。这个的原因是项目中使用第三方库,里面有README.md,README.txt,LICENSE,Info.plist之类的,而且是不止一个库中有,重复的这些文件,导致的报错。 解决方案(如图):找到对应得第三方库的 target > Build phase > Copy Bundle Resource/Compile Sources,删掉第三方库中重复的上述文件即可。
xcode9 无线调试
步骤
step 1 到device 勾选 connect via network
step 2 等待设备出现地球标识 (未出现,要添加手机ip ,右键呼出connect via ip address)
step 3 拔线运行
注意
The device must have a passcode set in order to allow this operation (0xE8003FFE).
Way:手机要求没有设置开机密码
SDK制作替身进行调试
因为SDK开发不方便调试,而我们SDK开发过程中却经常需要断点调试,因此我们需要让我们的SDK工程可以像应用工程一样一直跑起来。
制作替身
新建一个应用工程或者直接用一个即将使用我们SDK的应用工程
找到他的位置
如果有过多相同的DerivedData可以删掉其他,只保留一个
回到我们的SDK 工程 Edit Scheme
Run 选择我们上面创建的app文件
我们选择Other,到上面build 的app 目录选择.app 文件
** 最后替身制作完毕**
我们就可以在应用工程Build, 在SDK工程Run ,愉快的打断点了。
duplicate symbo
重复实现了类,多个相同的implement
duplicate symbol _OBJC_IVAR_$_PAIMRobotSuggestQuestionModel._questions in:
PAIMKit2-edwhcbkwhuofamedwaqdwonhuwmm/Build/Intermediates.noindex/PAIMKit2.build/Debug-iphoneos/PAIMKit2.build/Objects-normal/arm64/PAIMRobotQuestModle.o
PAIMKit2-edwhcbkwhuofamedwaqdwonhuwmm/Build/Intermediates.noindex/PAIMKit2.build/Debug-iphoneos/PAIMKit2.build/Objects-normal/arm64/PAIMRobotQuestionModle.o
后缀和中间的差别最难区分
rename 类最容易导致这种问题
关于 引入SDK 对 IPA 的增量影响
SDK 种类
SDK 分静态库及动态库,静态库有两种:
1.xx.a
2.xx.framework
动态库 我们能创建的只有xx.framework
.对比这三种 SDK 自身的大小
如图所示,我们创建一个 demo ,分别添加三个 target ,DynamicSDK ,StaticSDK 以及 StaticSDK_ 代表动态库,framework静态库,.a 静态库 ,都统一加入一个自定义类DXQHelper及一个第三方开源库AFNetworking ,编译(支持 arm64 和 armv7 架构)后得到我们想要的库文件引入 SDK 打包 ipa
ipa (动态库)
ipa大小:1.1 MB (已压缩)
ipa包内文件:其中有一个Frameworks 文件夹下有我们的动态库DynamicSDK.framework 大小为 2.5MB
SDK_Dev 文件大小为:113kbipa (framework静态库)
ipa大小:25kb
ipa包内文件: 并无 Frameworks 文件夹,代码文件似乎直接并入了ipa 的源码二进制文件
SDK_Dev 文件大小为:71kbipa (.a静态库)
ipa大小:33kb
ipa包内文件: 同上
SDK_Dev 文件大小为:169kb结论
- 以上数据表明 三种 SDK 对 ipa的增量影响大小排序为动态库> .a 静态库>.framework 静态。
- 我们应该少用动态库(非必要的时候)例如:使用 Pods 时 不用兼容 swift 不使用use_frameworks!
- 虽然动态库降低了 SDK 开发难度,因为动态库的隔离性,我们不需要解决第三方库重复引入冲突的问题,但是会导致 ipa 冗余,越来越大,为 IPA 瘦身埋下伏笔。
- 架构也对 IPA 大小有影响,arm64 是 64 位的,armv7 是 32位的,如果我们 的动态库包含了这两个标准架构,即使 ipa 已经去掉了 armv 7 的支持,应用大小也不会变,应为上述的 Frameworks 文件夹下的动态库直接打进了 ipa内。
Demo地址
指令集
指令集
指令集对应的机型:
2018 A12芯片arm64e : iphone XS、 iphone XS Max、 iphoneXR
2017 A11芯片arm64: iPhone 8, iPhone 8 Plus, and iPhone X
2016 A10芯片arm64:iPhone 7 , 7 Plus, iPad (2018)
2015 A9芯片arm64: iPhone 6S , 6S Plus
2014 A8芯片arm64: iPhone 6 , iPhone 6 Plus
2013 A7芯片arm64: iPhone 5S | iPad Air | iPad Air2 | iPad mini2(iPad with Retina Display) |iPad min3
armv7s:iPhone5|iPhone5C|iPad4(iPad with Retina Display)
armv7:iPhone4|iPhone4S|iPad|iPad2|iPad3(The New iPad)|iPad mini|iPod Touch 3G|iPod Touch4
模拟器32位处理器测试需要i386架构,
模拟器64位处理器测试需要x86_64架构,
真机32位处理器需要armv7,或者armv7s架构,
真机64位处理器需要arm64架构,对应SYS_NAMELEN : iPhone6, iPad 4,1
工程配置–> 瘦身ipa
1 build settings >.Levels选项内)Generate Debug Symbols 设置为NO,这个配置选项应该会让你减去小半的体积。注意这个如果设置成NO就不会在断点处停下
2.舍弃架构armv7,armv7用于支持4s和4,如果追求缩小包体积的话可以去掉这个指令集 >build setting> architectures >valid architectures
3.去除无用的三方库、代码、readme
4、图片处理4.1 使用在线压缩png图片:https://compresspng.com/zh/
4.2 一些比较大体积的背景图片压缩成.jpg格式的。
4.3使用Assets.xcassets来管理图片也可以减小安装包的体积
5.build setting 里 DEAD_CODE_STRIPPING = YES(好像默认就是YES)。 确定 dead code(代码被定义但从未被调用)被剥离,去掉冗余的代码
6.Build Settings->Optimization Level有几个编译优化选项,release版应该选择Fastest, Smalllest[-Os],这个选项会开启那些不增加代码大小的全部优化,并让可执行文件尽可能小
7.Build setting>Develoyment >Strip Debug Symbols During Copy 和 Build setting >Code Generation >Symbols Hidden by Default 在release版本应该设为yes,可以去除不必要的调试符号。Symbols Hidden by Default会把所有符号都定义成”private extern”,设了后会减小体积。
8.Build setting> Develoyment >Strip Linked Product:DEBUG下设为NO,RELEASE下设为YES,用于RELEASE模式下缩减app的大小
// Output on a simulator
@"i386" on 32-bit Simulator
@"x86_64" on 64-bit Simulator
// Output on an iPhone
@"iPhone1,1" on iPhone
@"iPhone1,2" on iPhone 3G
@"iPhone2,1" on iPhone 3GS
@"iPhone3,1" on iPhone 4 (GSM)
@"iPhone3,3" on iPhone 4 (CDMA/Verizon/Sprint)
@"iPhone4,1" on iPhone 4S
@"iPhone5,1" on iPhone 5 (model A1428, AT&T/Canada)
@"iPhone5,2" on iPhone 5 (model A1429, everything else)
@"iPhone5,3" on iPhone 5c (model A1456, A1532 | GSM)
@"iPhone5,4" on iPhone 5c (model A1507, A1516, A1526 (China), A1529 | Global)
@"iPhone6,1" on iPhone 5s (model A1433, A1533 | GSM)
@"iPhone6,2" on iPhone 5s (model A1457, A1518, A1528 (China), A1530 | Global)
@"iPhone7,1" on iPhone 6 Plus
@"iPhone7,2" on iPhone 6
@"iPhone8,1" on iPhone 6S
@"iPhone8,2" on iPhone 6S Plus
@"iPhone8,4" on iPhone SE
@"iPhone9,1" on iPhone 7 (CDMA)
@"iPhone9,3" on iPhone 7 (GSM)
@"iPhone9,2" on iPhone 7 Plus (CDMA)
@"iPhone9,4" on iPhone 7 Plus (GSM)
@"iPhone10,1" on iPhone 8 (CDMA)
@"iPhone10,4" on iPhone 8 (GSM)
@"iPhone10,2" on iPhone 8 Plus (CDMA)
@"iPhone10,5" on iPhone 8 Plus (GSM)
@"iPhone10,3" on iPhone X (CDMA)
@"iPhone10,6" on iPhone X (GSM)
@"iPhone11,2" on iPhone XS
@"iPhone11,4" on iPhone XS Max
@"iPhone11,6" on iPhone XS Max China
@"iPhone11,8" on iPhone XR
//iPad 1
@"iPad1,1" on iPad - Wifi (model A1219)
@"iPad1,1" on iPad - Wifi + Cellular (model A1337)
//iPad 2
@"iPad2,1" - Wifi (model A1395)
@"iPad2,2" - GSM (model A1396)
@"iPad2,3" - 3G (model A1397)
@"iPad2,4" - Wifi (model A1395)
// iPad Mini
@"iPad2,5" - Wifi (model A1432)
@"iPad2,6" - Wifi + Cellular (model A1454)
@"iPad2,7" - Wifi + Cellular (model A1455)
//iPad 3
@"iPad3,1" - Wifi (model A1416)
@"iPad3,2" - Wifi + Cellular (model A1403)
@"iPad3,3" - Wifi + Cellular (model A1430)
//iPad 4
@"iPad3,4" - Wifi (model A1458)
@"iPad3,5" - Wifi + Cellular (model A1459)
@"iPad3,6" - Wifi + Cellular (model A1460)
//iPad AIR
@"iPad4,1" - Wifi (model A1474)
@"iPad4,2" - Wifi + Cellular (model A1475)
@"iPad4,3" - Wifi + Cellular (model A1476)
// iPad Mini 2
@"iPad4,4" - Wifi (model A1489)
@"iPad4,5" - Wifi + Cellular (model A1490)
@"iPad4,6" - Wifi + Cellular (model A1491)
// iPad Mini 3
@"iPad4,7" - Wifi (model A1599)
@"iPad4,8" - Wifi + Cellular (model A1600)
@"iPad4,9" - Wifi + Cellular (model A1601)
// iPad Mini 4
@"iPad5,1" - Wifi (model A1538)
@"iPad5,2" - Wifi + Cellular (model A1550)
//iPad AIR 2
@"iPad5,3" - Wifi (model A1566)
@"iPad5,4" - Wifi + Cellular (model A1567)
// iPad PRO 9.7"
@"iPad6,3" - Wifi (model A1673)
@"iPad6,4" - Wifi + Cellular (model A1674)
@"iPad6,4" - Wifi + Cellular (model A1675)
//iPad PRO 12.9"
@"iPad6,7" - Wifi (model A1584)
@"iPad6,8" - Wifi + Cellular (model A1652)
//iPad (5th generation)
@"iPad6,11" - Wifi (model A1822)
@"iPad6,12" - Wifi + Cellular (model A1823)
//iPad PRO 12.9" (2nd Gen)
@"iPad7,1" - Wifi (model A1670)
@"iPad7,2" - Wifi + Cellular (model A1671)
@"iPad7,2" - Wifi + Cellular (model A1821)
//iPad PRO 10.5"
@"iPad7,3" - Wifi (model A1701)
@"iPad7,4" - Wifi + Cellular (model A1709)
//iPod Touch
@"iPod1,1" on iPod Touch
@"iPod2,1" on iPod Touch Second Generation
@"iPod3,1" on iPod Touch Third Generation
@"iPod4,1" on iPod Touch Fourth Generation
@"iPod7,1" on iPod Touch 6th Generation
// Apple Watch
@"Watch1,1" on Apple Watch 38mm case
@"Watch1,2" on Apple Watch 38mm case
@"Watch2,6" on Apple Watch Series 1 38mm case
@"Watch2,7" on Apple Watch Series 1 42mm case
@"Watch2,3" on Apple Watch Series 2 38mm case
@"Watch2,4" on Apple Watch Series 2 42mm case
@"Watch3,1" on Apple Watch Series 3 38mm case (GPS+Cellular)
@"Watch3,2" on Apple Watch Series 3 42mm case (GPS+Cellular)
@"Watch3,3" on Apple Watch Series 3 38mm case (GPS)
@"Watch3,4" on Apple Watch Series 3 42mm case (GPS)
@"Watch4,1" on Apple Watch Series 4 40mm case (GPS)
@"Watch4,2" on Apple Watch Series 4 44mm case (GPS)
@"Watch4,3" on Apple Watch Series 4 40mm case (GPS+Cellular)
@"Watch4,4" on Apple Watch Series 4 44mm case (GPS+Cellular)
iOS 11以后默认只支持 64位,所以当 SDK 支持的系统版本高于 11 是无法打包出 32位架构包的。
UITableView push缩进问题
方案一
在使用了navigationController后,当界面进行跳转往返后,时而会出现tableView上移的情况,通常会自动上移64个像素,那么这种情况,我们可以关闭tableView的自动适配布局。
self.automaticallyAdjustsScrollViewInsets = NO;// 默认是YES
方案二:
当出现tableView整体上移时,你当然可以在 Xcode 中修改每个 View,将他们下移20个像素(状态栏高度)或者64个像素(状态栏+导航栏高度)。
但是苹果显然已经考虑到这个问题,他们早在 iOS 7 SDK 中为 ViewController 提供了一个 edgesForExtendedLayout 新属性。如果你将这个属性设置为UIRectEdgeNone,则 viewController 的所有子视图都会自动调整。
目前暂时也适用于不同系统版本代码更迭出现状况时使用。
self.edgesForExtendedLayout = UIRectEdgeNone;// 推荐使用
IDFA
您的 App 正在使用广告标识符 (IDFA)。您必须先提供关于 IDFA 的使用信息
或将其从 App 中移除,然后再上传您的二进制文件。
cd到工程目录,执行grep -r advertisingIdentifier .(注意:后面包含个点)看下运行结果
Binary file ./Pods/MOBFoundation_IDFA/MOBFoundation.framework/MOBFoundation matches
Binary file ./Pods/ShareSDK3/ShareSDK/Support/PlatformSDK/SinaWeiboSDK/libWeiboSDK.a matches
显示matches 的就是使用了IDFA
用户权限
导入了头文件 #import <AddressBook/AddressBook.h> 导致要申请用户权限,即使没调用api 上架也会被检测到然后悲剧 。
需要添加隐私声明 :Privacy - Contacts Usage Description
iOS APP内集成微信h5支付
欢迎入坑。。。
*入坑原因
因为要做独立app,就是要做好多app 比如一个美容院也有个APP?,APP支付难申请
*情景再现
1 .hybridApp 加载 https://wx.tenpay.com/cgi-bin/mmpayweb-bin/checkmweb?prepay_id=wx2017101716564603edf5c22a0202880123&package=396451697 本页面打开
发现加载不了 ,因为调起H5支付需要设置referer,而这时的referer为空 所以 ,去设置 ------------------------在请求网页时- 在请求头加入参数: request.setValue(“商户申请H5时提交的授权域名”, forHTTPHeaderField: “Referer”)
2 .上面加载会链向 weixin://wap/pay?prepayid%3Dwx2017101716564603edf5c22a0202880123&package=396451697&noncestr=1508230606&sign=30564047298967a8fbe05e7a5284a34e 再本页面打开页面
其中weixin://是微信APP内部自定义的协议 使得从外部(别的app 或浏览器打开 微信)微信加载这个链接直接就是支付金额页面进行支付了
3.这个时候以为离成功不远了,其实灾难才刚开始 。。。
4.在微信页面无法返回app 了
取消 (没有安卓的返回) 确定取消支付试试 ? 去safari了
5.文档说可以设置redirect_url 返回指定页面 ,叫后台在https://wx.tenpay.com/xxx 后面加参数 :
支付完成后跳转至https://www.wechatpay.com.cn,则可以做如下处理:
假设您通过统一下单接口获到的MWEB_URL= https://wx.tenpay.com/cgi-bin/mmpayweb-bin/checkmweb?prepay_id=wx20161110163838f231619da20804912345&package=1037687096
则拼接后的地址为MWEB_URL= https://wx.tenpay.com/cgi-bin/mmpayweb-bin/checkmweb?prepay_id=wx20161110163838f231619da20804912345&package=1037687096&redirect_url=https%3A%2F%2Fwww.wechatpay.com.cn
事实上redurect_url 的域名只能是商户申请H5时提交的授权域名!支付取消或完成还是会跑到safari 打开回调页!这就尴尬了。。。
6.想着加载一个自定义的协议weixinPay:// 模仿微信的weixin://从微信返回app ,现在域名只能是商户申请H5时提交的授权域名!行不通, 那就绕一下吧 先加载一个我们自己的静态页 在页面上做一个按钮 ,按钮再触发一个weixinPay://的链接 这个时候会提示是否回到app 打开 确认就能重新打开app 了
界面有点丑,需要再优化一下, 可以进入界面直接加载weixinPay:// 但是万一点了取消呢 所以返回按钮还是要有的 。
注意: weixinPay://是我们自己约定的协议 你也可以换成其他的 设置APP支持它:
7.最后还有个问题,由于设置redirect_url后,回跳指定页面的操作可能发生在:1,微信支付中间页调起微信收银台后超过5秒 2,用户点击“取消支付“或支付完成后点“完成”按钮。因此无法保证页面回跳时,支付流程已结束,所以商户设置的redirect_url地址不能自动执行查单操作,应让用户去点击按钮触发查单操作。回跳页面展示效果可参考下图
这个支付状态弹框会被刷掉,所以我们加载https://wx.tenpay.com/xxx 的时候加载一个新子页面, 检测到weixin://关掉这个子页面 ,等再次回到APP 就会停留在这个支付状态页面了。
OC打包静态库
##什么是静态库?
代码共享分两种,一种是开源,另一种是闭源(看不到源代码),有些一些大公司的 SDK 就是.h头文件加.a静态库文件,例如腾讯的 wechatSDK :如何打包静态库
step1:
创建新 project 或者 target ,选择 Cocoa Touch Static Library 模板
step2:
你可以删掉默认生成的文件,自己创建源文件,
step3:
.a文件只能打包.m 文件 打包库文件之前应该先把.m文件添加到待编译区,在 Copy Files 处添加暴露的头文件
生成的的头文件和 .a文件如果我们想放在同一目录,可以这样操作
step 4:
打包静态库文件只需按 cmd + b,如果你需要打包 release 版本可以去edit scheme 进行修改
我们选中.a文件 show in finder 去到文件所在位置
其中 include 文件夹中的头文件和同级的 libDoThingSDK.a 这三个文件就是我们打包生成的目标文件,也可称之为高大上的 SDK。
注意:如果你要重新打包静态库,应该先 cmd +shift + k clean 一下工程再打包,以保证得到的最新最新的静态库文件
###如何使用
step1:打开新工程,将上述三个文件引用到目录下
其实你也可以勾选第一个 Copy items if needed 这样 SDK就会复制一份到你的工程目录下了,我觉得这样比较浪费空间,可怜我的乞丐版 mac ,还是引用一下好了
step2:此时可能 运行工程会报错
这个时候就该先去删掉 derivedData 目录下生成的应用包
step3:
添加一下静态库的搜索地址
注意:这个路径是.a 文件所在文件夹的路径,而不是.a文件路径
step4:
.a 文件分 模拟器和真机版,需要分别打包(选择真机或模拟器 Build),且每次引用不同的静态库后还要重新更改 Library Search Paths ,我们可以通过命令把他们合并
其实就是 切换到我们要保存合并文件的目录 通过命令: lipo -create真机静态库文件地址
模拟器静态文件地址
-output输入文件名.a
查看静态库信息命令
lipo -info库名.a
DoThingSDK工程
SDK 使用 Demo