iOS编译优化策略Optimization Level
开发汉信码扫描功能时,扫描个别汉信码,Release
环境下会闪退,Debug
环境下正常。没有找到崩溃原因,暂时更改Optimization Level
下的Release
为None[-O0]
,这样Release
下也会和Debug
一样,对代码没有优化操作。
更改位置:
1 | TARGETS -> Build Settings -> Optimization Level -> Release 选择`None[-O0]` |
跳转京东客户端某商品详情页
iOS9以后,app内打开其他app需要在Info.plist
里添加LSApplicationQueriesSchemes
白名单。
跳转京东客户端需要增加京东的URL Scheme:openapp.jdmobile
首先要判断手机里是否安装京东客户端:
1 | if ([[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"openApp.jdMobile://"]]) { |
跳转京东客户端:
1 | [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"openApp.jdMobile://"]]; |
跳转京东客户端某商品详情页:
1 | NSString *openUrl = @"openapp.jdmobile://virtual?params=%7B%22sourceValue%22:%220_productDetail_97%22,%22des%22:%22productDetail%22,%22skuId%22:%2299999999%22,%22category%22:%22jump%22,%22sourceType%22:%22PCUBE_CHANNEL%22%7D"; |
注意:openUrl字符串要原封不动的拷贝到应用中使用,里面的%22、%7等保持原样,不要转义。中间部分的99999999
是京东的商品编号:defSkuID
,跳转到该商品的详情中。
OC与JavaScript交互
在APP内使用UIWebView展示网页,有时候需要和网页进行功能交互和数据传递。
最简单的一种交互是使用UIWebView
的Delegate方法拦截webView的加载地址,和给定的地址匹配,如果匹配则不允许加载,并跳转到指定控制器,如果不匹配则允许加载。
拦截加载地址:
1 | - (BOOL)webView:(UIWebView*)webView shouldStartLoadWithRequest:(NSURLRequest*)request navigationType:(UIWebViewNavigationType)navigationType { |
iOS7以后,苹果推出了JavaScriptCore
,用它可以直接完成oc和js之间的交互通信。下面介绍利用代理实现js调用oc中的方法,并完成数据传递。
第一步:在加载UIWebView的控制器中创建JSExport
的协议,并写入和js约定好的方法,方法名要一致。该控制器遵守协议,并实现协议方法,完成webView和该控制器的交互。
1 | #import <UIKit/UIKit.h> |
第二步:在网页加载完毕时,获取js运行环境,并且设置方法对象的代理。
1 | - (void)webViewDidFinishLoad:(UIWebView *)webView { |
第三步:实现代理方法
1 | - (void)fnJumpScan { |