存档

‘日常’ 分类的存档

Pull is not possible because you have unmerged files解决方法

2014年3月2日 没有评论

最近在项目中添加了一个 SDWebImage 开源组件,然后运行 pod install的时候,结果出现了Pull is not possible because you have unmerged files 错误提示。

删除然后重新安装,依然报错。解决方法如下:

pod repo remove master

pod setup

如果仍然没有效果,那么再清理下缓存

rm -rf ~/.coocapods/

pod setup

我这边只进行了上面的第一步就已经正常了。

分类: iOS, 日常 标签: ,

我们都在变老

2014年1月21日 没有评论

13年的整个10月几乎都在加班,似乎每天都没有正常的下班。现在就趁着休假的机会和春节连在一起休掉。

回家给人的感觉就是所有的人都在变老,那感觉太明显了。

其实在这一年里,我的皮肤变差,眼睛近视很多。听姐姐讲那谁谁这2年做工程赚大发了,都是好几百万的收入,只可惜财追人阿,最后是个悲剧。

回家的这几天的时间里,家里早晚温度很低,电脑电话直接给冻的充不进去电了。

分类: 一句话, 日常 标签:

iOS第三方库管理工具:CocoaPods

2013年12月3日 没有评论

iOS 开发是我自学的,就那种边学边用的那种。一切都是慢慢摸索。

以前有看到推荐CocoaPods,一看介绍,确实不错,值得一用,但是直到今天才自己为此写文字。

现在来说流程:

首先在命令行里执行如下操作:

1、sudo gem update –system

这是为了让系统组件升级到最新版本。

2、sudo gem install cocoapods

开始安装cocoapods。

3、pod setup

自动配置cocoapods。接下来呢,就是要针对每个 ios 项目了。在想要配置的项目里编辑文件,文件名为 Podfile,内容格式如下:

platform     :ios
pod ‘JSONKit’
pod ‘FMDB’

这里需要特别说明的是,第一行的冒号应该和 ios 放在一起,我最开始是放在前面的,导致出错。剩下的就是每一行一个第三方的库引用。如果不知道名称是什么,可以用   pod search 关键词  命令来搜索看看。其实 Podfile 文件也可以使用touch 命令来创建,但是我更喜欢用编辑器来操作。其实后面还可以跟版本号,我比较喜欢使用最新的版本,所以就去掉啦。文件创建完成后,就执行第四步。

4、pod install

这个命令是需要先在命令行里进入到项目的文件夹,然后才运行的。安装成功后,会在项目的目录中,多出3个文件和一个文件夹,分别是  ***.xcworkspace、Podfile、Podfile.lock、Pods。以后再打开项目的话,就不要用 ***.xcodeproj 了,而是改用 ***.xcworkspace 。

随着项目的进度,会在后面才加入新的第三方库,这个时候只需要在 Podfile 里添加新的行,然后命令行进入到对应的项目文件夹,执行 pod update 就可以了。其实重新执行 pod install 也没有太大影响,只是说相对会慢一点。

上面的步骤和网上其他的地方基本上是大同小异的,实际使用的过程中,我还发现了另外的一个问题,就是在打开项目的时候,XCode 会提示我要不要对文件进行解锁。解锁后,总是提示失败。正是这个原因导致我在开始的时候放弃了CocoaPods。

我不知道这个现象是不是只有我一个人才有,网上也搜索了下,似乎信息很少。有的同学会觉得奇怪,既然无法解锁,那么就不解锁呗。原因是酱紫的,因为第三方库可能存在bug,或者使用了被遗弃掉的API,或者兼容性问题,或者只需要使用其中的某一个子组件。这些情况下,就需要对第三方库进行修改和完善。如果不解锁,就无法保存修改的地方。

既然没有什么有效的方式来解锁,只好使用linux的功能,sudo chmod -R 777  目录名   。这样的话就可以解锁所有的目录了。-R 参数是遍历所有的子目录。先前我每天添加,解锁不完美,后来查询了参数就顺利解决了。

在最后还有一个很重要的步骤,就是添加引用,不然在项目的代码里是无法 #import 头文件的,打开项目的 Target ,选择Build Settings,然后在Search Paths 节点下 User Header Search Paths 添加一个配置 ${SRCROOT},同时要记得选择 recursive。如果你一时发现不了User Header Search Paths,可以善用上方的搜索条喔。

分类: iOS, 日常 标签: , ,

windows环境下Git Server系列之记住密码

2013年11月9日 没有评论

在上一篇文章里,描述了如何在服务器配置自己的 Git Server,作为系列文章第二篇,这次我们来说一说使用Git 遇到的一个问题。

