coding李


  • 首页

  • 分类

  • 归档

  • 标签

  • 搜索

创建podspec文件,为自己的项目添加pod支持

发表于 2017-04-16 | 分类于 IOS | | 阅读次数

创建GitHub项目

创建GitHub仓库

使用GitHub账户新建库,勾选下面许可证选项
image

clone到本地

创建完后clone到本地,在clone下来的文件里面新建工程,自己的组件放到单独的文件夹。
也可以在已有的工程根目录下创建许可证文件(LICENSE)。

提交项目到GitHub

确保demo没问题后提交到GitHub

1
$ git push origin master

发布到CocoaPods

注册trunk

1
2
$ pod trunk register leap@example.com 'leap’ #注册,会发带验证链接的邮件到邮箱地址,名称无法修改
$ pod trunk me #可查询注册信息。

命令执行完后邮箱会收到带有验证链接的邮件,打开链接就能完成trunk注册流程。

生成podspec文件

1
$ pod spec create 组件名

会在当前目录下生成.podspec文件,里面有非常多的注释,大部分都是无用的。建议删除内容,直接使用其它成功提交的podspec文件修改。

1
2
3
4
5
6
7
8
9
10
11
Pod::Spec.new do |s|
s.name = "LPSwipeNavigationController"
s.version = "1.0.1"
s.summary = "ARC and GCD Compatible LPSwipeNavigationController Class for iOS"
s.license = "MIT"
s.homepage = "https://github.com/leapCoding/LPSwipeNavigationController"
s.author = { "LeapDev" => "lpdevstore@163.com" }
s.platform = :ios, "7.0"
s.source = { :git => "https://github.com/leapCoding/LPSwipeNavigationController.git", :tag => "#{s.version}" }
s.source_files = 'LPSwipeNavigationController.h', 'LPSwipeNavigationController.m'
end

接下来讲解一下每行代码的含义
s.name 名称
pod search 搜索的关键词,注意这里一定要和.podspec的名称一样,否则报错
s.version 版本号
s.ios.deployment_target:支持的pod最低版本
s.summary: 简介
s.homepage:项目主页地址
s.license:许可证
s.author:作者
s.social_media_url:社交网址,这里我写的微博默认是Twitter,如果你写Twitter的话,你的podspec发布成功后会@你
s.source:项目的地址
s.source_files:需要包含的源文件
s.resources: 资源文件
s.requires_arc: 是否支持ARC
s.dependency:依赖库,不能依赖未发布的库
s.license说明
s.license= { :type => “MIT”, :file => “LICENSE” }
这里建议大家这样写,如果写别的会报警告,导致后面一直提交失败,这里军哥已经跳了很多坑
source_files说明
写法及含义建议大家写第一种或者第二种

1
2
3
4
5
"LPSwipeNavigationController/*
""LPSwipeNavigationController/LPSwipeNavigationController/*.{h,m}"
"LPSwipeNavigationController/**/*.h"

“” 表示匹配所有文件
“.{h,m}” 表示匹配所有以.h和.m结尾的文件
“**” 表示匹配所有子目录

验证.podspec文件

1
2
3
// --verbose 如果验证失败会报错误信息
pod spec lint LPSwipeNavigationController.podspec --verbose

打tag

1
2
$ git tag 1.0.0 #给源代码打版本标签,与podspec文件中version一致即可
$ git push --tag

更新GitHub仓库

提交修改到GitHub

发布到CocoaPods

1
$ pod trunk push LPSwipeNavigationController.podspec

发布成功后最后验证一下

1
$ pod search LPSwipeNavigationController

到此已全部完成

后台定位实现

发表于 2017-04-03 | 分类于 IOS | | 阅读次数

需求

  • 用户位置持续在发生变化,则隔一段时间上报一次
  • 如果用户移动很慢,则隔一段距离上报一次
  • 如果用户的位置在到达某处后没有变化 则不继续上报
  • 切换到后台也要能定位上报
  • APP因各种原因终止运行后(用户主动关闭, 系统杀掉) 也要能定位上报

实现

项目配置

在target的Capabilities选项中打开Background Modes 并勾选Location updates
image
然后在plist中添加NSLocationAlawaysUsageDescription的键 在value中随便键入任何内容
image
完成这两步 我们的前期工作就完成了 Background Modes是iOS7带入的新功能 而NSLocationAlawaysUsageDescription为了增强权限机制引入的提示描述 不添加这个的话定位功能可是使用不了的

代码实现

我们先定义一个CLLocationManager的子类 并根据需求中的几点定义三个变量
以下是部分代码

