PengKun's Blog

上善若水


  • 首页

  • 关于

  • 归档

  • 标签

  • 搜索

gRPC

发表于 2019-07-02

官方文档

Download the example

####1. 在执行文档中的步骤时开始出现了这样的错误信息

git RPC failed; curl 18 transfer closed with outstanding read data remaining

原因:git缓存设置不够需要增大缓存配置 解决办法如下

git config http.postBuffer 524288000

git config https.postBuffer 524288000

####2. 第一步问题解决后后面执行pod install时又出现

git error: RPC failed; curl 56 LibreSSL SSL_read: SSL_ERROR_SYSCALL, errno 54

查了好久网友给的解决办法好多,最后结论是mac 自带的git可能不完整配置文件缺少一些有用信息,只需要重新下载git就能解决这个问题

brew install git

终端开始下载关联的库 等待ing
运行demo 报错。。。

可运行Demo

3. 使用新的proto

在.podspec文件中有自动将proto文件转换成对应的项目类文件

4. Run the server

For this sample app, we need a gRPC server running on the local machine. gRPC Objective-C API supports creating gRPC clients but not gRPC servers. Therefore instead we build and run the C++ server in the same repository:

1
2
3
$ cd examples/cpp/helloworld
$ make
$ ./greeter_server &

CPU 资源消耗原因和解决方案(转载)

发表于 2019-06-26

原文传送门

对象创建

对象的创建会分配内存、调整属性、甚至还有读取文件等操作,比较消耗 CPU 资源。尽量用轻量的对象代替重量的对象,可以对性能有所优化。比如 CALayer 比 UIView 要轻量许多,那么不需要响应触摸事件的控件,用 CALayer 显示会更加合适。如果对象不涉及 UI 操作,则尽量放到后台线程去创建,但可惜的是包含有 CALayer 的控件,都只能在主线程创建和操作。通过 Storyboard 创建视图对象时,其资源消耗会比直接通过代码创建对象要大非常多,在性能敏感的界面里,Storyboard 并不是一个好的技术选择。

尽量推迟对象创建的时间,并把对象的创建分散到多个任务中去。尽管这实现起来比较麻烦,并且带来的优势并不多,但如果有能力做,还是要尽量尝试一下。如果对象可以复用,并且复用的代价比释放、创建新对象要小,那么这类对象应当尽量放到一个缓存池里复用。

对象调整

对象的调整也经常是消耗 CPU 资源的地方。这里特别说一下 CALayer:CALayer 内部并没有属性,当调用属性方法时,它内部是通过运行时 resolveInstanceMethod 为对象临时添加一个方法,并把对应属性值保存到内部的一个 Dictionary 里,同时还会通知 delegate、创建动画等等,非常消耗资源。UIView 的关于显示相关的属性(比如 frame/bounds/transform)等实际上都是 CALayer 属性映射来的,所以对 UIView 的这些属性进行调整时,消耗的资源要远大于一般的属性。对此你在应用中,应该尽量减少不必要的属性修改。

阅读全文 »

iOS12 保存生成的二维码图片到相册失败

发表于 2018-11-06

手机系统最近升级到iOS 12后,原项目中,保存生成的二维码图片到系统相册失败。

1
func UIImageWriteToSavedPhotosAlbum(_ image: UIImage, _ completionTarget: Any?, _ completionSelector: Selector?, _ contextInfo: UnsafeMutableRawPointer?)

以上代码只是介绍需要的参数是image,接收的参数是UIImage类型,没有说明image需要满足的条件

  • 在虚拟机中报的错误是:

Error Domain=ALAssetsLibraryErrorDomain Code=-3300 “写入失败” UserInfo={NSUnderlyingError=0x6000008d96b0 {Error Domain=ALAssetsLibraryErrorDomain Code=-3300 “写入失败” UserInfo={NSUnderlyingError=0x6000008d95f0 {Error Domain=ALAssetsLibraryErrorDomain Code=-3300 “写入失败” UserInfo={NSUnderlyingError=0x6000008d8d20 {Error Domain=PersistentURLTranslator Code=10 “(null)”}, NSLocalizedDescription=写入失败, NSLocalizedFailureReason=写入此资产时出现问题,因为写入无效。}}, NSLocalizedDescription=写入失败, NSLocalizedFailureReason=写入此资产时出现问题,因为写入无效。}}, NSLocalizedDescription=写入失败, NSLocalizedFailureReason=写入此资产时出现问题,因为写入无效。}

一头雾水,以为没有权限,再三检查了确认

  • 在真机中没有报错,但是通过控制台打印image的data数据时,却是nil
    阅读全文 »

xcode10适配

发表于 2018-10-24

最近从苹果开发者网站下载了最新的xcode10并同时安装了9和10版本,我们项目是用swift语言开发,所以面对swift4.2版本报了不少错误