很多开发者喜欢使用命令行来进行版本控制,看起来很炫,特别是在妹子面前,显得很高深有没有。我其实也想炫一下,可惜记不住命令,所以还是用 GUI 界面来吧。

SVN 客户端我使用的是 TortoiseSVN,好在 Git 客户端也有一个类似的就是 TortoiseGit。

首先在目录里,右键选择克隆,然后输入 URL 地址,剩下的就是日常用法了,该怎么用大家各自搜索去。我想说的是保存用户名密码这个细节。

TortoiseSVN 在第一次签出的时候,会有对话框让你输入用户名密码,同时提供一个选项是记住密码。这样每次提交什么的,就不需要再输入了。而TortoiseGit会每次操作的时候,都让用户输入用户名和密码,并没有提供记住密码的功能。这是在调戏各个开发者的节奏哇。

于是我搜索了下解决方法,并在这里和大家分享出来。一共有3种:

第一个方法,如网上所述,先添加一个环境变量,例如 Home,值为 %USERPROFILE%,接下来在 C:\Users\[当前用户名] 路径下创建一个名为 _netrc 的文件。其实呢, %USERPROFILE% 就是等价于 C:\Users\[当前用户名] 目录。用记事本打开 _netrc 文件,输入下面的内容

machine github.com #git服务器名称
login user #git帐号
password pwd #git密码

保存即可。

第二个方法,比这个简单点。项目目录右键打开 TortoiseGit的设置对话框,Git 节点,选择“编辑本地.git/config”,然后增加两行内容就可以了。

[credential]
helper = store

保存即可。事实上这个方法,会在 C:\Users\[当前用户名] 目录下创建一个名为 .git-credentials 的文件,里面就是保存了用户名和密码。

需要强调的是,上面的两种方法都是明文保存的,所以安全性大家可以看着办。

Visaul Studio 是我用的最频繁的开发环境了。最新的版本是 2013,同时在这个版本里,微软添加了对 Git 的支持。所以就有第三种方法,在 VS 的团队资源管理器中,可以设置项目的 Git 属性,这里是可以记住密码的喔。个人猜测用户名密码是放在 VS 的相关配置里,所以应该看不到明文,起码我没有找到明文保存的路径。如果说大家使用的是 VS 之外的开发环境,可就不那么容易了。

最近看到好些个前端开发的职位,可惜我心有余而力不足。

分类: 日常 标签: , ,

windows环境下Git Server系列之安装配置

2013年11月9日 1 条评论

先来说一说背景。最近一直在加班陪着忙一个项目。项目开始的时候,说是来了一个牛人,很有个性。对于项目的版本控制,坚持要用git。人家用git,是把代码给提交到 Github 上面。

一来,我们这边从上到下都习惯用SVN,版本控制服务器也是个windows服务器,而git server 大部分是linux系统。另外一点,商业项目放在Github上,管理层有些担忧。后来,双方的PM都给那个牛人做工作,在压力下人家最后同意使用svn。

于是项目就开工了,最近一个月周末不休息都在加班。不过这个倒是题外话了。

我一直就在琢磨如何架设自己的 Git Server这个事情,SVN Server 我用的是免费的 VisualSVN Server,一直希望有个类似的window平台上的 Git Server。这么些年来,我习惯了 GUI 的操作,始终觉得 linux 的命令太难以记忆。如果有一个简单的软件在windows服务器上运行,并且有界面配置,简单容易操作,那该多好。

在网上搜索了一把,貌似很多都是在 windows 下模拟的 linux 环境,然后 ssh 登陆什么的。违背了简洁的原则,有这个折腾的功夫,我还不如就用linux服务器呢。昨天终于无意间被我搜索到一个开源的东西,可以满足我的要求了。

主角出场,那就是 Bonobo Git Server。

bonobo

这个应用的官网是http://bonobogitserver.com/

下载地址是:https://github.com/jakubgarfield/Bonobo-Git-Server

首先允许我来介绍下这个应用,它是运行在 IIS 下的使用 MVC3+ 的网站。网站本身使用了SQLite 存储,然后 git 方面是调用的其它组件。

相比其它的方式,有什么优点呢?首先不需要各种模拟linux环境,原生的。另外VisualSVN Server 还自带安装apache,而 Bonobo Git Server直接使用 IIS,感觉更爽。

下载解压缩,然后添加到 IIS 里,记得使用 netframework 4.0 应用池,为该网站添加一个域名就可以了。安装完成后,访问网站,输出初始用户名和密码 admin,即可登录。当前的版本已经支持多语言了。

进入了管理界面,首先要做的是修改全局设置。修改库目录为服务器上的目录文件夹,记得该文件夹要有写权限。至于是否允许匿名提交、匿名注册什么的,大家就根据实际情况设置吧。