1
2
3
4
5
6
7
@interface LPLocationManager : CLLocationManager
+ (instancetype)sharedManager;
@property (nonatomic, assign) CGFloat minSpeed; //最新速度
@property (nonatomic, assign) CGFloat minFilter; //最小范围
@property (nonatomic, assign) CGFloat minInteval; //更新间隔

接下来是初始化函数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
- (instancetype)init
{
self = [super init];
if ( self )
{
self.minSpeed = 3;
self.minFilter = 50;
self.minInteval = 10;
self.delegate = self;
self.distanceFilter = self.minFilter;
self.desiredAccuracy = kCLLocationAccuracyBest; //定位的精准度
self.pausesLocationUpdatesAutomatically = NO;//是否允许系统自动暂停定位
if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 8) {
[self requestAlwaysAuthorization];//在后台也可定位
}
if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 9) {
self.allowsBackgroundLocationUpdates = YES;
}
}
return self;
}

demo链接https://github.com/leapCoding/LPLocation.git喜欢的朋友给个星吧,非常感谢

遇到的问题总结

* 应用需要在杀掉的情况下也能定位的话,要用startMonitoringSignificantLocationChanges定位方法。
* 只是在后台定位,用startUpdatingLocation就行,长时间位置不变的话,定位会停止,所以就需要做一些处理,
[startMonitoringSignificantLocationChanges和startUpdatingLocation的区别可看这篇文章](https://leapcoding.github.io/2017/04/01/%E5%90%8E%E5%8F%B0%E5%AE%9A%E4%BD%8D%E5%AE%9E%E7%8E%B0%E6%96%B9%E6%A1%88/) 
以下是自己能想到的一些解决方案,可能还有我没想到的


1. 使用静默推送,服务定时向APP端发送通知开启定位。
2. 网上很多神人说用 VoIP + 播放无声音频的方式让app常驻后台
3. 使用定时器不停的请求后台任务

注意事项

 后台定位开启有被拒的风险,当然你要有足够的理由让苹果通过你的应用,功能上也要尽量体现出你的APP是  需要用到后台定位的,描述时也要说明后台定位的问题
尽量给用户也要说明
例如滴滴

【温馨提示】
滴滴出行产品在使用过程中会持续使用GPS定位服务,切换至后台时,部分情况下仍会继续,例如共享位置时,相比其他操作会消耗更多电量,并影响电池续航时间。
Continued use of GPS running in the background can dramatically decrease battery life。

后台定位实现方案

发表于 2017-04-01 | 分类于 IOS | | 阅读次数

通过翻阅了各种官方文档和资料,总结结果如下:

实现后台定位有两种方法

  1. standard location service(调用CLLoctionManager的StartUpdateLocation)
  2. significant-change location service(调用CLLocationManager 的startMonitoringSignificantLocationChanges)

两者区别

  1. startUpdatingLocation)是标准定位,想要在后台使用必须在info.plist文件中增加Required background modes属性,并选择App registers for location updates值。
  2. startUpdatingLocation)在后台运行时可能会因为资源问题被系统挂起(suspend)或终止(terminate),但一旦有更新会被唤起,但是当更新时系统任然资源紧张,则会被延迟调用委托。如果对于实时性要求高的可能不适合这个,很难控制用户机器性能状况。
  3. startUpdatingLocation)如果被用户手动关闭,就不会再被唤醒。定位基于gps/基站/wifi定位,具体使用哪一种CoreLocation框架有一套自己的规则。
  4. startMonitoringSignificantLocationChanges)是使用基站定位的,所以设备一定要有电话模块,在plist中可以设置xx属性来限制可被下载安装的设备。
  5. startMonitoringSignificantLocationChanges)不管是在后台还是用户手动关闭都会被唤醒调用委托,只有3种方法可以阻止它的更新。(1)用户关闭定位服务(2)用户关闭对该app的定位服务(3)设备处于飞行模式或者无法开启必要的硬件(猜测是定位模块的硬件)。
  6. startMonitoringSignificantLocationChanges)什么时候更新呢?是在更换基站的时候更新。所以更新频率与基站密度有关。市区更新频率较郊区高。所以很多同学说没有更新是因为还在同一组基站范围内。

两者共性:

两者都更新位置信息时都回调相同的委托方法:-(void)locationManager:(CLLocationManager )manager didUpdateLocations:(NSArray )locations;

上传信息

由于后台任务只分配了有限时间执行必要的操作,所以如果在超时之前未完成(比如网络请求),app将会被终止。这里有一个方法,可以申请额外的10分钟让你执行想要的操作,申请后台任务:beginBackgroundTaskWithExpirationHandler(不详细说了,使用方法可以查一下资料)。

注意事项