1. 第三方库需要升级

修改升级第三方的版本号

  1. 检查当前编译器环境
    xcodebuild -version

  2. 切换使用Xcode10的编译器,确保是Xcode10
    sudo xcode-select -switch /Applications/Xcode10.app

  3. 重新编译第三方库
    carthage update –platform iOS

    阅读全文 »

利用crontab给scrapy的爬虫程序添加定时任务

发表于 2018-09-21

1. 编写执行任务的cron.sh,并输出日志

1
2
3
4
5
6
7
8
#! /bin/sh

export PATH=$PATH:/Library/Frameworks/Python.framework/Versions/3.6/bin

# 爬虫文件地址
cd /Users/xxx/Documents/Code/Spider/News/news

nohup scrapy crawl news --nolog >> news.log 2>&1 &

2. 添加定时任务

1
2
3
sudo crontab -e

*/1 * * * * sh /Users/pengkun/Documents/SourceCode/Spider/cron.sh
1
2
3
4
5
6
7
每五分钟执行 	 */5 * * * *
每小时执行     0 * * * *
每2小时执行     0 */2 * * *
每天执行       0 0 * * *
每周执行       0 0 * * 0
每月执行       0 0 1 * *
每年执行       0 0 1 1 *

查看定时任务
sudo crontab -l

3. 遇到的问题

阅读全文 »

利用scrapy爬虫

发表于 2018-08-21
1、安装wheel
    pip install wheel
   2、安装lxml
    https://pypi.python.org/pypi/lxml/4.1.0
   3、安装pyopenssl
    https://pypi.python.org/pypi/pyOpenSSL/17.5.0
   4、安装Twisted
    https://www.lfd.uci.edu/~gohlke/pythonlibs/
   5、安装pywin32
    https://sourceforge.net/projects/pywin32/files/
   6、安装scrapy
    pip install scrapy
  1. 创建工程
1
scrapy startproject Spider
  1. 创建爬虫程序
1
2
cd 	Spider
scrapy genspider meiju meijutt.com
  1. 执行爬虫
1
scrapy crawl meiju --nolog
阅读全文 »

跑步轨迹回放

发表于 2017-12-05

高德地图跑步轨迹展示的代码在高德官方的3D地图示例中RunningLineViewController类中已经有很好的示例代码,就不再赘述了 下载AMap_iOS_Demo。
这篇主要记录下实现轨迹回放的功能,当然这个方法对于所有地图的轨迹回放都是可用的。

实现回放准备条件:

  • 坐标数组、坐标对应的颜色数组
  • 渐变线
  • 动画
坐标转换,计算path

-
var coordinateArray: [CLLocationCoordinate2D] = [] // 跑步记录的坐标集合
coordinateArray 转换成视图上的坐标用于创建layer轨迹的CGMutablePath对象

阅读全文 »

跑步过程中播报跑步数据,实现长时间后台保活

发表于 2017-11-28

编写跑步app的时候音频播放总是面临着三个问题:

  1. 如何保证app长时间后台运行
  2. 如何在播报语音(几十个mp3文件)时保障连贯性
  3. 利用AudioSession如何处理好与其他同类型app播放的冲突

当时经过对竞品app的研究发现,实现长时间后台运行采用其中一种方式:持续播放无声音乐
对于第二个问题,我们一直在试错:

  • 第一种方式将即将播放的语音文件名存入数组中,轮询播放数组里文件
  • 第二种方式将即将播放的语音提前初始化AudioPlayer缓存到内存中,轮询播放

(这两种方式呢都没有保障播放的连贯性,而且如果用户手机里安装了同样采用此种做法的app的话,AudioSession设置比较复杂,而且播放中出现‘抢夺播放’导致播放卡顿的问题肯定会存在。)

阅读全文 »

iOS整体竖屏,个别页面横屏遇到的坑及解决办法

发表于 2017-11-15

iOS竖屏状态下present一个横屏的viewController(继承BaseViewController)出现bug,每次app第一次启动后,会出现如图1中的现象,本应该横屏全屏的界面,结果成了竖屏只有上半边的情况,下半边全黑,再次进入这个页面就不会再出现。

图1
阅读全文 »

iWatch-page

发表于 2017-09-30

今天整理一下在 Apple Watch 上实现 Page 和 圆形进度条两种效果,刚开始做的时候也很头大,也没见有多少人写 特别是 关于 圆形进度条效果 的博客。其实这两种效果实现起来超乎想象的简单。

Page

实现Page效果有两种方式:

第一种 在storyboard上连线

第一个controller连第二个controller选择next page
第二个controller连第三个controller选择next page
他们之间的返回,SB也已经为我们做好了

阅读全文 »
12
彭坤

彭坤

start from zero

16 日志
8 标签
© 2019 彭坤
由 Hexo 强力驱动
主题 - NexT.Mist