全局设置完毕,再来设置用户,强烈建议大家修改admin的密码。同时再创建一个个人用户,admin 用来管理这个网站,而新建的个人用户则用来代码的提交。用户信息里有一个邮箱项,建议填写真实的邮箱。

然后就是库设置,新建一个库,设置权限什么的,有中文界面,很简单的,就不细说了。创建完成后,点击库,就可以查看库的 URL 地址了,这个地址就是版本控制的地址。

至此,服务器端的设置就完成了。大家可以开发使用了。

分类: 日常 标签: , , , ,

ios 7 导航栏遮挡视图的问题

2013年10月9日 没有评论

在发布了新的 ios 7 系统后,发现导航栏会占据视图的位置,如果应用是在6 和7 上都有用户的话,那么就需要做兼容适配。

网上有看到2种方法。一种是设置 UINavigationBar的translucent属性,self.navigationController.navigationBar.translucent = NO;

另外的一个方法是设置边沿延伸的属性,但是需要先获取判断系统的版本,代码如下:

if ([[[UIDevice currentDevice] systemVersion] doubleValue] >= 7.0) {

self.edgesForExtendedLayout = UIRectEdgeNone;

}

 

在查看文档的时候,发现有段文字提及UINavigtaionBar的高度会自动根据实际情况变化为 44 或者64,没有确定的预测方法,如果对 UINavigationBar 有设置背景图片的话,按照别人的经验,最好是用一个64高度的图片,上面的20像素设置为透明的。更具体的内容可以查看这里

分类: iOS, 日常 标签: ,

中秋节还不错

2013年9月22日 没有评论

这个中秋节算是运气比较不错的。超市有活动是猜灯谜的,最后还中了6只笔,什么谜语忘记了,只记得有一个是柴门闻犬吠,打一字,谜底是个润。

买东西结账时,刷的信用卡,居然提示中奖了,赶紧去兑奖,是一个50块钱的充值卡,还不错。

后来又买了一套西服,结账时说可以换一捅金龙鱼的油,捡了个便宜。

最后东西买完了,说单张小票超过多少钱就可以抽奖,什么珠宝、美妆类的还不参与,恰好有一个满足,于是就摸了下,中了个二等奖,选择了一个双人帐篷,olay 美的不得了,人家是一直想去搞个露宿什么的,现在就多了一件装备了。

从超市出来,说运气这么好,就去买个彩票,就买了几张刮刮奖,居然有一张中了个 500 块,那一本刮刮奖里估计就再也不会有什么大奖了。

一个下午,就中了5种奖品,运气还真不错。不过买东西也花了老多钱了。

分类: 一句话, 日常 标签: ,

迁移服务器的小问题

2013年7月27日 没有评论

友人服务器最近到期,准备迁移到阿里云上面。

买好了云服务器后,就开始部署,结果一直报错。说不是有效的32位程序,由于网站的登陆页面使用了加密狗,而报错的就是这个加密狗相关的dll 文件。在IIS 里添加了对32位程序的支持,还是不行,错误提示说是无法加载指定的模块。

后来想到加密狗dll 是用c++开发的,是不是缺少相关运行时导致。不清楚dll是用c++的哪个版本开发的,只好把05、08、12的32/64位运行时都下载了安装。

还是不行。

有点小崩溃了。想到既然是无法加载指定的模块,那应该是缺少模块咯。又用depends查看加密狗dll引用了哪些系统dll。发现引用了msvcr71.dll和mscoree.dll,把这2个dll 从别的电脑上复制到服务器上。运行又报错,不过错误提示发生了变化。

说是   c:\Windows\Microsoft.NET\Framework64\v4.0.30319\Temporary ASP.NET Files\root\946055b8\92eead15\xxxxxx.dll    拒绝访问。

开始以为是这个目录的权限问题,添加权限还加不上去,估计server 2008 默认是不允许的。后来查询了下,很多人说是需要给系统临时目录添加权限,果断给 temp 目录添加了 network service 权限,发现还是不行。

反复搜索,终于解决,原来是需要在应用程序池设置中将“加载用户配置文件”(Load User Profile)设置为true。

再次运行终于正常出现页面了。接下来又是数据库无法登陆,这个按照网上是说明,选择附加进来的数据库,右键属性,如上图,文件–〉所有者–〉选择用户sa,即可用此sa用户登录数据库。

弄好了这些,都深夜2点多了。

分类: 日常 标签: ,

iOS应用开发价格有多低

2013年7月22日 没有评论

7月份都过去大半了,今天才来写这个月的博客。今天可以来说一说最近发生的一件事情。