提交审核时一定让苹果感觉你有必要使用后台定
位,而不是偷偷地把定位点发给服务器,其他的啥界面啥功能都没有,增加轨迹(学跑步软件),增加列表显示定位数据(学红圈营销),增加导航也可以,有界面和功能让苹果感觉你真的需要使用后台定位功能,提交的时候一定要告诉苹果那个功能使用了后台定位,这样才不容易被拒绝。

GitHub搭建免费个人博客

发表于 2017-03-01 | 分类于 html | | 阅读次数

创建Github 域名和空间

1.1注册
首先你需要注册一个GitHub账号,已有的可以下翻去1.2 创建仓库,注意username,这会影响到你的域名,你的域名将会是 username.github.io ,所以认真的取个名字吧。
136678-a5b815963631f1bf
1.2创建仓库
然后需要创建一个仓库(repository) 来存储我们的网站,点击首页任意位置出现的 New repository按钮创建仓库, Respository name 中的username.github.io 的username 一定与前面的Owner 一致,记住你的username下面会用到。
136678-56e4a7256ab4f141
第一步就已经完成了,下面是安装。

安装

Hexo 可以说是目前最流行的博客框架了,基于Nodejs,更多信息可以google,下面需要安装的工具包括 Git,Nodejs,Hexo。(Windows 用户自行搜索这些工具,直接安装即可,试过基本没啥问题)

1.安装Git
// 如果已安装HomeBrew 无需执行此行
\$ /usr/bin/ruby -e “\$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)”
$ brew install git // 安装Git

2.安装Nodejs
先安装nvm,这是Nodejs版本管理器,可以轻松切换Nodejs版本。 这里有两种方式安装。如果使用curl的方式安装,安装完成之后一定要重启终端。
2.1 Homebrew 安装方式,此安装方式无需重启
\$ brew install nvm
\$ mkdir ~/.nvm
\$ export NVM_DIR=~/.nvm
\$ . \$(brew –prefix nvm)/nvm.sh

2.2 curl安装方式

\$ curl https://raw.github.com/creationix/nvm/master/install.sh | sh

安装完成后,重启终端 并执行下列命令即可安装 Node.js。

\$ nvm install 4

2.3安装Hexo
以上所有都安装完成之后再安装Hexo
\$ sudo npm install hexo-cli -g
所有必须工具已经安装完成,下面我们就可以生成博客,上传至我们的Github 仓库了。

编写,发布

接下来我们需要用Hexo初始化一个博客,然后更改一些自定义的配置,或者加上自己喜欢的主题,写上第一篇文章,然后发布到自己的个人Github网站(username.github.io)。
3.1创建博客
将下面的 username 替换成你自己的username(其实也无所谓,作者强迫症),执行成功后,会创建出一个名为 username.github.io 的文件夹。
\$ hexo init username.github.io

3.2更改配置
主题安装
为了使博客不太难看,我们需要安装一个主题,切换至刚刚生成的Hexo 目录,安装主题
\$ cd username.github.io
\$ git clone https://github.com/iissnan/hexo-theme-next themes/next

这里选了一个极简的主题,也是Hexo众多主题中最受欢迎的一个。Hexo也有更多主题供你选择。
基础配置:打开文件位置username.github.io/_config.yml修改几个键值对,下面把几个必须设置的列出来按需求修改,记得保存, 还有注意配置的键值之间一定要有空格。更多设置…

title: dimsky 的 9 维空间 //你博客的名字
author: dimsky //你的名字
language: zh-Hans //语言 中文
theme: next //刚刚安装的主题名称
deploy:
type: git //使用Git 发布
repo: https://github.com/username/username.github.io.git // 刚创建的Github仓库
主题配置:
主题配置文件在username.github.io/themes/next/_config.yml中修改,这里略过。设置详情

3.3写文章
所有基础框架都已经创建完成,接下来可以开始写你的第一篇博客了
在username.github.io/source/_posts下创建你的第一个博客吧,例如,创建一个名为FirstNight.md的文件,用Markdown大肆发挥吧,注意保存。

3.4测试
\$ hexo s
测试服务启动,你可以在浏览器中输入https://localhost:4000 访问了。

3.5安装hexo-deployer-git自动部署发布工具
\$ npm install hexo-deployer-git –save

3.6发布
\$ hexo clean && hexo g && hexo d
如果这是你的第一次,终端会让你输入Github 的邮箱和密码,正确输入后,骚等片刻,就会把你的博客上传至Github 了。以后在每次把博客写完后,执行一下这个命令就可以直接发布了。
博客图片存储推荐使用七牛
恭喜你能走到这一步,你的博客已经完成了,在浏览器中输入 http://username.github.io 就能够访问了

leap

leap

记录下自己学习的点滴

4 日志
2 分类
3 标签
© 2017 leap
由 Hexo 强力驱动
主题 - NexT.Mist