这个月,除了玩了很多的LOL外,就是写一个小应用了。某一次在威客网站上接了一个iOS的活,人家已经有android 的版本了,想再来一个iOS的,功能都比较简单。人家问我要多少钱,我很不自信,因为才学习iOS开发没有多久,所以准备说200块。然后又一狠心,又加了50块。

接着就轮到人家不相信了,我想如果从事开发的同学就知道,这个价格是非常低的了。在人家质疑能力的时候,幸好前不久在store上架了一个html5介绍的应用,于是人家也没有多说什么,当然这么低的价格也让人家最终选择了我。

当然最后结果还是不错的,人家主动说250块太低了,然后给加到350块了,后来觉得和我合作很舒服,于是又给添加了350块。虽然钱真的不多,也就一顿饭的支出。但那种被认可的感觉,真的很爽。

因为这个事情,妹子把我说了好几顿了。正所谓万事开头难嘛~再接再励好了。

分类: iOS, 日常 标签: ,

自定义协议及其在metro中的应用

2013年4月7日 没有评论

最近工作中有遇到这样的一个需求,就是在metro应用中,想调用指定的windows桌面程序来做一些事情。于是就琢磨了下,使用自定义协议来实现的。

其实我们接触自定义协议,用的最多的就是腾讯的 tencent:// 了,可以实现在网页中调用QQ的添加好友界面了。我们常见的协议有 http  ftp svn  等。当由于实际业务中这样或者那样的实际需要时,我们可以使用自定义协议来满足我们的要求。

为系统添加自定义协议很简单,最简洁的是2步。首先,我们在注册表 HKEY_Classes_Root 下添加协议的名称做为项,例如 zyx,为该项添加一个字符串“URL Protocol”,值为空字符串。接下来,我们再为该协议设置关联程序,在 HKEY_Classes_Root\zyx 下创建项 shell ,在 shell 下创建项 open ,在open 下创建项 command ,为该项设置默认值为应用程序的绝对路径,如果再路径的后面再添加 “%1” 的话,就表示可以接受额外的参数。

这里我给出 .reg 文件好了,很方便开发时使用。

Windows Registry Editor Version 5.00

;添加自定义协议
[HKEY_CLASSES_ROOT\zyx]
“URL Protocol”=””

;设置关联程序
[HKEY_CLASSES_ROOT\zyx\shell\open\command]
@=”c:\\launch.exe %1″

把上面的代码直接保存为reg文件,双击导入到注册表即可。这里有几个小知识点可以说下,reg文件里的注释是以;开头的,如果是多行注释,那么每一行都需要添加分号。如果路径不存在,那么系统会自动创建路径。设置关联程序时,默认值的内容文本里如果包含斜杠的话,那么应该使用双斜杠,和注册表路径区分出来。如果是反注册的话,只用在 HKEY 字符的前面添加一个-,同时去掉设置即可。

在一开始的时候,为注册表添加协议关联,我还犹豫是选择 bat 格式呢还是选择 inf 格式,后来还是决定用 reg 格式了。容易理解,很方便。

 

我们的项目中,想在metro下启动windows应用程序,下面来讲述如何使用。

比如说代码中直接这样执行,bool flag=await Windows.System.Launcer.LaunchUriAsync(new Uri(“zyx://ooxx-with-you”)); 在运行的时候,就会运行我们在注册表里设置的关联程序 launch.exe ,同时把 zyx://ooxx-with-you 作为参数传递过去。

有了参数传入,那么程序就可以做各种逻辑操作了。对于参数,我衣服自己洗这里就多啰嗦2句,虽然对于协议来说,zyx 是协议的名称,但是为了和其它协议作为格式上的一致,我们还是要添加上 :// 标志,作为区分也是好的嘛。另外,在参数中需要考虑2个问题,第一个是符号的问题,如果是特殊符号例如空格什么的,需要考虑编码问题。如果是网页中的地址,IE 会自动帮我们转码,但是其它的部分程序又不会例如资源管理器。所以为了避免编码问题带来的潜在风险,就不要使用特殊符号了。第二个问题是,自定义协议是在注册表里设置的,谁都可以调用,为了安全考虑,关联程序需要对接收到的参数进行检查。当然咯,检查的方法是需要自己来实现的。

有的同学还不是很了解应用场景,这里说一个。metro 应用程序是运行在沙盒中的,metro IE 同样也是的,在有网银、ActiveX的页面中,可能会有些问题,虽然未来可能会有解决方案,但是目前的一个思路就是,系统跳回桌面,使用 desktop 下的 IE 来打开,这么一来,使用自定义协议不就可以解决我们的问题了么。

其实,还有扩展名的解决方案,在我的demo中也实现了,和自定义协议大同小异,就留给大家去思考啦。

 

分类: 日常 标签: ,